feat: fixed systemd preproduction deployment with safe state reset

This commit is contained in:
2026-10-09 01:58:52 +08:00
parent 5b2cb11c2f
commit e5f46ba016
11 changed files with 1270 additions and 2 deletions
@@ -0,0 +1,31 @@
# 固定预生产部署:2026-10-08
## 范围与状态
登记目标仅 `server.sip`,Debian 13 / amd64 / `rogee`。使用 `nonprod-real`;不是生产发布,`production_approval=false`。前置外部地址修正已合入远程 main `5b2cb11`。部署脚本要求干净且已推送的 main,上传后逐文件核对 SHA-256,固定版本与状态记录在测试机私有 `~/.local/share/go-sip-backups/last-deployment.json` 和当前版本 `manifest.json`。
SaaS 尚未启动,三个正式入口当前均为 HTTP 404;部署不等待 SaaS。相关配置、业务队列供给、会话、新 SIP 快照、真实通话、AI、录音/上传及最终结果均未签收。未创建外部队列、未投递自造任务、未使用旧 Mock 或 AI 环境覆盖;新执行准入须保持关闭。外部 RabbitMQ 登录、打开通道、关闭通道和连接已独立验证。
## 固定入口
使用 `deploys/preprod/preprod.py` 的 `deploy/start/stop/status`,以及另外确认的 `deploy --reset-state --confirm-reset`。固定配置、数据库、恢复、发布版本、备份路径见 [部署说明](../../deploys/preprod/README.md)。首次重置已获用户授权,之后每次重置仍须新确认;普通重复部署无重置。旧 SQLite 不迁移、不以报错为由自动清理。
根目录三份私有文件先检查所有者和 0600,按原格式解析,不执行 source。OSS 的 RAM 字段为不缩进的冒号格式,不是 YAML;生成当前配置的桶、区域、连接和命名环境变量引用。Agent/Dispatcher 的实际环境、单 Agent 清单、OSS 配置及双向 TLS 文件已在测试机通过**纯读取检查**,未打开数据库或网络。AI 连接和业务参数只由正式 SaaS 获取。
## 已完成的退役与保留
- 18 个旧项目用户服务停止、停用并保留原文件;移除 5 个旧程序。
- 7 个旧项目运行/配置目录先停写、确认零通话、私密冷归档、逐份记录 SHA-256,再删除旧运行副本。数据库、未交付记录、恢复事实不改写为成功。
- 本机自有 RabbitMQ 仅有默认空 vhost 和旧 Dispatcher 归属 vhost(19 队列),无其他连接。采用实际配置打开带唯一标识的连接,检查本机连接清单,确认正式 RabbitMQ **不是**该本机服务,而不是仅按地址判断。随后停旧服务,备份数据/配置,停用和移除旧 RabbitMQ;外部服务未改动。
- 开发机 6 个确认无进程使用的旧 ELF 程序先逐文件备份和核对 SHA-256,再删除;不删除整个 `.local`。
- 保留 Asterisk、其配置及依赖、当前所需凭据、SSH 主机登记、原始证据、录音与恢复的私密备份。没有清理外部 SaaS/RabbitMQ/OSS 数据或其他项目资源。
原始清单、数据库/消息和抓包等仅存在权限受限位置,不提交完整原始内容。
## 验证与边界
部署测试覆盖字面 env 解析、权限/缺字段、OSS 实际格式、固定目录、关准入、独立 MQ 失败、重复部署保留数据、重置确认/冷备份顺序及活动通话保护。Go 诊断只输出阶段、状态、错误类型,不输出原始错误内容。格式、合同/Proto、vet、race、构建、隔离真实 RabbitMQ/HTTPS/mTLS 集成、业务覆盖率与本地发布检查通过;这些不是生产或真实通话签收。
正式服务版本/hash、私有权限、systemd 状态、Agent 监听和原生 Asterisk 状态由脚本实测。Dispatcher 等待 SaaS 时必须由最新应用日志说明 HTTP 不可用或 SaaS 未供给业务拓扑,不能把其他启动错误算作正常。自动重试不是业务 ready。停/启和重复部署检查不得重新使用首次重置授权。
已确认 SSH pin 的沿用不等于经云控制台独立认证;启用 lingering 不等于实际重启测试通过。最终交付需同时核对远程 main、发布清单和服务状态,并明确上述延期项。