Files

66 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 调用、采集、采购、下单或付款。