.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
65 lines
3.0 KiB
Bash
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
|