Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
leiyun a79a6b0d5b save vor 1 Monat
..
package-files shunfeng发布脚本 vor 1 Monat
README.md save vor 1 Monat
build-runtime-package.sh save vor 1 Monat
docker-compose.yml shunfeng发布脚本 vor 1 Monat
install-runtime.sh shunfeng发布脚本 vor 1 Monat
release.env.example shunfeng发布脚本 vor 1 Monat

README.md

顺丰无源码增量发布

这套配置用于把顺丰环境从“在甲方服务器拉源码并现场构建”迁移为“我方构建镜像、甲方服务器只接收镜像包”。它只更新以下服务:

  • admin:主、从服务器
  • gatewayauthmonitor:主、从服务器
  • data:仅主服务器

现有 emp-pdfemp-wsemp-nacosemp-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-gatewaypdfws 在该环境会被构建脚本直接拒绝。

上传完成后脚本会输出可直接在主服务器执行的命令,目标目录默认为:

cd /home/emp-shunfeng/runtime

发布顺序固定为:

  1. 保存主服务器当前镜像作为回滚镜像,但暂不重启主服务。
  2. 把共享服务镜像传到从服务器,先更新从服务器并逐项健康检查。
  3. 从服务器正常后再更新主服务器并逐项健康检查。
  4. 任一节点失败时,自动恢复本次更新前的镜像并重建本次涉及的容器。

健康检查地址与现网端口一致:Admin /、Gateway /api/health、Auth /auth/health、Monitor /health、Data /health

四、COS 凭据

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 忽略。配置完成后,日常仍可使用上面的简短构建命令。

五、删除甲方服务器源码

不要在首次迁移前直接删除源码。建议先完成以下闭环:

  1. 两台服务器安装并核对 /home/emp-shunfeng/runtime
  2. 用新链路发布一个低风险服务,确认主从更新、健康检查和自动回滚均正常。
  3. 备份两台服务器现有 .env、旧 Compose 文件和 PM2 配置。
  4. 确认 emp-pdfemp-ws 的 PM2 启动目录不在准备删除的目录内;它们仍按原方式运行和维护。
  5. 再删除甲方服务器上的 emp_serveremp_admin Git 工作区,仅保留运行配置、日志和 PM2 所需代码。

源码删除后,Java 和 Admin 的后续更新只需要在主服务器执行 COS 下载命令;主服务器会自动协调从服务器,无需在从服务器手工重复发布。