Files
Genarrative/deploy/pingora/pingora-gateway.env.example
kdletters e3258f6f1d 完善 Pingora 直连切换门禁
新增 Pingora shadow env 回切脚本与对应检查。

补齐直连证据包时间线和 cutoverRunId 审计门禁。

支持 Gitea Host 透传并更新直连多域名文档。

修复百分号编码静态图标路径并补 smoke 覆盖。

更新生产发布与运维护栏对 Pingora 发布包的校验。
2026-06-18 21:10:45 +08:00

82 lines
5.4 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Pingora 独立网关试点配置示例。
# 当前只用于本机影子验证,不绑定 80/443,也不替代生产 Nginx。
# systemd 模板默认读取 /etc/genarrative/pingora-gateway.env。
GENARRATIVE_PINGORA_GATEWAY_LISTEN=127.0.0.1:18081
# 可选:直连 HTTPS 入口。默认关闭;启用时必须同时配置 cert/key,并把 FORWARDED_PROTO 设为 https。
# cert/key 必须允许 genarrative 用户读取;不要直接 chmod Let's Encrypt live/archive 原始目录。
# 可先用随包 scripts/deploy/pingora-tls-cert-sync.mjs 把证书同步到 /etc/genarrative/pingora-tls/<host>/。
# 80/443 必须先从 Nginx 或其它进程释放;高端口 loopback 演练可先使用 127.0.0.1:18443 / 127.0.0.1:18080。
# 如果要绑定 443/80,必须另行人工启用 systemd direct-entry drop-in 授予 CAP_NET_BIND_SERVICE。
# GENARRATIVE_PINGORA_GATEWAY_TLS_LISTEN=0.0.0.0:18443
# GENARRATIVE_PINGORA_GATEWAY_TLS_CERT_FILE=/etc/genarrative/pingora-tls/genarrative.world/fullchain.pem
# GENARRATIVE_PINGORA_GATEWAY_TLS_KEY_FILE=/etc/genarrative/pingora-tls/genarrative.world/privkey.pem
# 可选:直连 HTTP 只做 301 到 HTTPS;启用时必须已经配置 TLS_LISTENACME challenge 仍从 ACME_ROOT 静态读取。
# GENARRATIVE_PINGORA_GATEWAY_HTTP_REDIRECT_LISTEN=0.0.0.0:18080
# GENARRATIVE_PINGORA_GATEWAY_HTTP_REDIRECT_TARGET_SCHEME=https
GENARRATIVE_PINGORA_GATEWAY_API_UPSTREAM=127.0.0.1:8082
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_UPSTREAM=127.0.0.1:3101
# 可选:同一公网 IP 上还承载 Gitea 时,按 Host 整站转发到 Gitea。
# 命中这些 Host 的请求不走应用维护页、API body limit 或网关接流保护,避免影响 git clone / push。
# 直连 443 如果要同时服务这些域名,当前单 listener TLS 配置必须使用覆盖全部 Host 的同一张证书。
# GENARRATIVE_PINGORA_GATEWAY_GITEA_HOSTS=git.genarrative.world
# GENARRATIVE_PINGORA_GATEWAY_GITEA_UPSTREAM=127.0.0.1:3000
GENARRATIVE_PINGORA_GATEWAY_WEB_ROOT=/srv/genarrative/web
GENARRATIVE_PINGORA_GATEWAY_ACME_ROOT=/var/www/html
GENARRATIVE_PINGORA_GATEWAY_MAINTENANCE_FILE=/var/lib/genarrative/maintenance/enabled
GENARRATIVE_PINGORA_GATEWAY_FORWARDED_PROTO=http
GENARRATIVE_PINGORA_GATEWAY_MAX_API_BODY_BYTES=67108864
# gzip 默认开启;等级和最小响应长度对齐 Nginx gzip_comp_level 5 / gzip_min_length 1024。
# Pingora 正式化口径固定为 gzip-onlybr / zstd 不进入当前网关,Brotli 继续由 Nginx / 前置代理承担。
GENARRATIVE_PINGORA_GATEWAY_COMPRESSION_ALGORITHMS=gzip
GENARRATIVE_PINGORA_GATEWAY_GZIP_ENABLED=true
GENARRATIVE_PINGORA_GATEWAY_GZIP_LEVEL=5
GENARRATIVE_PINGORA_GATEWAY_GZIP_MIN_LENGTH_BYTES=1024
# 静态响应缓存头:HTML / SPA fallback 保持 no-cacheVite 指纹资源长缓存,其它静态资源保守 no-cache。
# 网关会额外写入 ETag / Last-Modified 并支持 304 协商缓存;下面三项只控制 Cache-Control。
GENARRATIVE_PINGORA_GATEWAY_HTML_CACHE_CONTROL=no-cache
GENARRATIVE_PINGORA_GATEWAY_ASSET_CACHE_CONTROL=public, max-age=31536000, immutable
GENARRATIVE_PINGORA_GATEWAY_STATIC_CACHE_CONTROL=no-cache
# 上游超时默认对齐当前 Nginx 模板:普通无显式长超时路由 60 秒,/api、公开列表/详情和 subscribe 为 3600 秒。
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_CONNECT_TIMEOUT_MS=3000
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_DEFAULT_READ_TIMEOUT_SECONDS=60
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_API_READ_TIMEOUT_SECONDS=3600
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_LONG_READ_TIMEOUT_SECONDS=3600
GENARRATIVE_PINGORA_GATEWAY_UPSTREAM_WRITE_TIMEOUT_SECONDS=3600
# 默认只信任 TCP 对端 IP;只有确认前置 Nginx / LB 会清洗 X-Forwarded-For 后才打开。
GENARRATIVE_PINGORA_GATEWAY_TRUST_X_FORWARDED_FOR=false
# 打开 TRUST_X_FORWARDED_FOR 前必须显式确认;否则网关会拒绝启动。
GENARRATIVE_PINGORA_GATEWAY_TRUSTED_FRONT_PROXY_CONFIRMED=false
# 单进程内接流保护;默认值对齐当前 Nginx limit_conn / limit_req 口径。
# INSTANCE_COUNT 默认 1;若横向运行多个 Pingora 实例且仍启用网关接流保护,必须先落地共享保护层并显式确认。
GENARRATIVE_PINGORA_GATEWAY_INSTANCE_COUNT=1
GENARRATIVE_PINGORA_GATEWAY_SHARED_PROTECTION_CONFIRMED=false
GENARRATIVE_PINGORA_GATEWAY_PROTECTION_ENABLED=true
GENARRATIVE_PINGORA_GATEWAY_ADMIN_API_MAX_CONCURRENT=64
GENARRATIVE_PINGORA_GATEWAY_ADMIN_API_RATE_PER_SECOND=30
GENARRATIVE_PINGORA_GATEWAY_ADMIN_API_BURST=16
GENARRATIVE_PINGORA_GATEWAY_GALLERY_LIST_MAX_CONCURRENT=320
GENARRATIVE_PINGORA_GATEWAY_GALLERY_LIST_RATE_PER_SECOND=5000
GENARRATIVE_PINGORA_GATEWAY_GALLERY_LIST_BURST=4096
GENARRATIVE_PINGORA_GATEWAY_GALLERY_DETAIL_MAX_CONCURRENT=32
GENARRATIVE_PINGORA_GATEWAY_GALLERY_DETAIL_RATE_PER_SECOND=300
GENARRATIVE_PINGORA_GATEWAY_GALLERY_DETAIL_BURST=32
GENARRATIVE_PINGORA_GATEWAY_API_MAX_CONCURRENT=64
GENARRATIVE_PINGORA_GATEWAY_API_RATE_PER_SECOND=300
GENARRATIVE_PINGORA_GATEWAY_API_BURST=64
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_MAX_CONCURRENT=256
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_RATE_PER_SECOND=1000
GENARRATIVE_PINGORA_GATEWAY_SPACETIME_BURST=256
# 仅供本机影子探针使用;为空时 /__genarrative_pingora/healthz 一律返回 404。
GENARRATIVE_PINGORA_GATEWAY_PROBE_TOKEN=
GENARRATIVE_PINGORA_GATEWAY_LOG=info,pingora=info,pingora_gateway=info
GENARRATIVE_PINGORA_GATEWAY_ACCESS_LOG_FILE=/var/log/genarrative/pingora-gateway.access.log
GENARRATIVE_PINGORA_GATEWAY_OTEL_ENABLED=false