5.7 KiB
固定预生产部署: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。固定配置、数据库、恢复、发布版本、备份路径见 部署说明。首次重置已获用户授权,之后每次重置仍须新确认;普通重复部署无重置。旧 SQLite 不迁移、不以报错为由自动清理。
根目录三份私有文件先检查所有者和 0600,按原格式解析,不执行 source。OSS 的 RAM 字段为不缩进的冒号格式,不是 YAML;生成当前配置的桶、区域、连接和命名环境变量引用。Agent/Dispatcher 的实际环境、单 Agent 清单、OSS 配置及双向 TLS 文件已在测试机通过纯读取检查,未打开数据库或网络。AI 连接和业务参数只由正式 SaaS 获取。
已完成的退役与保留
- 20 个旧项目用户服务停止、停用并保留原文件(18 个业务/Mock 服务及另外 2 个已停的 SIP-only 临时服务);移除 5 个旧程序。
- 7 个旧项目运行/配置目录先停写、确认零通话、私密冷归档、逐份记录 SHA-256,再删除旧运行副本。数据库、未交付记录、恢复事实不改写为成功。
- 本机自有 RabbitMQ 仅有默认空 vhost 和旧 Dispatcher 归属 vhost(19 队列),无其他连接。采用实际配置打开带唯一标识的连接,检查本机连接清单,确认正式 RabbitMQ 不是该本机服务,而不是仅按地址判断。随后停旧服务,备份数据/配置,停用和移除旧 RabbitMQ;外部服务未改动。
- 开发机 6 个确认无进程使用的旧 ELF 程序先逐文件备份和核对 SHA-256,再删除;不删除整个
.local。 - 保留 Asterisk、其配置及依赖、当前所需凭据、SSH 主机登记、原始证据、录音与恢复的私密备份。没有清理外部 SaaS/RabbitMQ/OSS 数据或其他项目资源。
复核额外发现的 5 个旧 unit drop-in 目录、6 份配置(含 SaaS Mock)已先冷归档、记录 SHA-256 后移除,当前用户服务目录没有任何 go-sip-nonprod-* 残留。旧 RabbitMQ 连通性临时工具目录也已归档移除。旧 .local/share/sip-go-agent 已核对无活跃服务引用,整树冷归档后,将原文件保留到受控 go-sip-backups/retained-historical-tree-*;其中 backups/certs/env/results/staging 的原证据、凭据和结果全部保留,不作为现行配置或运行入口。私有保留清单为 retained-originals-manifest.json,补充移除清单为 audit-cleanup-verification.json。
原始清单、数据库/消息和抓包等仅存在权限受限位置,不提交完整原始内容。
验证与边界
部署测试覆盖字面 env 解析、权限/缺字段、OSS 实际格式、固定目录、关准入、独立 MQ 失败、重复部署保留数据、重置确认/冷备份顺序及活动通话保护。Go 诊断只输出阶段、状态、错误类型,不输出原始错误内容。格式、合同/Proto、vet、race、构建、隔离真实 RabbitMQ/HTTPS/mTLS 集成、业务覆盖率与本地发布检查通过;这些不是生产或真实通话签收。
首次部署 e5f46ba 已实测:Asterisk/Agent enabled+active,Dispatcher enabled、auto-restart,最新应用错误为 SaaS 尚未供给业务拓扑;hash 匹配、Agent 监听正常、原生通道/bridge 均 0。12 份私有文件为 0600,5 个受控目录为 0700,linger=yes。首次显式 reset 已执行,固定运行目录原为空;历史状态已另行私密冷归档,没有改写历史结果。后续部署不再携带 reset 参数。
正式服务版本/hash、私有权限、systemd 状态、Agent 监听和原生 Asterisk 状态由脚本实测。Dispatcher 等待 SaaS 时必须由最新应用日志说明 HTTP 不可用或 SaaS 未供给业务拓扑,同时实际状态须为 activating/auto-restart;failed 和未重试状态均不算部署成功。无 HTTP 响应时由 Go 按真实错误类型区分证书/链/主机名失败、连接拒绝/超时和其他传输错误;不以 HTTP 0 推断 SaaS 未启动。证书及未知传输错误明确阻断部署,不能把其他启动错误算作正常。自动重试不是业务 ready。停/启和重复部署检查不得重新使用首次重置授权。
测试机已实际执行脚本 stop/start:原固定目录中的现存状态文件 SHA-256 不变,Asterisk/Agent 恢复 enabled+active,Dispatcher 保持明确的 SaaS 拓扑等待状态、零活动通话。普通重复部署同样不传 reset 参数,并按私有 before-repeat-deployment 清单核对原文件保留;最终结果存私有 last-deployment/repeat-deployment-verification 清单,不公开其中原始数据。
已确认 SSH pin 的沿用不等于经云控制台独立认证;启用 lingering 不等于实际重启测试通过。最终交付需同时核对远程 main、发布清单和服务状态,并明确上述延期项。