Admin 生产部署脚本
本目录的脚本把已经多次人工验证的 Admin 发布步骤固定下来:从指定 Git 提交隔离构建,完成测试和 Linux 交叉编译,再在服务器备份数据库、预检、原子切换并检查健康状态。
第一次使用
从仓库根目录先查看将执行的目标,不会连接或修改服务器:
.\admin\deploy\deploy-admin.ps1 -WhatIf
确认后部署当前已经提交的 HEAD:
.\admin\deploy\deploy-admin.ps1
脚本默认使用当前服务器 root@185.216.248.75:21638、域名 https://buy.833729.com,优先使用本机已有的 %USERPROFILE%\.ssh\vps_ai_deploy;也可以明确指定只允许当前账号读取的 SSH 私钥:
.\admin\deploy\deploy-admin.ps1 -IdentityFile C:\secure\cmautobuy_deploy
脚本使用 BatchMode=yes,不会接收或保存 SSH 密码。没有可用密钥或 ssh-agent 时会在上传前失败。
发布有数据库迁移的版本
脚本会比较生产 schema_migrations 和固定提交声明的目标版本。目标版本更高时默认停止。核对迁移和回退兼容性后,必须显式允许:
.\admin\deploy\deploy-admin.ps1 -AllowSchemaMigration
这个开关只允许新二进制在数据库备份后、独立端口预检时执行现有迁移,不会跳过迁移自检,也不会自动恢复数据库备份。
常用参数
| 参数 | 默认值 | 作用 |
|---|---|---|
-Commit |
HEAD |
发布指定提交、分支或标签解析出的固定提交 |
-ServerAddress |
185.216.248.75 |
SSH 服务器地址 |
-SSHPort |
21638 |
SSH 端口 |
-SSHUser |
root |
执行 systemd、备份和原子切换的服务器账号 |
-IdentityFile |
自动查找现有部署密钥 | 显式指定 SSH 私钥路径 |
-PublicBaseUrl |
https://buy.833729.com |
发布后的公网 HTTPS 健康检查地址 |
-AllowSchemaMigration |
关闭 | 明确允许目标代码升级生产 schema |
-WhatIf |
关闭 | 只显示目标,不构建、上传、备份或重启 |
工作区可以有未提交文件,但脚本只使用 git archive <固定提交> 的内容。需要发布本地新代码时必须先提交;脚本会警告未提交文件未被打包。
固定安全步骤
- 使用 Go 1.23.0 运行全量 test、build、vet。
- 构建
linux/amd64、CGO_ENABLED=0的单文件二进制并计算 SHA-256。 - 服务器核对上传 SHA、当前 schema、systemd 状态和四类后台活动任务。
- 使用服务器本机 MySQL 管理配置创建单事务 gzip 备份,检查压缩完整性和建表语句。
- 安装到
/opt/cmautobuy/releases/<提交短号>/,只链接稳定config.yaml和data/,不复制凭据与业务数据。 - 在
127.0.0.1:18083使用生产环境预检;迁移也只会在完成备份后从这里触发。 - 再次确认后台空闲,原子切换
/opt/cmautobuy/cmautobuy-admin并重启 systemd。 - 检查稳定链接、systemd、Nginx、本机 18080、公网根路径和登录页。
切换后任何检查失败,远端执行器会恢复上一稳定二进制并重启。数据库迁移不会自动反向恢复,因为恢复备份会覆盖迁移后产生的业务数据;有迁移的版本必须在执行前确认旧二进制是否兼容新 schema。
脚本不会删除旧 release 和历史备份,也不会触发顺运宝同步、目录导入、AI 调用、采集、采购、下单或付款。