66 lines
3.4 KiB
Markdown
66 lines
3.4 KiB
Markdown
# 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 调用、采集、采购、下单或付款。
|