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