Files
go-sip/deploys/preprod/README.md
T

61 lines
5.2 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.
# 固定预生产部署
目标是登记测试机 `server.sip`。服务使用 `nonprod-real`、真实 SaaS/RabbitMQ/AI/OSS 和原生 Asterisk;不安装 SaaS Mock 或本机 RabbitMQ,不以一次性运行目录代替正式运行。
## 固定位置
| 内容 | 位置 |
| --- | --- |
| 配置及 TLS | `~/.config/go-sip/` |
| Dispatcher SQLite | `~/.local/share/go-sip/dispatcher.sqlite` |
| Agent 会话 | `~/.local/share/go-sip/agent-session.json` |
| Agent 结果、录音及上传恢复 | `~/.local/share/go-sip/agent-recovery/` |
| 版本制品 | `~/.local/opt/go-sip/releases/<main提交>/` |
| 当前制品指针 | `~/.local/opt/go-sip/current` |
| 操作备份及私密证据 | `~/.local/share/go-sip-backups/` |
| 原生 Asterisk 配置 | `~/.config/go-sip-asterisk/`(沿用已安装实例) |
版本目录只保存制品,不包含业务数据库。正常重部署切换制品,不创建另一套运行数据,也不清除现有状态。
服务名固定为 `go-sip-asterisk.service`、`go-sip-agent.service`、`go-sip-dispatcher.service`,由 `rogee` 的 `systemd --user` 管理。旧日期命名的测试单元退役,不并行启动多个 Agent/Dispatcher。
## 当前项目配置来源
- `saas.env` 为 `KEY=VALUE`:`DispatcherUUID` → `DISPATCHER_ID`,`DispatcherKEY` → `DISPATCHER_SECRET_KEY`,`SaaSBaseURL` → `SAAS_BASE_URL`。
- `rabbitmq.env` 为 `KEY=VALUE`:`RABBITMQ_HOST/PORT/USER/PASS/VHOST` 构造正式 `RABBITMQ_URL`。用户名、密码及 vhost 按 URI 规则编码;不改用旧本机地址,不创建外部队列或交换机。
- `aliyun-oss.env` 不是 shell env:读取准确大小写的 `bucket`、`Endpoint`、`Region` 和 `RAM.username/accessKeyId/accessKeySecret`,转换为 Dispatcher 私有 OSS JSON,并以环境变量名称引用访问凭据。部署的录音前缀明确为 `call-recordings`,最大录音 64 MiB,与现有 Agent 上限一致;不写旧快照的桶或访问凭据。
- SIP、任务、额度、AI 连接和 AI 参数只从真实 SaaS 取得。`.local/provider-ai.env` 不覆盖 SaaS 返回的型号、音色、参数或连接。
三份源文件先核对所有者及 `0600`,只在受限进程中解析,不执行 `source`、不打印字段值。服务配置和密钥为 `0600`,目录为 `0700`;私有文件、完整连接串及原始证据不进入 Git。
## 部署及重置边界
一键脚本须核验登记 SSH 指纹、目标主机、正式 main 制品来源/hash、Debian 13/架构、原生 Asterisk及诊断工具、权限和必要配置。缺项立即失败,不跳过诊断、不安装 Mock 作为回退。
普通部署不得改写数据库、幂等记录、录音、结果、恢复文件或会话。首次安装明确使用上述固定路径;发现不兼容数据时停止,不偷偷切换另一套空目录。
只有显式 `--reset-state` 才能重置本项目非生产数据:停止相关服务、核实 Asterisk 没有活动通话、完成私密备份和清单记录后再处理。当前确认的首次部署可使用;之后每次必须重新确认,不根据报错自动重置。外部 SaaS、RabbitMQ、OSS 数据不属于重置范围,不以重置伪造旧通话已结束或已提交结果。
退役资源只限本项目旧测试部署及自有 Mock 设施。不得删除整个 `~/.local`、原生 Asterisk、其他项目服务或未确认归属的容器;必要凭据和原始证据保留,旧运行数据按已授权范围备份后处理。
## 启动及验证
用户已授权本次目标中的真实 SaaS 全部获批任务,不再逐通询问。程序仍核对任务归属、时段、线路、额度、并发、签发期限和消息身份;不自行生成外呼指令,不盲重拨或换线重拨。
验收包括三项服务安装、启用并启动,Asterisk/Agent `enabled+active`,外部 RabbitMQ 登录/通道、Agent监听、Asterisk基础运行及版本/hash。SaaS 未启动不阻断部署:Dispatcher可明确等待或自动重试,新执行准入保持关闭;SaaS读取、其业务队列供给、业务会话及新SIP加载延期,不把此状态写成业务已就绪。证书、配置、MQ登录及Asterisk故障不得归为SaaS不可用。没有HTTP响应须按真实错误类型判定,证书或未知传输错误阻断部署;等待状态必须是有最新对应错误的 `activating/auto-restart`,`failed` 不算成功。无获批任务、未接通或AI未调用时如实记录未验证。
## 一键入口
```bash
python3 deploys/preprod/preprod.py deploy
python3 deploys/preprod/preprod.py status
python3 deploys/preprod/preprod.py stop
python3 deploys/preprod/preprod.py start
# 仅本次首次部署已获授权;之后先取得新的重置确认:
python3 deploys/preprod/preprod.py deploy --reset-state --confirm-reset
```
部署要求本地main干净且已推送,源码固定为远程main,文件上传后再次校验SHA-256。`bootstrap` 仅导入原生Asterisk/TLS等主机基础元数据,并按根目录env覆盖业务来源;`retire-mocks` 在停服务、零活动通话和备份后退役已确认的本项目旧设施。普通重部署不重置数据。
自动化测试可以使用短时夹具和资源,结束后清理;它们不是预生产的服务依赖。生产发布门禁仍独立,不能把此次预生产部署写成生产签收。