Files

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 <固定提交> 的内容。需要发布本地新代码时必须先提交;脚本会警告未提交文件未被打包。

固定安全步骤

  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 调用、采集、采购、下单或付款。