Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

5.9 KiB

隔离测试环境增量更新说明

本文档用于后续只更新部分 EMP 服务镜像,不再每次全量打包中间件和所有服务。

一、适用场景

适用于只更新以下应用服务中的一个或多个:

简写 Compose 服务 镜像
gateway emp-gateway emp-test/emp-gateway
auth emp-auth emp-test/emp-auth
monitor emp-monitor emp-test/emp-monitor
data emp-data emp-test/emp-data
pdf emp-pdf emp-test/emp-pdf
ws emp-ws emp-test/emp-ws
admin emp-admin emp-test/emp-admin

中间件 MySQL、Redis、Kafka、TDengine、Nacos 不走增量更新包。

二、构建机生成增量包

进入部署脚本目录:

cd /home/git/emp_test_deploy/isolated

只更新 adminmonitor

EMP_ROOT=/home/git/emp \
IMAGE_NAMESPACE=emp-test \
./build-update.sh admin monitor

生成文件在:

dist/emp-test-update-<时间戳>-admin-monitor.tar.gz

也可以更新其他服务:

# 只更新前端
EMP_ROOT=/home/git/emp IMAGE_NAMESPACE=emp-test ./build-update.sh admin

# 只更新数据服务
EMP_ROOT=/home/git/emp IMAGE_NAMESPACE=emp-test ./build-update.sh data

# 更新模拟器 / WebSocket
EMP_ROOT=/home/git/emp IMAGE_NAMESPACE=emp-test ./build-update.sh ws

# 更新 PDF 服务
EMP_ROOT=/home/git/emp IMAGE_NAMESPACE=emp-test ./build-update.sh pdf

如果镜像已经在本机构建好,只想重新打包已有镜像:

EMP_ROOT=/home/git/emp \
IMAGE_NAMESPACE=emp-test \
SKIP_BUILD=1 \
./build-update.sh admin monitor

三、传输到甲方服务器

将增量包传到甲方服务器任意目录,例如:

/home/admin-x99/emp-test/update/emp-test-update-20260602153000-admin-monitor.tar.gz

四、甲方服务器应用增量包

进入服务器:

cd /home/admin-x99/emp-test
mkdir -p update-runtime
tar -xzf update/emp-test-update-20260602153000-admin-monitor.tar.gz \
  -C update-runtime \
  --strip-components=1
cd update-runtime

执行增量更新:

bash apply-update.sh

脚本会优先使用当前目录下的 .envdocker-compose.yml;如果当前目录没有,会自动查找 ../runtime//home/admin-x99/emp-test/runtime/ 下的运行配置。

脚本会自动执行:

docker load -i images.tar
docker compose --env-file .env -f docker-compose.yml -p emp-test \
  up -d --no-deps --force-recreate emp-admin emp-monitor

如果当前目录没有 .envdocker-compose.yml,可以显式指定运行环境目录中的文件:

PROJECT_NAME=emp-test \
ENV_FILE=/home/admin-x99/emp-test/runtime/.env \
COMPOSE_FILE=/home/admin-x99/emp-test/runtime/docker-compose.yml \
bash apply-update.sh

也可以手动指定更新服务,覆盖包内 services.txt

PROJECT_NAME=emp-test \
ENV_FILE=/home/admin-x99/emp-test/runtime/.env \
COMPOSE_FILE=/home/admin-x99/emp-test/runtime/docker-compose.yml \
bash apply-update.sh emp-admin emp-monitor

五、验证

查看服务状态:

cd /home/admin-x99/emp-test/runtime
docker compose --env-file .env -f docker-compose.yml -p emp-test ps emp-admin emp-monitor

查看后端日志:

docker compose --env-file .env -f docker-compose.yml -p emp-test logs --tail=100 emp-monitor

验证前端:

curl -I http://127.0.0.1:37361

六、注意事项

  1. 增量更新默认同时打 latest 和时间戳 tag。
  2. 当前测试环境 .env 建议继续使用 IMAGE_TAG=latest,不要为了增量包修改成时间戳。
  3. 如果把 .envIMAGE_TAG 改成某个新时间戳,但只传了部分服务镜像,其他服务会因为缺少该 tag 而无法重建。
  4. 如果修改了 docker-compose.yml.env.example、中间件初始化逻辑,建议重新全量打包或单独同步配置文件。
  5. 数据库结构变更不包含在镜像增量包中,需要单独执行 SQL 迁移。

七、PDF 导出故障排查

报错:

PDF导出失败: I/O error on GET request for "http://emp-pdf:3100/pdf": Connection refused

含义:emp-monitor 已经访问到 Docker 内网地址 emp-pdf:3100,但 PDF 服务端口没有进程监听,常见原因是 emp-pdf 容器未启动、启动后退出、正在重启,或 Node 服务未正常监听 3100。

新版 docker-compose.yml 已给 emp-pdf 增加 /health 健康检查,并让 emp-monitor 等待 emp-pdf 健康后再启动。若服务器仍使用旧 compose,需要先同步新的 docker-compose.yml 或按下面命令手动重启 PDF 服务。

先看容器状态:

cd /home/admin-x99/emp-test/runtime
docker compose --env-file .env -f docker-compose.yml -p emp-test ps emp-pdf emp-monitor

查看 PDF 服务日志:

docker compose --env-file .env -f docker-compose.yml -p emp-test logs --tail=200 emp-pdf

在 PDF 容器内检查健康接口:

docker compose --env-file .env -f docker-compose.yml -p emp-test exec emp-pdf \
  node -e "require('http').get('http://127.0.0.1:3100/health', r => { console.log(r.statusCode); r.pipe(process.stdout) }).on('error', e => { console.error(e.message); process.exit(1) })"

在同一个 Docker 网络里检查 emp-monitoremp-pdf 的访问:

docker compose --env-file .env -f docker-compose.yml -p emp-test exec emp-monitor \
  sh -lc "curl -sS http://emp-pdf:3100/health || wget -qO- http://emp-pdf:3100/health"

如果 emp-pdf 未运行或健康检查失败,先重启 PDF 服务:

docker compose --env-file .env -f docker-compose.yml -p emp-test up -d --no-deps --force-recreate emp-pdf

再重启 monitor,使其重新调用可用的 PDF 服务:

docker compose --env-file .env -f docker-compose.yml -p emp-test restart emp-monitor

如果日志中出现 Chromium/Puppeteer 相关错误,重新构建并增量更新 pdf

EMP_ROOT=/home/git/emp IMAGE_NAMESPACE=emp-test ./build-update.sh pdf