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
ad8fa3f8
Commit
ad8fa3f8
authored
Oct 10, 2026
by
luoqi
Browse files
Options
Browse Files
Download
Plain Diff
Record completed production index preparation on test
parents
938dff56
7118f9bf
Pipeline
#3740
failed in 0 seconds
Changes
3
Pipelines
1
Hide 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 @
ad8fa3f8
# 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 @
ad8fa3f8
...
@@ -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 @
ad8fa3f8
...
@@ -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