|
|
1 месяц назад | |
|---|---|---|
| .. | ||
| package-files | 1 месяц назад | |
| README.md | 1 месяц назад | |
| build-runtime-package.sh | 1 месяц назад | |
| docker-compose.yml | 1 месяц назад | |
| install-runtime.sh | 1 месяц назад | |
| release.env.example | 1 месяц назад | |
这套配置用于把顺丰环境从“在甲方服务器拉源码并现场构建”迁移为“我方构建镜像、甲方服务器只接收镜像包”。它只更新以下服务:
admin:主、从服务器gateway、auth、monitor:主、从服务器data:仅主服务器现有 emp-pdf、emp-ws、emp-nacos、emp-tdengine 不在新发布链路中,不会被停止、重建或删除。
先在主、从服务器分别记录现状,尤其要核对 Compose 项目名:
docker inspect emp-gateway \
--format '{{ index .Config.Labels "com.docker.compose.project" }}'
docker inspect emp-gateway \
--format '{{ index .Config.Labels "com.docker.compose.project.config_files" }}'
docker inspect emp-gateway --format '{{.Config.Image}} {{.Image}}'
docker inspect emp-admin --format '{{.Config.Image}} {{.Image}}'
docker ps -a
pm2 list
如果第一个命令不是 emp_server,需要把两台服务器 release.env 中的 BACKEND_PROJECT_NAME 改成实际值。这样更新时会复用原有 emp_server_emp-net 网络,不会额外创建另一套网络。
顺丰环境默认地址为:主服务器 192.168.0.3、从服务器 192.168.0.4、SSH 端口 22。如果 SSH 端口不是 22,需要同步修改两台服务器的 release.env。
在我方受控构建机生成引导包:
cd /home/git/deploy/isolated
DEPLOY_ENV=emp-shunfeng COS_UPLOAD=1 EMP_ROOT=/home/git \
bash ./profiles/emp-shunfeng/build-runtime-package.sh
脚本会把引导包上传到 COS,并输出 Target bootstrap command。将这段命令分别复制到主、从服务器执行一次即可;构建机不需要直通顺丰服务器,服务器上也不需要预先存在 deploy-from-url.sh。
如果选择线下传包,也可以把生成的 dist/emp-shunfeng-runtime-bootstrap-*.tar.gz 放到主、从服务器,再分别执行:
mkdir -p /tmp/emp-shunfeng-bootstrap
tar -xzf emp-shunfeng-runtime-bootstrap-*.tar.gz \
-C /tmp/emp-shunfeng-bootstrap --strip-components=1
cd /tmp/emp-shunfeng-bootstrap
DEPLOY_HOME=/home/emp-shunfeng \
EXISTING_ENV_FILE=<现有emp_server目录下.env的绝对路径> \
bash ./install-runtime.sh
安装只复制运行配置,不加载镜像,也不重启任何容器。随后在两台机器核对:
vi /home/emp-shunfeng/runtime/.env
vi /home/emp-shunfeng/runtime/release.env
cd /home/emp-shunfeng/runtime
docker compose --env-file .env -f docker-compose.yml \
-p emp_server config >/tmp/emp-shunfeng-compose-config.txt
REMOTE_DEPLOY_HOME 是从服务器上的部署根目录,不是单独的配置文件目录。主、从服务器现在统一使用 /home/emp-shunfeng,真正需要的运行文件位于 /home/emp-shunfeng/runtime:
| 文件 | 主服务器 | 从服务器 | 说明 |
|---|---|---|---|
runtime/.env |
必须 | 必须 | 分别复制各自服务器原 emp_server/.env,不要用主机文件覆盖从机文件,因为 HOST_IP 等配置可能不同 |
runtime/release.env |
必须 | 必须 | 主从地址、路径、Compose 项目名;两台可以使用同一份模板 |
runtime/docker-compose.yml |
必须 | 必须 | 只定义 Gateway、Auth、Monitor、Data;从机发布时自动排除 Data |
runtime/deploy-from-url.sh |
必须 | 可保留 | COS 下载命令只在主服务器执行,从机由主服务器通过 SSH 更新 |
上述文件由 install-runtime.sh 自动放到正确位置。根目录 /home/emp-shunfeng 下不需要再额外创建 .env;.env 必须放在 runtime 子目录中。
推荐配置主服务器到从服务器的 SSH 密钥登录。若暂时只能使用密码,可在主服务器的 release.env 中增加 DEPLOY_PASSWORD=...,文件权限应保持 600。
在我方受控构建机执行:
cd /home/git/deploy/isolated
DEPLOY_ENV=emp-shunfeng \
COS_UPLOAD=1 \
EMP_ROOT=/home/git \
bash ./build-update.sh admin gateway auth
也可以按需发布:
# 两台服务器都更新 admin
DEPLOY_ENV=emp-shunfeng COS_UPLOAD=1 EMP_ROOT=/home/git \
bash ./build-update.sh admin
# 两台服务器更新 monitor,data 只更新主服务器
DEPLOY_ENV=emp-shunfeng COS_UPLOAD=1 EMP_ROOT=/home/git \
bash ./build-update.sh monitor data
顺丰环境会继续使用平铺镜像名,例如 emp-gateway:<版本> 和 emp-gateway:latest,不会改为 emp-shunfeng/emp-gateway。pdf 和 ws 在该环境会被构建脚本直接拒绝。
上传完成后脚本会输出可直接在主服务器执行的命令,目标目录默认为:
cd /home/emp-shunfeng/runtime
发布顺序固定为:
健康检查地址与现网端口一致:Admin /、Gateway /api/health、Auth /auth/health、Monitor /health、Data /health。
COS 密钥不再写入 Git。在我方构建机一次性创建 deploy/isolated/.cos.env:
cd /home/git/deploy/isolated
cp .cos.env.example .cos.env
chmod 600 .cos.env
vi .cos.env
.cos.env 已被 Git 忽略。配置完成后,日常仍可使用上面的简短构建命令。
不要在首次迁移前直接删除源码。建议先完成以下闭环:
/home/emp-shunfeng/runtime。.env、旧 Compose 文件和 PM2 配置。emp-pdf、emp-ws 的 PM2 启动目录不在准备删除的目录内;它们仍按原方式运行和维护。emp_server、emp_admin Git 工作区,仅保留运行配置、日志和 PM2 所需代码。源码删除后,Java 和 Admin 的后续更新只需要在主服务器执行 COS 下载命令;主服务器会自动协调从服务器,无需在从服务器手工重复发布。