# pingan-admin-deploy **Repository Path**: liuwenj/pingan-admin-deploy ## Basic Information - **Project Name**: pingan-admin-deploy - **Description**: aaaaaaaaaaaaaaa - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-01 - **Last Updated**: 2026-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # antiphone 自动化部署方案 本目录是 `antiphone` 在普通 ECS 机器上的自动化部署方案。它只负责部署已编译好的产物,不负责编译、打包和制品构建。 ## 目标 - 部署人员只需要指定环境、服务和版本。 - 支持多台 ECS 集群滚动发布。 - 支持新增机器快速扩容。 - 支持失败自动回滚和手动指定版本回滚。 - 配置和产物分离,避免发布覆盖环境配置。 - 后端服务使用 `systemd` 托管,前端静态资源使用 `nginx` 托管。 ## 部署单元 当前只部署 3 个单元,不部署 gateway: | 服务名 | 来源项目 | 类型 | 运行方式 | | --- | --- | --- | --- | | `antiphone-admin-api` | `pa-admin-server/admin` | Spring Boot | systemd + java | | `antiphone-client-api` | `pa-client-server` | Go gin | systemd | | `antiphone-admin-web` | `pa-admin-web` | React 静态资源 | nginx | 当前明确没有 so/JNI 运行时依赖,因此不需要 Docker 作为运行载体。 ## 目录规范 目标 ECS 上统一使用: ```text /opt/antiphone/ antiphone-admin-api/ releases/ 20260601_001/ current -> releases/20260601_001 previous -> releases/20260531_001 shared/ config/ logs/ tmp/ antiphone-client-api/ releases/ current previous shared/ config/ logs/ tmp/ antiphone-admin-web/ releases/ current previous shared/ logs/ ``` ## 产物规范 部署系统不负责编译,只要求外部构建系统按以下命名放置产物: ```text artifacts/ antiphone-admin-api/ antiphone-admin-api-20260601_001.tar.gz antiphone-client-api/ antiphone-client-api-20260601_001.tar.gz antiphone-admin-web/ antiphone-admin-web-20260601_001.zip ``` 压缩包内部目录结构必须符合以下要求。 `antiphone-admin-api-20260601_001.tar.gz` 解压后,`app.jar` 必须直接位于解压目录根部: ```text app.jar ``` `antiphone-client-api-20260601_001.tar.gz` 解压后,Go 二进制、许可证和静态配置必须直接符合以下结构: ```text antiphone-client-api *.lic config/ defaultClientCfg.json configTransRule.json ``` 部署脚本不会自动修改二进制名称、移动配置文件或剥离多余目录;产物结构不符合要求时,部署应直接失败。 执行 `bin/deploy.sh` 时会先在 shell 中校验产物格式;校验失败时不会进入 Ansible playbook,会直接输出类似: ```text 产物格式错误: antiphone-client-api 压缩包根目录必须直接包含 antiphone-client-api ``` `antiphone-admin-web-20260601_001.zip` 解压后可以直接是静态资源: ```text index.html static/... ``` 也可以只有一层 `dist/`: ```text dist/ index.html static/... ``` 除此之外不要再额外包一层版本目录。 ## 常用命令 初始化机器: ```bash ./bin/init.sh prod ``` 如果部署用户需要 sudo 密码,可以临时通过环境变量传入: ```bash export ANTIPHONE_BECOME_PASSWORD='your-sudo-password' ``` 部署服务: ```bash ./bin/deploy.sh prod antiphone-admin-api 20260601_001 ./bin/deploy.sh prod antiphone-client-api 20260601_001 ./bin/deploy.sh prod antiphone-admin-web 20260601_001 ``` 扩容部署到指定机器: ```bash ./bin/deploy.sh prod antiphone-client-api 20260601_001 --limit client-api-03 ``` 回滚到上一版本: ```bash ./bin/rollback.sh prod antiphone-admin-api ``` 回滚到指定版本: ```bash ./bin/rollback.sh prod antiphone-admin-api 20260531_001 ``` 健康检查: ```bash ./bin/healthcheck.sh prod antiphone-client-api ``` ## 部署流程 1. 校验服务名、版本号和本地产物是否存在。 2. 在目标机器创建发布目录。 3. 上传产物到目标机器。 4. 解压到 `releases/{version}`。 5. 渲染环境配置到 `shared/config`。 6. 将当前 `current` 记录为 `previous`。 7. 切换 `current` 到新版本。 8. 重启 systemd 服务或 reload nginx。 9. 执行健康检查。 10. 健康检查失败时自动切回 `previous` 并重启。 11. 清理旧版本,只保留最近 N 个。 ## 回滚原则 回滚不重新上传产物,只切换软链接: ```text current -> releases/{rollback_version} ``` 如果没有指定回滚版本,则使用 `previous` 指向的版本。 ## 环境变量和配置 Java 服务使用 `shared/config/app.env` 注入环境变量。 Go 服务运行时读取 `./config/config.yml`,部署时会将它链接到 `shared/config/config.yml`。`defaultClientCfg.json`、`configTransRule.json` 和 `.lic` 文件由产物提供。 敏感配置建议使用 `ansible-vault` 加密后写入 `group_vars/{env}.yml`。 ## 负载均衡 如果生产有云厂商 SLB,推荐滚动发布时接入摘除/加入节点流程。当前脚本先提供主机内滚动部署和健康检查,SLB 操作可以后续在 `pre_tasks` 和 `post_tasks` 中扩展。