# .env.production.example-ov —— 海外(ov)生产环境变量全量清单(P5-prep Task 1)。 # 复制为与 docker-compose-ov.yml 同目录的 .env.production-ov。ov 栈只跑 # api-ov + web 两个容器(inbox/emergency 内嵌于 api-ov,sync 进程在 cn 侧—— # 架构核实见 services/api/src/app-ov.module.ts 与 services/sync/src/main.ts)。 # 【安全】只放占位符;真实文件不入 git、不进镜像。 # ── 数据库 / 缓存(OV 服务器上的 1Panel MySQL/Redis 容器)── # 库 photo_ov:utf8mb4,库级校对 utf8mb4_0900_bin(MySQL ≥8.0.30,低版本回退 # utf8mb4_bin,同 cn 的 D12 注意项;publicToken/对象键大小写语义依赖它)。 # 注意:此库需放行 cn 服务器出口 IP 的 3306 访问(sync 进程直连取 # outbox_stat_events/副本计数),生产建议 SSL/隧道 + 白名单最小化。 DATABASE_URL_OV=mysql://photo_ov:CHANGE_ME@1Panel-mysql-容器名或IP:3306/photo_ov?connection_limit=10 # ov 互动限速(likes/visits/downloads/embed)+ WS 广播合并用 Redis(ov-redis.module)。 REDIS_URL_OV=redis://1Panel-redis-容器名或IP:6379 # ── 对象存储(与 cn 同一 OSS 私有桶:ov 只现签 GET 读 URL,无上传)── # endpoint 用 OSS 「跨区域/外网」Endpoint,ov 服务器可达即可。 S3_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com S3_REGION=cn-hangzhou S3_ACCESS_KEY=CHANGE_ME_LTAI S3_SECRET_KEY=CHANGE_ME S3_BUCKET=photo-live-prod # 现签 GET(公开照片 thumb/browse/banner、下载原图)凭证有效期秒。 SIGNED_URL_TTL_SECONDS=900 # ── 域名 / 网络 ── # CORS 放行 origin(ov viewer 域名两形;viewer 与 API 同域走网关时可省)。 CORS_ORIGINS=https://CHANGE_ME_ov域名 # api-ov 容器内监听端口(main-ov.ts 读 PORT_OV;compose 内固定 8081)。 PORT_OV=8081 # ── 内部通道(inbox + emergency 共用 InternalSyncGuard 的 HMAC 密钥)── # 与 cn 侧 SYNC_INTERNAL_KEY 同值(cn 侧 sync 发送/对账签名,ov 侧验签; # emergency 紧急停用通道也用它——调用样例见 infra/deploy/RUNBOOK.md)。 SYNC_INTERNAL_KEY=CHANGE_ME_openssl_rand_hex_32 # ── 公开读 / 互动参数(契约默认可 env 覆盖;D07/D10/D11 建议值)── # 热门排序快照 TTL 毫秒(public-ov;缺省 30000)。 HOT_SORT_TTL_MS=30000 # 点赞:批次幂等窗口小时 / 单会话窗口累计 delta 上限 / 单 IP 窗口累计上限 / # likes.burst 实时合并毫秒(0=不合并)。缺省 24 / 500 / 2000 / 500。 LIKE_BATCH_WINDOW_HOURS=24 LIKE_SESSION_WINDOW_DELTA=500 LIKE_IP_WINDOW_DELTA=2000 LIKE_BURST_MERGE_MS=500 # 浏览:去重窗口分钟 / requestId 幂等保留分钟(≥窗口)/ 单 visitor+IP 每窗请求上限。 VISIT_WINDOW_MINUTES=30 VISIT_REQUEST_TTL_MINUTES=35 VISIT_WINDOW_REQUESTS=60 # 公开照片下载:单 IP 每固定窗(60s 常量 DOWNLOAD_WINDOW_SECONDS)请求上限。 DOWNLOAD_WINDOW_REQUESTS=120 # 嵌入组件公开端点限速:slotToken+IP 每固定窗请求上限 / 窗口秒(轮询 30s/次 + 重载突发)。 EMBED_WINDOW_REQUESTS=120 EMBED_WINDOW_SECONDS=60 # 互动流水清理调度间隔分钟(0=停用;超窗口 like_batches/visit_* 行回收,累计总数永不清)。 CLEANUP_INTERVAL_MINUTES=60 # ── 日志 ── LOG_LEVEL=info