You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

2.8 KiB

部署/更新(测试环境,服务器只有 jar)

服务器跑的是根目录 docker-compose.yml 那套自包含环境(mysql/redis/minio/nginx/crm-app)。 crm-app 不在服务器编译,而是用含 LibreOffice 的基础镜像 crm-runtime + 挂载 crm-app-1.0.0-SNAPSHOT.jar 运行。 本目录只负责 crm-app 的构建底座与更新脚本,其余服务一律不动

deploy/
├── Dockerfile.base   # 基础运行镜像(JRE17 + LibreOffice),一次性 build
├── restart.sh        # 更新重启脚本(仅 crm-app)
└── README.md

一次性:服务器初始化

上传整个项目目录(或至少 docker-compose.yml + nginx/ + deploy/)到服务器,例如 /opt/crm

cd /opt/crm
# 1. 构建含 LibreOffice 的基础镜像(耗时几分钟,之后很少再动)
docker build -f deploy/Dockerfile.base -t crm-runtime:latest .
chmod +x deploy/restart.sh

首次也可跳过这步——restart.sh 检测到基础镜像不存在会自动 build。

每次发版

本地(你)

D:\apache-maven-3.9.9\bin\mvn.cmd clean package -DskipTests

把产物 crm-app\target\crm-app-1.0.0-SNAPSHOT.jar 上传到服务器项目根目录(覆盖旧的)。

服务器(一条命令)

cd /opt/crm && ./deploy/restart.sh

脚本做的事:校验 crm-app-1.0.0-SNAPSHOT.jar → 基础镜像不存在则 build → docker compose up -d --no-deps --force-recreate crm-app(只重启 crm-app,加载新 jar,mysql/redis/minio/nginx 不动)→ 打日志与状态。

访问 / 排查

crm-app 不直接暴露 8080,经 nginx:80 访问。

cd /opt/crm
docker compose logs -f crm-app          # 跟 crm-app 容器日志(控制台)
docker compose ps                       # 全部服务状态
curl http://localhost/                  # 经 nginx 访问

日志文件(已映射到宿主机):应用写入容器 /app/logs/,compose 挂载到宿主机 ./logs/(即项目根目录下 logs/):

tail -f logs/crm-app.log        # 直接看落盘日志(含滚动:crm-app.log.1 …,保留 7 个)

备注

  • jar 名为 crm-app-1.0.0-SNAPSHOT.jar(打包原名),放项目根目录(compose 挂载 ./crm-app-1.0.0-SNAPSHOT.jar:/app/crm-app-1.0.0-SNAPSHOT.jar)。若以后版本号变了,需同步改 docker-compose.ymldeploy/Dockerfile.basedeploy/restart.sh 中的 jar 名。
  • 基础镜像 crm-runtime 只 build 一次;改了 Dockerfile.base(如调整 LibreOffice)才需重 build。
  • 整套环境首启/重启(含 DB 等)仍用原命令:docker compose up -d
  • 关于 docker-compose.yml:本次只把 crm-app 的 build: 改成 image: crm-runtime:latest + 挂载 jar, 其 environment / depends_on / nginx 等保持原样。