Commit 86ed4d31 by luoqi

Merge self-contained operations handoff into test

parents 1ac7274f 5a291a41
Pipeline #3746 failed in 0 seconds
...@@ -334,9 +334,9 @@ ai logs --tail 100 ai-service ai-web ...@@ -334,9 +334,9 @@ ai logs --tail 100 ai-service ai-web
ingress logs --tail 100 channel-ingress ingress logs --tail 100 channel-ingress
``` ```
生产无本地分流,正常时 pending 应回落至 0。将 `ingress_backlog`、持续重试、AI readiness、PAC health、RDS 磁盘/连接/IO、主机内存和证书到期接入运维告警。中转只保障 AI 停服期间缓存;中转自身重启、主机/数据库不可用不属于零丢失保证。 生产无本地分流,正常时 pending 应回落至 0。将 `ingress_backlog`、持续重试、AI readiness、PAC health、主机资源和证书到期纳入我们负责的应用巡检;RDS 云指标沿用现有实例监控。中转只保障 AI 停服期间缓存;中转自身重启、主机/数据库不可用不属于零丢失保证。
## 12. 启用服务器巡检与告警 ## 12. 启用服务器巡检与告警(由我们实施)
AI 和中转就绪后在应用机执行: AI 和中转就绪后在应用机执行:
...@@ -349,7 +349,9 @@ install -m 644 deploy/production/friday-ai.logrotate /etc/logrotate.d/friday-ai- ...@@ -349,7 +349,9 @@ install -m 644 deploy/production/friday-ai.logrotate /etc/logrotate.d/friday-ai-
每两分钟检查 AI 数据库就绪、Web、PAC、中转积压、已到期 outbox 与过期租约,输出一行不含患者/凭据的 JSON。未来预约不算积压;超过五分钟或有过期租约报告 `degraded`。巡检不自动重启、不重发消息。 每两分钟检查 AI 数据库就绪、Web、PAC、中转积压、已到期 outbox 与过期租约,输出一行不含患者/凭据的 JSON。未来预约不算积压;超过五分钟或有过期租约报告 `degraded`。巡检不自动重启、不重发消息。
**运维须配置通知,否则日志不等于告警:** 云日志采集 `/var/log/friday-ai-health.log`,连续三次 `degraded` 或五分钟未收到记录告警;配置接收人。另用云拨测或独立探针主机每分钟请求生产 AI `/health/ready`,同时检查 `status=ok`、`db=up`,连续三次失败告警。监控 RDS 存储/IOPS/连接、应用机内存和证书到期。 **由我们完成通知接入并验收,不作为运维交付项。** 已有服务器巡检和外部探针脚本;巡检当前只输出 JSON,仍需接上通知:读取 `/var/log/friday-ai-health.log`,连续三次 `degraded` 或五分钟无新记录告警,恢复时通知。使用现有告警渠道,确认接收人;不把“日志生成成功”当作通知已完成。
外部探针部署在测试机或另一台可管理主机,每分钟请求生产 AI `/health/ready`,核验 `status=ok`、`db=up`,连续三次失败告警;单独配置状态目录,保留既有 PAC 探针。主机资源和证书到期巡检由我们配置。RDS 云存储/IOPS 等指标沿用现有实例监控;我们没有云控制台授权,不能将应用探针视为其替代。
可复用 `deploy/health-watch.sh` 在另一台服务器运行:`WATCH_URL=https://fai.friday.tech`、`WATCH_PATH=/health/ready`、`WATCH_REQUIRE_DB=1`、`WATCH_NAME=friday-ai-prod`,私密配置通知 webhook,沿用该脚本的失败/恢复和每日心跳机制。不要覆盖现有 PAC 探针配置;DNS、证书和服务验收完成后再启用该探针。 可复用 `deploy/health-watch.sh` 在另一台服务器运行:`WATCH_URL=https://fai.friday.tech`、`WATCH_PATH=/health/ready`、`WATCH_REQUIRE_DB=1`、`WATCH_NAME=friday-ai-prod`,私密配置通知 webhook,沿用该脚本的失败/恢复和每日心跳机制。不要覆盖现有 PAC 探针配置;DNS、证书和服务验收完成后再启用该探针。
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
## 项目与环境 ## 项目与环境
仓库:<https://code.jwsmed.com/ai-tools/pac>(PAC / FridayAI 单仓库)。 仓库地址:`https://code.jwsmed.com/ai-tools/pac`(PAC / FridayAI 单仓库)。
| 环境 | 应用服务器 | 代码目录 / 分支 | 域名 | | 环境 | 应用服务器 | 代码目录 / 分支 | 域名 |
| --- | --- | --- | --- | | --- | --- | --- | --- |
...@@ -37,35 +37,70 @@ CREATE EXTENSION IF NOT EXISTS btree_gist; ...@@ -37,35 +37,70 @@ CREATE EXTENSION IF NOT EXISTS btree_gist;
- 不改现有 `pac` 库、账号及实例全局时区。若库或账号已存在,核对后补齐权限,不删除重建。 - 不改现有 `pac` 库、账号及实例全局时区。若库或账号已存在,核对后补齐权限,不删除重建。
- 发布前确认 PAC 可恢复备份和恢复点、RDS 磁盘/IOPS 余量;新库纳入自动备份。 - 发布前确认 PAC 可恢复备份和恢复点、RDS 磁盘/IOPS 余量;新库纳入自动备份。
SQL 文件:[friday-ai-database.sql](../deploy/production/friday-ai-database.sql)(扩展语句须切换库后执行)。
## 2. 域名、证书与网关 ## 2. 域名、证书与网关
1. 新增 `fai.friday.tech` 的 DNS,指向现有生产网关;申请 HTTPS 证书并配置自动续期。 1. 新增 `fai.friday.tech` 的 DNS,指向现有生产网关;申请 HTTPS 证书并配置自动续期。
2. 在网关新增独立站点,使用 [friday-ai-gateway.conf.example](../deploy/production/friday-ai-gateway.conf.example),替换两处证书路径。 2. 在网关新增独立站点,复制下方完整配置,替换两处证书路径。
3. 配置网关到应用机的网络放行:仅允许网关访问 `172.16.4.239` 的 TCP `3103 / 3104 / 3106`,不开放公网直连。 3. 配置网关到应用机的网络放行:仅允许网关访问 `172.16.4.239` 的 TCP `3103 / 3104 / 3106`,不开放公网直连。
4. 执行 `nginx -t`,通过后 reload;保留现有 PAC 和测试站点配置。 4. 执行 `nginx -t`,通过后 reload;保留现有 PAC 和测试站点配置。
模板已包含以下转发规则,请完整保留: 在网关的 Nginx 已加载配置目录内新建 `friday-ai.conf`,内容如下:
| 路径 | 上游 | ```nginx
| --- | --- | # 在现有生产网关安装。域名统一为 fai.friday.tech;填写实际证书路径后 nginx -t。
| `/` | `http://172.16.4.239:3103` | # 前提:只有此网关可访问应用机 3103/3104/3106;真实来源仅一层代理。
| `/api/`、`/health`、`/health/ready` | `http://172.16.4.239:3104` | server {
| 仅 POST `/hook/ecom` | `http://172.16.4.239:3106` | listen 80;
server_name fai.friday.tech;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name fai.friday.tech;
ssl_certificate /REQUIRED/AI/fullchain.pem;
ssl_certificate_key /REQUIRED/AI/privkey.pem;
client_max_body_size 25m;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 10s;
proxy_send_timeout 300s;
proxy_read_timeout 3600s;
location /api/ {
proxy_pass http://172.16.4.239:3104;
proxy_buffering off;
proxy_cache off;
}
location = /health { proxy_pass http://172.16.4.239:3104; access_log off; }
location = /health/ready { proxy_pass http://172.16.4.239:3104; access_log off; }
# 回调直接交给独立中转,AI 停服时仍可接收。
location = /hook/ecom {
limit_except POST { deny all; }
client_max_body_size 20m;
proxy_pass http://172.16.4.239:3106;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 2s;
proxy_read_timeout 8s;
}
# 不暴露中转的本地调试和管理入口。
location = /local { return 404; }
location ^~ /local/ { return 404; }
location = /status { return 404; }
location ^~ /hook/ { return 404; }
location / { proxy_pass http://172.16.4.239:3103; }
}
```
模板已配置 SSE 禁用缓冲、长连接超时和上传限制,并禁止访问中转调试/管理路径。若网关前还有其他代理,请告知代理层数和真实来源 IP 的传递方式。 若网关前还有其他代理,请告知代理层数和真实来源 IP 的传递方式。
应用部署完成后共同验收:`https://fai.friday.tech/login` 可打开;`/health/ready` 返回 HTTP 200 且包含 `status=ok`、`db=up`。应用未启动前上游暂不可用属预期,正式切换回调由我们协调。 应用部署完成后共同验收:`https://fai.friday.tech/login` 可打开;`/health/ready` 返回 HTTP 200 且包含 `status=ok`、`db=up`。应用未启动前上游暂不可用属预期,正式切换回调由我们协调。
## 3. 接入现有监控告警(应用上线后启用)
- 采集应用机 `/var/log/friday-ai-health.log`:连续三条 `degraded`,或五分钟无新日志时通知负责人。
- 外部拨测 `https://fai.friday.tech/health/ready`:每分钟一次,连续三次失败告警,检查 HTTP 状态和上述 JSON 字段。
- 纳入主机内存/磁盘、RDS 存储/IOPS/连接数、证书到期监控,配置异常及恢复通知。
## 完成后反馈 ## 完成后反馈
- 新库/账号已就绪、密码已安全交付、备份恢复点。 - 新库/账号已就绪、密码已安全交付、备份恢复点。
- DNS、证书、网关配置完成,网络规则已放行;有额外代理时说明。 - DNS、证书、网关配置完成,网络规则已放行;有额外代理时说明。
- 告警接收人及通知渠道。
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment