Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pac
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-tools
pac
Commits
877f5339
Commit
877f5339
authored
Oct 10, 2026
by
luoqi
Browse files
Options
Browse Files
Download
Plain Diff
Finalize verified production preparation records
parents
ad25aed0
7118f9bf
Pipeline
#3741
failed in 0 seconds
Changes
3
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
10 deletions
+27
-10
docs/friday-ai-production-deployment.md
+9
-8
docs/friday-ai-production-handoff.md
+1
-1
docs/qa/2026-10-10-production-readiness.md
+17
-1
No files found.
docs/friday-ai-production-deployment.md
View file @
877f5339
# FridayAI 生产部署准备与实施
# FridayAI 生产部署准备与实施
> 2026-10-10 生产准备;已
准备索引任务和
独立密钥草稿,尚未发布生产应用、建 AI 库或修改运行配置。范围:现有 PAC + FridayAI + 独立企微中转;只接已有 5i5ya 数据,不开通 Friday SaaS,不启用宿主自动回写。
> 2026-10-10 生产准备;已
建成三个索引、补齐 66 条诊所名称并准备
独立密钥草稿,尚未发布生产应用、建 AI 库或修改运行配置。范围:现有 PAC + FridayAI + 独立企微中转;只接已有 5i5ya 数据,不开通 Friday SaaS,不启用宿主自动回写。
## 1. 当前生产与测试的差异
## 1. 当前生产与测试的差异
| 项目 | 生产核查结果 / 本次处理 |
| 项目 | 生产核查结果 / 本次处理 |
| --- | --- |
| --- | --- |
| 应用机 |
`ssh pac-friday`
,
`47.99.62.30:3335`
,源码
`/data/pac`
,
`main`
|
| 应用机 |
`ssh pac-friday`
,
`47.99.62.30:3335`
,源码
`/data/pac`
,
`main`
|
| 代码 | 服务器
`d9a9fda`
;准备基线
`main@
3b81549`
,其文件内容与已验证
`test@3cd4acf
`
相同。正式发布重新确认 SHA |
| 代码 | 服务器
`d9a9fda`
;准备基线
`main@
ad25aed`
,其文件内容与已验证
`test@938dff5
`
相同。正式发布重新确认 SHA |
| 已运行 |
`pac-pac-service-1`
、
`pac-pac-web-1`
、
`pac-pac-docs-1`
;尚无 AI/中转容器 |
| 已运行 |
`pac-pac-service-1`
、
`pac-pac-web-1`
、
`pac-pac-docs-1`
;尚无 AI/中转容器 |
| 网络 | 已有
`pac_default`
;生产由独立网关访问应用机私网,测试由应用机本地 Nginx 转发 |
| 网络 | 已有
`pac_default`
;生产由独立网关访问应用机私网,测试由应用机本地 Nginx 转发 |
| 数据库 | 现有 RDS PostgreSQL
**18.3**
;端点
`fridaypac.pg.rds.aliyuncs.com:5432`
。现有
`pac`
库,无
`friday_ai`
库 |
| 数据库 | 现有 RDS PostgreSQL
**18.3**
;端点
`fridaypac.pg.rds.aliyuncs.com:5432`
。现有
`pac`
库,无
`friday_ai`
库 |
| 字符集、时区 | PAC:UTF8、
`LC_COLLATE=C`
、
`LC_CTYPE=en_US.utf8`
;本次查询会话时区
`Asia/Shanghai`
。AI 新库使用相同字符集/排序规则,单独设 UTC;不改 PAC 库和 RDS 全局时区 |
| 字符集、时区 | PAC:UTF8、
`LC_COLLATE=C`
、
`LC_CTYPE=en_US.utf8`
;本次查询会话时区
`Asia/Shanghai`
。AI 新库使用相同字符集/排序规则,单独设 UTC;不改 PAC 库和 RDS 全局时区 |
| 数据 | 唯一宿主
`jvs-dw`
(5i5ya),启用;抽样患者及 manifest 均为
`tenantId=ruier-grp`
。不重复首灌,不创建
`friday-market`
|
| 数据 | 唯一宿主
`jvs-dw`
(5i5ya),启用;抽样患者及 manifest 均为
`tenantId=ruier-grp`
。不重复首灌,不创建
`friday-market`
|
| PAC 前置 | 未设置
`PAC_READ_SECRET`
;缺 7 条迁移(含本次移除派生表);
`clinic_names`
当前为空
|
| PAC 前置 | 未设置
`PAC_READ_SECRET`
;缺 7 条迁移(含本次移除派生表);
三个大表索引已预建,
`clinic_names`
已补齐 66 条
|
| 资源快照 | 约 15.4 GiB RAM、11.7 GiB 可用;
`/data`
可用 151 GiB。PAC 后端当时约 2.82 GiB / 8 GiB 上限;不代表摄入/重算高峰 |
| 资源快照 | 约 15.4 GiB RAM、11.7 GiB 可用;
`/data`
可用 151 GiB。PAC 后端当时约 2.82 GiB / 8 GiB 上限;不代表摄入/重算高峰 |
| RDS 规模 | 统计估算约 122 万患者、4,732 万事实、4,722 万事务;连接当时 42 / 820。未执行全表计数 |
| RDS 规模 | 统计估算约 122 万患者、4,732 万事实、4,722 万事务;连接当时 42 / 820。未执行全表计数 |
| 基础工具 | Compose 2.32.4,满足 raw env / override 要求;主机未发现
`psql`
、
`nginx`
、
`jq`
。Node/pnpm 随镜像提供,不需要安装到主机 |
| 基础工具 | Compose 2.32.4,满足 raw env / override 要求;主机未发现
`psql`
、
`nginx`
、
`jq`
。Node/pnpm 随镜像提供,不需要安装到主机 |
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
| 运维:域名 | 确认 AI 生产域名与回调域名,例如
`fai.friday.tech`
、
`relay.friday.tech`
(仅建议,尚未确认);DNS、HTTPS 证书、网关配置权限 |
| 运维:域名 | 确认 AI 生产域名与回调域名,例如
`fai.friday.tech`
、
`relay.friday.tech`
(仅建议,尚未确认);DNS、HTTPS 证书、网关配置权限 |
| 运维:网络 | 网关到应用机私网 IP 的 3103 / 3104 / 3106;仅允许网关来源,禁止公网直连。核对真实代理层数;确保应用机容器可访问 RDS、ECom、OSS、模型服务 |
| 运维:网络 | 网关到应用机私网 IP 的 3103 / 3104 / 3106;仅允许网关来源,禁止公网直连。核对真实代理层数;确保应用机容器可访问 RDS、ECom、OSS、模型服务 |
| 运维:RDS | 在现有实例建独立
`friday_ai`
库和专用账号;当前
`pac`
用户没有 CREATEDB / CREATEROLE 权限。由有权限人员操作,不复用 PAC 数据库账号 |
| 运维:RDS | 在现有实例建独立
`friday_ai`
库和专用账号;当前
`pac`
用户没有 CREATEDB / CREATEROLE 权限。由有权限人员操作,不复用 PAC 数据库账号 |
| 运维:备份 | PAC 发布前可恢复的 RDS 备份;AI 上线后同样纳入自动备份和恢复演练。
确认大表建索引所需 RDS 磁盘、IOPS 余量与低峰
窗口(本次没有云控制台权限核查) |
| 运维:备份 | PAC 发布前可恢复的 RDS 备份;AI 上线后同样纳入自动备份和恢复演练。
三个大表索引已经建好;仍需确认上线后的 RDS 磁盘、IOPS 余量与发布
窗口(本次没有云控制台权限核查) |
| 业务 / ECom | 生产 API 地址、accessId、accessSecret、回调出口 IP、生产回调 URL 登记;确认凭据/回调能与测试隔离,不能把现有测试回调直接改成生产 |
| 业务 / ECom | 生产 API 地址、accessId、accessSecret、回调出口 IP、生产回调 URL 登记;确认凭据/回调能与测试隔离,不能把现有测试回调直接改成生产 |
| 业务 / ECom | 首个验收企微号、收费/设备额度及归属企业;不能与本地/测试同时托管同一号,不能在重试时重复申请设备 |
| 业务 / ECom | 首个验收企微号、收费/设备额度及归属企业;不能与本地/测试同时托管同一号,不能在重试时重复申请设备 |
| 运维:OSS | 生产 region、私有 bucket、RAM 凭据;允许必要读写及签名下载,前缀
`friday-ai-prod`
。不复制测试附件和密钥 |
| 运维:OSS | 生产 region、私有 bucket、RAM 凭据;允许必要读写及签名下载,前缀
`friday-ai-prod`
。不复制测试附件和密钥 |
...
@@ -178,7 +178,7 @@ INGRESS_ECOM_IPS=<供应商确认的生产出口IP,逗号分隔>
...
@@ -178,7 +178,7 @@ INGRESS_ECOM_IPS=<供应商确认的生产出口IP,逗号分隔>
-
`20261008170000_fact_host_tenant_statistics`
-
`20261008170000_fact_host_tenant_statistics`
-
`20261009160000_remove_unused_patient_step_latest`
-
`20261009160000_remove_unused_patient_step_latest`
其中 3 条为热表
`CREATE INDEX CONCURRENTLY`
,第 6 条含 ANALYZE。
已单独启动索引准备任务,发布前按下述命令确认全部有效;提前创建索引不登记 Prisma 迁移,发布时同名
`IF NOT EXISTS`
会跳过创建并正常登记。需要 RDS 额外磁盘和 IO;索引耗时与应用停服时长分开记录
。迁移先执行,成功后才替换 PAC 容器。选择低峰并确认无大批量摄入/重算;不要为了 AI 上线手动全量重算画像或召回。
其中 3 条为热表
`CREATE INDEX CONCURRENTLY`
,第 6 条含 ANALYZE。
2026-10-10 01:55 已完成全部索引预建并独立验证;发布前按下述命令复核全部有效;提前创建索引不登记 Prisma 迁移,发布时同名
`IF NOT EXISTS`
会跳过创建并正常登记。索引已占用约 2.73 GiB,无需再次构建;正式迁移还会执行其余 DDL 及统计采样,仍需发布窗口
。迁移先执行,成功后才替换 PAC 容器。选择低峰并确认无大批量摄入/重算;不要为了 AI 上线手动全量重算画像或召回。
```
bash
```
bash
cd
/data/pac
cd
/data/pac
...
@@ -189,17 +189,18 @@ curl -fsS --max-time 5 http://127.0.0.1:3101/health
...
@@ -189,17 +189,18 @@ curl -fsS --max-time 5 http://127.0.0.1:3101/health
迁移失败立刻停止发布。若并发索引中断,先检查
`pg_index.indisvalid`
和失败迁移;不得仅因索引同名存在就标记 applied,不使用
`migrate reset`
,不盲目循环重试。
迁移失败立刻停止发布。若并发索引中断,先检查
`pg_index.indisvalid`
和失败迁移;不得仅因索引同名存在就标记 applied,不使用
`migrate reset`
,不盲目循环重试。
5i5ya 诊所字典已于 2026-10-10 补齐,共 66 条,无需重复执行。日后需要刷新名称时,可单独运行:
```
bash
```
bash
# 生产 clinic_names 当前为空;从现有 DW 派生字典,不重新摄入患者。
docker
exec
pac-pac-service-1 node dist/cli/refresh-clinic-names.cli.js
\
docker
exec
pac-pac-service-1 node dist/cli/refresh-clinic-names.cli.js
\
--dir
=
./data/jvs-dw
--host
=
jvs-dw
--dir
=
./data/jvs-dw
--host
=
jvs-dw
```
```
检查字典得到实际诊所名。
未使用的治疗步骤汇总表、查询接口及回填 CLI 已撤掉并合入 main,不需要回填或重新首灌 5i5ya。旧建表迁移保留,新迁移删除派生表;生产当前尚未建此表,按顺序迁移会创建后删除空表,不会扫描患者事实。若部署前状态发生变化、该表已有数据,先备份该表并在构建完成后停止旧 PAC 后端,再迁移和启动新版。
未使用的治疗步骤汇总表、查询接口及回填 CLI 已撤掉并合入 main,不需要回填或重新首灌 5i5ya。旧建表迁移保留,新迁移删除派生表;生产当前尚未建此表,按顺序迁移会创建后删除空表,不会扫描患者事实。若部署前状态发生变化、该表已有数据,先备份该表并在构建完成后停止旧 PAC 后端,再迁移和启动新版。
## 7. 发布前索引检查
## 7. 发布前索引检查
生产后台记录在
`/data/pac-ops/readiness-20261010/`
。只看
`index-exit-code=0`
还不够,检查日志及数据库当前有效性:
已完成的生产准备记录在
`/data/pac-ops/readiness-20261010/`
,索引与收尾任务均正常退出
。只看
`index-exit-code=0`
还不够,检查日志及数据库当前有效性:
```
bash
```
bash
cat
/data/pac-ops/readiness-20261010/index-exit-code
cat
/data/pac-ops/readiness-20261010/index-exit-code
...
...
docs/friday-ai-production-handoff.md
View file @
877f5339
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
-
生产发布脚本、远端网关端口覆盖、独立中转部署和配置预检。
-
生产发布脚本、远端网关端口覆盖、独立中转部署和配置预检。
-
服务器健康/队列巡检、cron 与日志轮转模板;不依赖开发电脑。
-
服务器健康/队列巡检、cron 与日志轮转模板;不依赖开发电脑。
-
生产专用 JWT 私钥、读取密钥、中转密钥、数据库应用密码及 env 草稿,位于应用机
`/data/pac-ops/readiness-20261010/config/`
,尚未激活。
-
生产专用 JWT 私钥、读取密钥、中转密钥、数据库应用密码及 env 草稿,位于应用机
`/data/pac-ops/readiness-20261010/config/`
,尚未激活。
-
PAC
索引后台准备任务;最终结果必须以准备记录、退出码和数据库有效性检查为准
。
-
PAC
三个大表索引已于 2026-10-10 01:55 建成并验证有效,合计约 2.73 GiB;5i5ya 诊所名称字典已补齐 66 条。正式发布仍需运行七条迁移登记,已建索引会跳过重复创建
。
-
未使用的治疗步骤汇总功能已移除,不需要回填或全量重算患者。
-
未使用的治疗步骤汇总功能已移除,不需要回填或全量重算患者。
## 请运维处理
## 请运维处理
...
...
docs/qa/2026-10-10-production-readiness.md
View file @
877f5339
...
@@ -20,7 +20,21 @@
...
@@ -20,7 +20,21 @@
首次尝试在 00:20 开始;00:23 连续两次 PAC 健康检查超过五秒,任务按保护逻辑取消。核查同一时段有 00:15 启动的
`incremental_bundle`
正在摄入,不能仅据此归因于索引。随后健康恢复。已确认并删除本次创建的无效索引,未触碰既有索引,首次日志保留在
`attempt-1/`
。
首次尝试在 00:20 开始;00:23 连续两次 PAC 健康检查超过五秒,任务按保护逻辑取消。核查同一时段有 00:15 启动的
`incremental_bundle`
正在摄入,不能仅据此归因于索引。随后健康恢复。已确认并删除本次创建的无效索引,未触碰既有索引,首次日志保留在
`attempt-1/`
。
调整后不仅看 PostgreSQL 长查询,还检查
`sync_logs`
:摄入期间和完成后的 15 分钟不启动;之后需要连续六次健康/空闲采样。每次只建一个,
`CONCURRENTLY`
,维护内存 64 MB、并行维护 worker 0、锁超时 5 秒、语句超时 45 分钟。最多等待六小时;健康连续失败会取消并停止,不自动循环重试。任务仍需以最终日志和索引有效性查询确认。
调整后不仅看 PostgreSQL 长查询,还检查
`sync_logs`
:摄入期间和完成后的 15 分钟不启动;之后需要连续六次健康/空闲采样。每次只建一个,
`CONCURRENTLY`
,维护内存 64 MB、并行维护 worker 0、锁超时 5 秒、语句超时 45 分钟。最多等待六小时;健康连续失败会取消并停止,不自动循环重试。任务已正常结束,退出码 0;下列结果已通过独立数据库查询复核。
### 最终结果(北京时间 2026-10-10)
| 索引 | 开始 | 完成 | 大小 |
| --- | --- | --- | --- |
|
`patient_transactions_patient_id_clinic_id_idx`
| 01:40:03 | 01:43:59 | 424 MB |
|
`patient_facts_host_id_tenant_id_type_occurred_at_idx`
| 01:46:29 | 01:49:40 | 1866 MB |
|
`patient_facts_host_id_tenant_id_type_planned_for_idx`
| 01:52:10 | 01:55:10 | 505 MB |
-
三个索引均
`indisvalid=true`
、
`indisready=true`
;列顺序、表及 btree 定义与迁移一致。大小合计约 2.73 GiB。
-
`index-exit-code=0`
、
`finalize-exit-code=0`
;01:55:21 完成全部服务器准备动作,02:00 左右独立复核通过。
-
已调用现有 CLI 从 5i5ya 数仓补齐
`jvs-dw.clinic_names`
,共 66 条;旧值备份
`clinic-names.before.json`
(600 权限),执行日志
`clinic-names-refresh.log`
。
-
PAC
`/health`
返回
`status=ok`
。API/Web 运行镜像 ID、启动时间与操作前相同,生产源码仍为
`d9a9fda`
,PAC
`.env`
内容未变;未发布生产 AI/中转。
-
索引预建没有登记任何待发布迁移,也没有改摄入调度、全局时区或患者事实。首次取消的无效索引已经清理并重新成功建立,无失败残留。
提前创建不修改
`_prisma_migrations`
。正式发布仍按顺序运行七条迁移:三个索引已有效时跳过重复创建;未启用派生表按历史迁移创建后由新迁移删除,不回填事实。
提前创建不修改
`_prisma_migrations`
。正式发布仍按顺序运行七条迁移:三个索引已有效时跳过重复创建;未启用派生表按历史迁移创建后由新迁移删除,不回填事实。
...
@@ -42,3 +56,5 @@
...
@@ -42,3 +56,5 @@
## 运维交付
## 运维交付
按
[
生产部署
](
../friday-ai-production-deployment.md
)
实施。需要运维执行的 SQL、网关、cron、日志轮转模板在
`deploy/production/`
。待提供:生产域名/证书,专用数据库账号,ECom/OSS/模型生产配置,告警接收人,首个集团/管理员/诊所/席位信息。无需交付 RDS 管理账号。
按
[
生产部署
](
../friday-ai-production-deployment.md
)
实施。需要运维执行的 SQL、网关、cron、日志轮转模板在
`deploy/production/`
。待提供:生产域名/证书,专用数据库账号,ECom/OSS/模型生产配置,告警接收人,首个集团/管理员/诊所/席位信息。无需交付 RDS 管理账号。
生产准备工具已验证后合入 main
`ad25aed`
、test
`938dff5`
;本次收尾仅更新完成记录及运维步骤,不更改应用代码。临时索引/字典任务已退出,收尾自动化在文档同步完成后停用。
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment