diff --git a/docs/technical/【开发运维】Pingora独立网关试点-2026-06-11.md b/docs/technical/【开发运维】Pingora独立网关试点-2026-06-11.md index 27af7dc4e..0832bf487 100644 --- a/docs/technical/【开发运维】Pingora独立网关试点-2026-06-11.md +++ b/docs/technical/【开发运维】Pingora独立网关试点-2026-06-11.md @@ -359,6 +359,24 @@ dev 根盘空间在安装后曾接近满盘;2026-06-17 进入 canary 前已清 - `node /tmp/check-pingora-canary-access-log-parity.mjs --realpath --nginx-log-file /var/log/nginx/genarrative-pingora-realpath-canary.access.log --pingora-log-file /var/log/genarrative/pingora-gateway.access.log ... --json` 对账 `6/6 matched`,`missingCount=0`,`mismatchCount=0`;除 healthz 探针映射到 `__genarrative_pingora/healthz` 外,API config、SpacetimeDB identity、WSS subscribe、静态代表路径和 generated 拒绝路径的 Nginx path 与 Pingora path 完全一致。 - 恢复后 `grep genarrative-pingora-realpath-canary /etc/nginx/conf.d/genarrative.conf` 无匹配,`ss -ltnp | grep :18083` 无监听,证明临时 realpath canary server 已移除;`genarrative-pingora-gateway.service` 仍为 `active` 且 `NRestarts=0`。 +## dev API release 正式路径验收记录 + +2026-06-17 已在 dev 机用正式 API release 路径部署包含 Pingora 的发布包 `dev-pingora-api-20260617140915`。发布包由分支 `codex/pingoranginx` 的 `68bf3b698a885ee2cd248dcba81e4b57460000f8` 构建,包含 `api-server`、`api-server.sha256`、`pingora-gateway`、`pingora-gateway.sha256`、`release-manifest.json` 和随包部署 / 自审脚本。部署命令从上传到 `/tmp/dev-pingora-api-20260617140915` 的发布包内执行 `scripts/deploy/production-api-deploy.sh`,目标 release root 为 `/opt/genarrative/releases`,current link 为 `/opt/genarrative/current`。 + +本阶段验收只证明 API release 的正式打包、复制、current 切换、服务重启和 shadow Pingora 随 current 重启可用,不切 `80/443` 到 Pingora。验收结果: + +- `production-api-deploy.sh` 进入维护模式后完成 `api-server.sha256` 和 `pingora-gateway.sha256` 校验,复制二进制、checksum、manifest 和 Pingora 直连依赖到新 release,再把 `/opt/genarrative/current` 切到 `/opt/genarrative/releases/dev-pingora-api-20260617140915`,最后退出维护模式。 +- 部署时 `genarrative-pingora-gateway.service` 已为 `active`,脚本在 current 切换后执行 `systemctl try-restart genarrative-pingora-gateway.service` 并复核 active;`genarrative-api.service`、外部生成 worker 和 worker controller 也完成重启和 active 等待。 +- `/opt/genarrative/current/release-manifest.api-server.json` 记录 `api-server` 和 `pingora-gateway` 两个 artifact,`cd /opt/genarrative/current && sha256sum -c api-server.sha256 && sha256sum -c pingora-gateway.sha256` 均为 `OK`。 +- `/opt/genarrative/current/scripts/ops/pingora-current-release-audit.mjs --release-root /opt/genarrative/current --require-pingora-gateway --systemd-show` 返回 `summary.status=OK`,确认 current release 自包含、checksum 匹配、`pingora-gateway` 可执行,且 systemd `ExecStart` 指向 `/opt/genarrative/current/pingora-gateway`。 +- `/opt/genarrative/current/scripts/check-pingora-release-readiness.mjs --release-runtime-only` 通过,证明目标机可以只依赖 current release 运行 runtime-only 发布自审,不需要源码 checkout 或 Jenkins 工作区。 +- 部署后 `nginx`、`genarrative-api`、`genarrative-pingora-gateway`、`spacetimedb`、`genarrative-external-generation-controller.service` 和 `genarrative-external-generation-worker@1.service` 均为 `active`,API / Pingora / worker 相关服务 `NRestarts=0`。 +- `GET http://127.0.0.1:8082/readyz` 返回 `{"ok":true,"ready":true}`;`GET http://127.0.0.1:8082/api/creation-entry/config` 返回 `200`。 +- `GET http://127.0.0.1:18081/api/creation-entry/config` 经 Pingora shadow 返回 `200`;`GET http://127.0.0.1:18081/v1/identity` 返回真实 SpacetimeDB 语义 `405`。 +- 使用完整 WebSocket 握手头 `Sec-WebSocket-Protocol: v2.bsatn.spacetimedb` 访问 `http://127.0.0.1:18081/v1/database/genarrative-prod/subscribe?compression=Brotli`,HTTP code 为 `101`;curl 的超时退出只发生在 WebSocket 升级后连接保持阶段。少传该子协议时 SpacetimeDB 会返回 `400 no valid protocol selected`,不能作为网关失败证据。 +- Nginx 仍监听公网 `80/443`,Pingora 仍只监听 `127.0.0.1:18081`;`127.0.0.1:18083` 无监听。`https://dev.genarrative.world/` 与 `https://dev.genarrative.world/api/creation-entry/config` 通过本机 `--resolve` 验收均为 `200`,证明正常公网入口仍由 Nginx 承接。 +- 上传到 `/tmp/dev-pingora-api-20260617140915` 的临时发布包已删除;新 release 目录约 `57M`,清理后 dev 根盘约 `92%` 使用率。后续正式证据归档前仍需复核磁盘余量。 + ## 环境变量 | 变量 | 默认值 | 说明 |