# 复制到本机临时 shell 或 CI secret 环境后运行: # npm run check:pingora-direct-live # 该检查只读访问已经显式配置 TLS_LISTEN / HTTP_REDIRECT_LISTEN 的 pingora-gateway。 # 切换窗口建议先运行: # npm run check:pingora-direct-preflight -- --env-file /etc/genarrative/pingora-gateway.env --require-live-env --systemd-cat --check-cert-readable --check-service-env-file --check-service-user-cert-readable --check-service-binary-executable --check-ports-free # release readiness --require-direct 必须确认 TLS/HTTP redirect 端口已释放,复核 health patrol env 已切到 direct 模式,并提供 Pingora access log 路径用于 request_id 落盘校验。 # 直连启用前: # /opt/genarrative/current/scripts/deploy/pingora-direct-enable.sh --no-status # /opt/genarrative/current/scripts/deploy/pingora-direct-enable.sh --apply --preflight-env-file /etc/genarrative/pingora-gateway.env --preflight-check-cert-readable --preflight-check-service-env-file --preflight-check-service-user-cert-readable --preflight-check-service-binary-executable --preflight-check-ports-free --direct-https-base-url https://127.0.0.1 --direct-http-base-url http://127.0.0.1 --direct-host <域名> --direct-redirect-host <域名或host:port> --direct-spacetime-database <库名> --direct-pingora-access-log /var/log/genarrative/pingora-gateway.access.log # 启用脚本会先执行 current release 自审,确认 pingora-gateway 可执行且 systemd ExecStart 指向 current release;自审失败时不会安装 direct-entry drop-in。 # 自审和 preflight 都通过后,启用脚本才会安装 drop-in、重启 Pingora、执行 direct live smoke,并强制 WSS subscribe 返回 101,同时用生成的 request_id 反查 Pingora access log。 # 直连接管后同步更新 /etc/genarrative/health-patrol.env: # GENARRATIVE_HEALTH_PATROL_GATEWAY_MODE=pingora-direct # GENARRATIVE_HEALTH_PATROL_PUBLIC_BASE_URL=https://127.0.0.1 # GENARRATIVE_HEALTH_PATROL_PUBLIC_HOST=<域名> # 然后用 node -- /opt/genarrative/current/scripts/check-production-health-patrol-env.mjs 复核。 # 直连验证失败时: # /opt/genarrative/current/scripts/deploy/pingora-direct-rollback.sh --apply --reload-nginx --nginx-smoke-url http://127.0.0.1/healthz --nginx-smoke-host <域名> # 回退脚本会先执行 nginx -t,reload 后确认 nginx.service 仍为 active,并用 smoke URL 证明 Nginx 入口可访问。 # 回退后把 GENARRATIVE_HEALTH_PATROL_GATEWAY_MODE 改回 nginx。 # 例如 https://127.0.0.1 或 https://genarrative.world。 GENARRATIVE_PINGORA_DIRECT_HTTPS_BASE_URL=https://127.0.0.1 # 单独 direct live 可选;release readiness --require-direct 必须提供,用于校验 HTTP 入口 301 到 HTTPS,并确认 ACME challenge 没被重定向吞掉。 GENARRATIVE_PINGORA_DIRECT_HTTP_BASE_URL=http://127.0.0.1 # 本机直连 127.0.0.1 时必须设置正式域名;direct live 会同时用作 Host header 和 TLS SNI。release readiness --require-direct 必须提供。只填域名或 host:port,不要填 https:// URL。 GENARRATIVE_PINGORA_DIRECT_HOST= # 单独 direct live 可选;release readiness --require-direct 必须提供,用于显式校验 HTTP redirect Location 的 host。只填域名或 host:port。 GENARRATIVE_PINGORA_DIRECT_REDIRECT_HOST= # 可选:高端口 rehearsal 访问 127.0.0.1:18443、但期望 Location 指向正式域名默认 HTTPS 入口时设置;只能填 https:// base URL,不要带路径、查询或片段。 GENARRATIVE_PINGORA_DIRECT_REDIRECT_BASE_URL= # 可选:配置后会额外检查 /__genarrative_pingora/healthz 内部探针。 GENARRATIVE_PINGORA_DIRECT_PROBE_TOKEN= # direct live 默认会对 wss:///v1/database//subscribe 做 SpacetimeDB 握手检查;release readiness --require-direct 必须按目标环境显式设置。 GENARRATIVE_PINGORA_DIRECT_SPACETIME_DATABASE=genarrative-prod # release readiness --require-direct 必须显式提供;direct live 会用每个请求生成的 X-Request-Id 反查 Pingora access log,证明直连流量真实进入 Pingora。 GENARRATIVE_PINGORA_DIRECT_PINGORA_ACCESS_LOG=/var/log/genarrative/pingora-gateway.access.log GENARRATIVE_PINGORA_DIRECT_ACCESS_LOG_SINCE_LINES=2000 # direct live 单独运行时可设 true,要求 WSS subscribe 必须返回 101;release readiness --require-direct 会自动强制该口径。 GENARRATIVE_PINGORA_DIRECT_REQUIRE_WSS_UPGRADE=true # 只允许单独 direct live 临时排障时跳过 WSS;release readiness --require-direct 会直接拒绝,正式切流必须保持 false。 GENARRATIVE_PINGORA_DIRECT_SKIP_WSS=false # 仅本机自签证书 smoke 使用;生产必须保持 false。 GENARRATIVE_PINGORA_DIRECT_INSECURE_TLS=false GENARRATIVE_PINGORA_DIRECT_TIMEOUT_MS=5000 # release readiness --require-direct 会先跑 direct-entry preflight;提供 env 文件后会强制检查 TLS/redirect/cert/key 配置。 GENARRATIVE_PINGORA_DIRECT_PREFLIGHT_ENV_FILE=/etc/genarrative/pingora-gateway.env GENARRATIVE_PINGORA_DIRECT_PREFLIGHT_SYSTEMD_CAT=true GENARRATIVE_PINGORA_DIRECT_PREFLIGHT_CHECK_CERT_READABLE=true GENARRATIVE_PINGORA_DIRECT_PREFLIGHT_CHECK_SERVICE_ENV_FILE=true GENARRATIVE_PINGORA_DIRECT_PREFLIGHT_CHECK_SERVICE_USER_CERT_READABLE=true GENARRATIVE_PINGORA_DIRECT_PREFLIGHT_CHECK_SERVICE_BINARY_EXECUTABLE=true GENARRATIVE_PINGORA_DIRECT_PREFLIGHT_CHECK_PORTS_FREE=true # release readiness --require-direct 必须复核健康巡检 env,避免切直连后巡检仍按 Nginx 模式误报。 GENARRATIVE_PINGORA_DIRECT_HEALTH_PATROL_ENV_FILE=/etc/genarrative/health-patrol.env