# EMP 隔离环境增量更新说明 增量包用于只更新指定应用服务镜像,不包含 MySQL、Redis、Kafka、TDengine、Nacos 等中间件镜像。 默认环境为 `emp-test`;UAT 环境使用 `DEPLOY_ENV=emp-uat`。 甲方服务器系统重装后,`emp-test` 和 `emp-uat` 都需要先重新执行全量部署;全量部署完成并确认 `runtime/.env`、`runtime/docker-compose.yml` 存在后,后续版本再使用增量更新。 Kafka 配置应保持为: - `emp-test` 模拟器推送 `ip-cld.cn:29362` / `test-vehicle-real-data`,后端消费 `ip-cld.cn:29362` / `YuanJing-test-vehicle-mock-data`。 - `emp-uat` 模拟器推送 `ip-cld.cn:29362` / `uat-vehicle-real-data`,后端消费 `ip-cld.cn:29362` / `YuanJing-uat-vehicle-mock-data`。 内部 Kafka 镜像仍会打进离线包,但默认不启动、不参与业务链路。 ## 支持更新的服务 | 简写 | Compose 服务名 | 镜像 | | --- | --- | --- | | gateway | emp-gateway | `${IMAGE_NAMESPACE}/emp-gateway` | | auth | emp-auth | `${IMAGE_NAMESPACE}/emp-auth` | | monitor | emp-monitor | `${IMAGE_NAMESPACE}/emp-monitor` | | data | emp-data | `${IMAGE_NAMESPACE}/emp-data` | | pdf | emp-pdf | `${IMAGE_NAMESPACE}/emp-pdf` | | ws | emp-ws | `${IMAGE_NAMESPACE}/emp-ws` | | admin | emp-admin | `${IMAGE_NAMESPACE}/emp-admin` | ## 构建并上传 UAT 增量包 打包服务器先设置 COS 配置: ```bash export COS_SECRET_ID=change-me export COS_SECRET_KEY=change-me export COS_REGION=ap-chengdu export COS_BUCKET=emp-example-bucket ``` 构建指定服务,上传 COS,并输出签名 URL: ```bash cd /home/git/emp_test_deploy/isolated DEPLOY_ENV=emp-uat \ COS_UPLOAD=1 \ EMP_ROOT=/home/git/emp \ ./build-update.sh admin monitor ``` 其中 `/home/git/emp_test_deploy/isolated` 是部署脚本目录,`EMP_ROOT=/home/git/emp` 是业务代码根目录。 输出示例: ```text Package: .../dist/emp-uat-update-20260611123000-admin-monitor.tar.gz COS Key: deploy/emp-uat/update/20260611123000/emp-uat-update-20260611123000-admin-monitor.tar.gz SHA256: ... URL: https://... ``` 如果本机镜像已经构建好,只需要重新打包并上传: ```bash DEPLOY_ENV=emp-uat \ COS_UPLOAD=1 \ SKIP_BUILD=1 \ EMP_ROOT=/home/git/emp \ ./build-update.sh admin monitor ``` ## 甲方服务器按 URL 应用增量包 先确认目标环境已完成全量部署,并存在: ```text /home/admin-x99/emp-uat/runtime/.env /home/admin-x99/emp-uat/runtime/docker-compose.yml ``` 执行: ```bash DEPLOY_ENV=emp-uat \ DEPLOY_HOME=/home/admin-x99/emp-uat \ PACKAGE_SHA256=<打包输出的SHA256> \ bash deploy-from-url.sh "<打包输出的URL>" ``` 同一台服务器上更新不同环境时,必须使用对应环境参数: ```bash # 更新 test DEPLOY_ENV=emp-test \ DEPLOY_HOME=/home/admin-x99/emp-test \ PACKAGE_SHA256=<打包输出的SHA256> \ bash deploy-from-url.sh "" # 更新 uat DEPLOY_ENV=emp-uat \ DEPLOY_HOME=/home/admin-x99/emp-uat \ PACKAGE_SHA256=<打包输出的SHA256> \ bash deploy-from-url.sh "" ``` `deploy-from-url.sh` 会将包下载到: ```text $DEPLOY_HOME/packages/<时间戳>/ ``` 然后调用包内的 `apply-update.sh`,并自动使用运行目录中的 `.env` 和 `docker-compose.yml`。 ## 手工应用增量包 如果已经手工解压增量包,可以在解压目录执行: ```bash cd /tmp/emp-update DEPLOY_ENV=emp-uat \ DEPLOY_HOME=/home/admin-x99/emp-uat \ ENV_FILE=/home/admin-x99/emp-uat/runtime/.env \ COMPOSE_FILE=/home/admin-x99/emp-uat/runtime/docker-compose.yml \ bash apply-update.sh emp-admin emp-monitor ``` 如果不传服务名,`apply-update.sh` 会读取增量包内的 `services.txt`。 ## 验证 查看 UAT 服务状态: ```bash cd /home/admin-x99/emp-uat/runtime docker compose --env-file .env -f docker-compose.yml -p emp-uat ps emp-admin emp-monitor ``` 查看日志: ```bash docker compose --env-file .env -f docker-compose.yml -p emp-uat logs --tail=100 emp-monitor ``` 查看 test 时把目录和项目名改为 `emp-test`: ```bash cd /home/admin-x99/emp-test/runtime docker compose --env-file .env -f docker-compose.yml -p emp-test ps emp-admin emp-monitor ``` ## 注意事项 1. 增量包默认同时包含 `latest` 和时间戳两个镜像 tag。 2. 目标服务器 `.env` 建议保持 `IMAGE_TAG=latest`,除非确定所有服务都已经按同一个时间戳 tag 部署。 3. 如果修改了 `docker-compose.yml`、`.env.example` 或中间件初始化逻辑,建议重新打全量包,或单独同步运行配置。 4. 数据库结构变更不包含在镜像增量包中,需要单独执行 SQL 迁移。 5. 同一台服务器同时部署 `emp-test` 和 `emp-uat` 时,更新命令里的 `DEPLOY_ENV`、`DEPLOY_HOME`、包 URL 必须匹配同一个环境。