# .env.production.example-cn —— 国内(cn)生产环境变量全量清单(P5-prep Task 1)。 # 复制为 infra/deploy 同目录下的 .env.production-cn(与 docker-compose.cn.yml 同层, # env_file 相对路径即此处),逐项填值。矿来源 = services/packages 源码 process.env # 全量审计(测试专用的 ADMIN_* 仅 seed 用;IT_USERS/EMBED_POLL_* 为开发/前端项不列)。 # 【安全】本文件只放占位符;真实文件不入 git、不进镜像(.dockerignore 拦截)。 # ── 数据库 / 缓存(1Panel 既有容器,见 infra/deploy/README-1Panel.md §2/§3)── # host 用 1Panel 容器名(compose 挂 1panel-network)或宿主机 IP。 # 库 photo_cn:utf8mb4;库级校对 utf8mb4_0900_bin(MySQL ≥8.0.30,低版本回退 # utf8mb4_bin,见 D12——docs/plans/2026-09-17-P1a-后端核心链路.md)。账号/token # 大小写敏感语义依赖它,勿改 _ci。connection_limit=10 是应用侧池上限约定。 DATABASE_URL_CN=mysql://photo:CHANGE_ME@1Panel-mysql-容器名或IP:3306/photo_cn?connection_limit=10 REDIS_URL_CN=redis://1Panel-redis-容器名或IP:6379 # sync 进程双库直连:cn 侧容器还要能网络可达 ov 库(跨地域公网 + 白名单 cn 服务器 # 出口 IP;生产建议 MySQL SSL 或隧道,P5 G 关口实测定案)。sync 进程(compose 服务 # sync)读取;api-cn/worker 不读此键。 DATABASE_URL_OV=mysql://photo_ov:CHANGE_ME@OV服务器IP:3306/photo_ov?connection_limit=10 # ── 对象存储(真实阿里云 OSS 私有桶,G1 已于 2026-09-21 实测通过)── # endpoint 用「外网 Endpoint」(api-cn 服务器上传;worker 处理读原文件)。 # bucket 私有读写:一切访问走 SigV4 现签 URL(SIGNED_URL_TTL_SECONDS)。 # ⚠️ 寻址形态(G1 实测定案):基础 endpoint(不含 bucket)+ virtual-host—— # 即 S3_FORCE_PATH_STYLE=false。OSS 兼容口在 path-style 下 403 签名不匹配。 S3_ENDPOINT=https://oss-cn-beijing.aliyuncs.com S3_REGION=oss-cn-beijing S3_ACCESS_KEY=CHANGE_ME_LTAI S3_SECRET_KEY=CHANGE_ME S3_BUCKET=live-album S3_FORCE_PATH_STYLE=false # 现签 GET(viewer 图片)/ PUT(上传)凭证有效期秒(uploads/support.ts)。 SIGNED_URL_TTL_SECONDS=900 # 单文件上传上限字节(uploads/support.ts;50MB 与契约 UPLOAD_MAX_BYTES 建议值一致)。 UPLOAD_MAX_BYTES=52428800 # ── 会话 / 域名 / 网络 ── # 会话 TTL 秒(auth.service;30 天 = 2592000)。 AUTH_SESSION_TTL_SECONDS=2592000 # CORS 放行 origin 逗号清单(configure-app.ts)。生产 = viewer/admin 的 https 域名 # 两形(有无 www);admin 与 viewer 同域走网关同源时可省。示例: # CORS_ORIGINS=https://photo.example.cn,https://www.photo.example.cn CORS_ORIGINS=https://CHANGE_ME_cn域名 # api-cn 容器内监听端口(main-cn.ts;compose 内固定 8080,健康检查同端口)。 PORT=8080 # ── 同步(cn→ov outbox + 对账 + 统计回传;服务间 HMAC 密钥两端一致)── # SYNC_INTERNAL_KEY:x-sync-signature 的 HMAC-SHA256 密钥(internal-sync.ts)。 # 强随机 ≥32 字节:openssl rand -hex 32 生成;cn 的 sync 进程与 ov 的 api-ov # (inbox + emergency 通道)必须同值。泄漏 = 可注入内容/紧急停用,妥善保管。 SYNC_INTERNAL_KEY=CHANGE_ME_openssl_rand_hex_32 # sync 进程两翼 API 基址(不含路径;容器名/域名均可,走 https 时 OV_API_URL 用域名)。 CN_API_URL=http://api-cn:8080 OV_API_URL=https://CHANGE_ME_ov域名 # 节奏参数(D11 建议初值,P5 实测冻结):批 100 条 / 推送 2s / 对账 5min / 回传 60s。 SYNC_BATCH_SIZE=100 SYNC_PUSH_INTERVAL_MS=2000 SYNC_RECONCILE_INTERVAL_MS=300000 STAT_RETURN_INTERVAL_MS=60000 # ── 用户源同步(user-sync 调度,仅 cn 装配;缺省见注释)── # 定时同步间隔毫秒(缺省 300000=5min;user-sync.service.ts)。 SYNC_USERS_INTERVAL_MS=300000 # 每 N 批强制全量对账(游标复位;缺省 10)。 RECONCILE_EVERY_N_RUNS=10 # ── 首次部署引导(seed-admin 角色;seed-admin.ts 读,生产可移除)── ADMIN_ACCOUNT=admin ADMIN_PASSWORD=CHANGE_ME_强密码 # ── 日志 ── # pino 级别(logger-options/worker/sync;生产建议 info,排障临时 debug)。 LOG_LEVEL=info # ── 用户信息开放接口(uniservice)── OPEN_API_USERS_URL=https://uniservice.server.hnxinyouhe.com/open/v1/users OPEN_API_USERS_KEY=CHANGE_ME # 用户同步源:mock(默认)/ http(uniservice 真实接口——生产开) USER_SYNC_SOURCE=http # 用户同步定时间隔(毫秒):生产每 12 小时一批;缺省 300000(5 分钟)为开发/演示节奏 SYNC_USERS_INTERVAL_MS=43200000