Files
go-sip/docs/evidence/fixed-preprod-systemd-20261008.md
T

40 lines
6.0 KiB
Markdown
Raw 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.
# 固定正式部署(使用非正式配置):2026-10-08
命名说明:现行目录与入口为 `deploys/production/production.py`;此历史记录的文件名和当时执行的旧命令保留,用于追溯,不代表另有一套预生产部署方式。改名不改变本记录的验收事实。
## 范围与状态
登记目标仅 `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/production/README.md)。首次重置已获用户授权,之后每次重置仍须新确认;普通重复部署无重置。旧 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、发布清单和服务状态,并明确上述延期项。