Files
affiliate_dash/.env.example
T
yml2213 d821fe13df fix(security): 分离 JWT 与数据加密密钥并新增启动安全体检
.env 中 JWT_SECRET 仍逐字节等于 .env.example 的示例值,且 DATA_ENCRYPTION_KEY
未设置、按 config.go 的回退逻辑实际等于 JWT_SECRET。任何见过仓库的人都能伪造
管理员 JWT,并解密库中全部 API Client / 回调密钥密文。

- JWT_SECRET 与 DATA_ENCRYPTION_KEY 改为各自独立的强随机值
- 新增 Config.SecurityWarnings():示例密钥 / 未分离 / release 下开调试日志均告警
- 新增 cmd/reencrypt_secrets:默认只预演,-apply 才写库;幂等,坏数据不中断整轮
- 新增 docs/密钥轮换说明.md;.gitignore 忽略 .env.bak*
- release 模式下关闭 OPEN_API_DEBUG
2026-10-06 19:42:42 +08:00

65 lines
3.0 KiB
Bash

# 端口(默认值已避开常见端口,避免与其他项目冲突;如需调整可在此覆盖)
PORT=18080
FRONTEND_PORT=15173
# Caddy 对外端口:生产部署需域名绑定 80/443;本机与其他站点共存时可覆盖
# HTTP_PORT=80
# HTTPS_PORT=443
# JWT_SECRET 用于签发后台登录 Token;泄露 = 任何人都能伪造管理员身份。
# 生成方式:openssl rand -hex 48
JWT_SECRET=your_very_secure_jwt_secret_here_change_me_in_production
# DATA_ENCRYPTION_KEY 用于加密落库的 API Client / 回调密钥,必须与 JWT_SECRET 独立,
# 留空会回退到 JWT_SECRET(启动时会打印安全告警)。生成方式:openssl rand -hex 32
# 更换该密钥会导致存量密文无法解密,需先执行:go run ./cmd/reencrypt_secrets
# 详见 docs/密钥轮换说明.md
DATA_ENCRYPTION_KEY=your_32_plus_char_data_encryption_key_change_me
# 仅用于空数据库的首次启动;已有管理员账号时不会被覆盖。
POSTGRES_USER=affiliate
POSTGRES_PASSWORD=affiliate_dev_password
POSTGRES_DB=affiliate_dash
POSTGRES_PORT=15432
COMPOSE_PROJECT_NAME=affiliate_dash
POSTGRES_DATA_VOLUME=affiliate_dash_postgres_data
TZ=Asia/Shanghai
DATABASE_URL="postgres://affiliate:affiliate_dev_password@127.0.0.1:15432/affiliate_dash?sslmode=disable&TimeZone=Asia/Shanghai"
# Docker 后端容器内连接串通常不需要改;需要外部数据库时再覆盖。
# DOCKER_DATABASE_URL="postgres://affiliate:affiliate_dev_password@postgres:5432/affiliate_dash?sslmode=disable&TimeZone=Asia/Shanghai"
GIN_MODE=release
OPEN_API_KEY=sk_source_dev_key_change_me
OPEN_API_SECRET=sk_source_dev_secret_change_me
OPEN_SIGN_SKEW=300
OPEN_API_DEBUG=false
LOG_FILE=logs/app.log
DELIVERY_BASE_URL=
DELIVERY_BFF_BASE_URL=https://www.jxya.top/bff
DELIVERY_CHANNEL=dlc
DELIVERY_LINK_SECRET=change_me_for_delivery_link_sign
# 发货链接有效期(分钟),0 或留空表示永久有效
DELIVERY_LINK_TTL_MINUTES=0
FULFILLMENT_PROCESSING_TIMEOUT_MINUTES=30
FULFILLMENT_TIMEOUT_SCAN_INTERVAL_SECONDS=60
# 乐玩开放平台配置
LEWAN_BASE_URL=https://shop.cloudtentacles.com
LEWAN_APPLICATION_ID=
LEWAN_ACCESS_KEY=
LEWAN_SECRET_KEY=
LEWAN_WEBHOOK_SECRET=
# 跨域来源白名单(逗号分隔)。生产前后端同域(Caddy 统一入口)无需配置;
# 仅前后端分离部署时设置,例如:CORS_ALLOWED_ORIGINS=https://admin.example.com
# 为空时仅放行本地开发端口 localhost:15173 / 18080;不支持 "*"(与凭证模式冲突)。
# CORS_ALLOWED_ORIGINS=
# Docker 构建基础镜像;如镜像源不可用,可改为官方镜像或你的私有镜像源
POSTGRES_IMAGE=docker.m.daocloud.io/library/postgres:16-alpine
GO_BUILDER_IMAGE=docker.m.daocloud.io/library/golang:1.26-alpine
BACKEND_RUNTIME_IMAGE=docker.m.daocloud.io/library/alpine:3.22
NODE_BUILDER_IMAGE=docker.m.daocloud.io/library/node:22-alpine
CADDY_BASE_IMAGE=docker.m.daocloud.io/library/caddy:2-alpine
# Docker 构建阶段包管理加速源
GOPROXY=https://goproxy.cn,direct
GOSUMDB=sum.golang.google.cn
ALPINE_MIRROR=https://mirrors.aliyun.com/alpine
NPM_REGISTRY=https://registry.npmmirror.com