130 lines
7.9 KiB
YAML
130 lines
7.9 KiB
YAML
# ============================================================
|
||
# Fashion API 配置文件(唯一配置源,但敏感项一律留空)
|
||
#
|
||
# 加载优先级:环境变量 > 本文件 > config.local.yml(本机私有)> 交互提示(仅本地 TTY)
|
||
# - 本地开发:终端启动时会交互式提示填写缺失的必填/推荐密钥,并自动写入 config.local.yml
|
||
# - 容器部署:保持本文件为默认值,用环境变量(见 .env.example)覆盖敏感项
|
||
#
|
||
# ⚠️ 重要:JWT_SECRET / DB_PASSWORD / INGEST_SECRET / S4_AK / S4_SK 等敏感值
|
||
# 严禁写入本文件(会被提交进版本库)。本文件已将它们留空,请从环境变量或
|
||
# 本地交互提示获取。S4 的旧 AK/SK 曾误提交,已轮换并清空,请勿再填回明文。
|
||
#
|
||
# 配置文件路径可通过 -config 启动参数或 CONFIG_PATH 环境变量指定,
|
||
# 默认按 ./configs/config.yml → ./config.yml 顺序查找。
|
||
# ============================================================
|
||
|
||
server:
|
||
# 监听端口。前端 test 项目的 PUBLIC_API_BASE 指向 http://localhost:8090,
|
||
# 且 src/lib/api.ts 在 DEV 模式下硬编码回落到 8090,因此默认必须是 8090。
|
||
port: 8090 # env: SERVER_PORT
|
||
# gin 运行模式:debug(开发,输出彩色路由日志)| release(生产)| test
|
||
mode: debug # env: GIN_MODE
|
||
# 优雅关闭的最长等待时间(秒)
|
||
shutdown_timeout: 10
|
||
|
||
database:
|
||
host: 127.0.0.1 # env: DB_HOST
|
||
port: 5432 # env: DB_PORT
|
||
user: fashion # env: DB_USER
|
||
# ⚠️ 留空:生产经 DB_PASSWORD(兼容 DB_PASS)注入,或本地启动时交互填写
|
||
password: "" # env: DB_PASSWORD(兼容 DB_PASS)
|
||
# 本地开发库名 fashion;对应 scripts/pgvector 的 Docker PostgreSQL 容器
|
||
name: fashion # env: DB_NAME
|
||
# GORM 日志级别:silent | error | warn | info
|
||
log_level: warn
|
||
# 连接池
|
||
max_idle_conns: 10
|
||
max_open_conns: 100
|
||
conn_max_lifetime: 3600 # 秒
|
||
conn_max_idle_time: 60 # 秒,空闲连接回收时间,防止池子持有被服务端回收的死连接导致 invalid connection
|
||
|
||
jwt:
|
||
# ⚠️ 留空:生产经 JWT_SECRET 注入随机长字符串,或本地启动时交互填写
|
||
secret: "" # env: JWT_SECRET
|
||
# token 有效期(小时),168 = 7 天,与原项目一致
|
||
expire_hours: 168
|
||
|
||
upload:
|
||
# 图片存储目录。接口返回的封面/图片为相对路径(如 /uploads/xxx.jpg),
|
||
# 前端通过 toAbs() 拼接为绝对地址,因此必须对外提供静态文件服务。
|
||
dir: ./uploads # env: UPLOAD_DIR
|
||
# 静态文件访问前缀,需与数据库中存储的图片路径前缀一致
|
||
url_prefix: /uploads
|
||
|
||
cors:
|
||
# 允许的来源:生产必须收窄为具体域名列表(不要用 "*",否则任意站点可跨域调用)。
|
||
# 也可用环境变量 CORS_ALLOW_ORIGINS=https://a.com,https://b.com 在容器里覆盖本值。
|
||
allow_origins:
|
||
- "https://xisoa.com"
|
||
- "https://www.xisoa.com"
|
||
allow_methods:
|
||
- GET
|
||
- POST
|
||
- PUT
|
||
- DELETE
|
||
- OPTIONS
|
||
allow_headers:
|
||
- Content-Type
|
||
- Authorization
|
||
- X-Requested-With
|
||
- X-Sign
|
||
- X-Sign-Ts
|
||
- X-Sign-Nonce
|
||
- X-Locale
|
||
max_age: 86400 # 预检请求缓存秒数
|
||
|
||
# 公开接口「前端 JS 签名」:给 /runway-looks(列表)与 /brands 两个批量接口加请求签名校验,
|
||
# 识别「请求大概率由前端 JS 构造」、抬高 casual 爬虫的批量抓取成本。
|
||
# 安全定位:这是「提高成本」而非「加密」——密钥必须出现在前端 bundle,对浏览器可见;
|
||
# 有决心的爬虫可反编译 JS 复刻签名。与按 IP 限流配合才有效。
|
||
# - enabled: false 时不拦截(默认,灰度安全);true 时要求每个请求带 X-Sign 签名。
|
||
# - secret 必须与前端的 CLIENT_SIGN_SECRET 完全一致;生产经环境变量 CLIENT_SIGN_SECRET 注入随机长串。
|
||
client_sign:
|
||
enabled: false # env: CLIENT_SIGN_ENABLED(容器部署用环境变量开)
|
||
secret: "" # env: CLIENT_SIGN_SECRET
|
||
ttl_seconds: 30 # 签名时间戳容忍窗口(秒),防重放;env: CLIENT_SIGN_TTL
|
||
|
||
# 按客户端 IP 的速率限制(令牌桶),作为防刷兜底(与 client_sign 配合)。
|
||
# 默认关闭;生产建议开启(RATE_LIMIT_ENABLED=true),按单 IP 限制总量。
|
||
rate_limit:
|
||
enabled: false # env: RATE_LIMIT_ENABLED
|
||
rps: 20 # env: RATE_LIMIT_RPS(每秒平均允许请求数)
|
||
burst: 40 # env: RATE_LIMIT_BURST(突发容量)
|
||
|
||
# 爬虫入库管线:暴露 :8092 /admin/internal/ingest 接收爬虫 HMAC 签名上报。
|
||
# 设计:服务端到服务端(非前端 JS),密钥绝不下发前端、只存爬虫配置与 INGEST_SECRET,安全高。
|
||
# - secret 必须与爬虫端 config.yml 的 ingest.secret 完全一致;env INGEST_SECRET 注入随机长串(生产)。
|
||
# - 建表不再由服务启动自动完成:表结构随全库由 cmd/dbtool 导出的 SQL 维护(dbtool dump → psql -f)。
|
||
# - 启用后 worker 随主进程拉起(cmd/server 内 goroutine),异步下载图、补 season_code、写正式表。
|
||
ingest:
|
||
# ⚠️ 留空:生产经 INGEST_SECRET 注入,或本地启动时交互填写
|
||
secret: "" # env: INGEST_SECRET(须与爬虫 config.yml 的 ingest.secret 一致)
|
||
ttl_seconds: 300 # 签名时间戳容忍窗口(秒,±5min),防重放;env: INGEST_TTL
|
||
# 本机下载代理(仅本地开发用,不提交):worker 下载图片(如 assets.vogue.com)经此代理访问源站。
|
||
# 支持 http:// 或 socks5://,例如 socks5://127.0.0.1:51831 或 http://127.0.0.1:58591。
|
||
# 留空直连;环境变量 INGEST_DOWNLOAD_PROXY 可覆盖本值(二者均只作用于「下载」,不影响 S4 上传与数据库)。
|
||
# 实际值建议写 configs/config.local.yml(已被 .gitignore 忽略),避免进入共享配置。
|
||
download_proxy: "" # env: INGEST_DOWNLOAD_PROXY
|
||
|
||
# 缤纷云 S4 对象存储(S3 兼容,爬虫入库图片上传目标)
|
||
# - enabled: true 时,worker 把下载的走秀/街拍图直传 S4 bucket,库里只存 key(base_url 渲染时拼)
|
||
# - bucket:存储桶名(须为「公开桶」,图片经 CoreIX 公开样式对外提供)
|
||
# - endpoint:S3 接入点,默认 https://s3.bitiful.net;region 任意(如 cn-east-1)
|
||
# - base_url:对外访问域名;留空自动推导 https://<bucket>.s3.bitiful.net(务必与 endpoint 同 host)
|
||
# - ak/sk:缤纷云子账户 AccessKey/SecretKey(须有 PutObject/DeleteObject/GetObject 权限)
|
||
# - style_display:全量展示图 CoreIX 样式名(VIP 与免费用户同质量)。须在控制台建一个公开样式 high,
|
||
# 或填查询串(如 w=1080&q=80&fmt=webp)免建样式。代码含 "=" 即走查询串模式。
|
||
# ⚠️ ak/sk 已留空(旧密钥曾误提交,已轮换)。生产经 S4_AK / S4_SK 注入,或本地启动时交互填写。
|
||
# 环境变量覆盖:S4_AK / S4_SK / S4_BUCKET / S4_ENDPOINT / S4_BASE_URL / S4_STYLE_DISPLAY / S4_STYLE_THUMB
|
||
# (旧 QINIU_* 仅 QINIU_STYLE_NORMAL 作 style_display 的兼容回退;S4_* 优先)
|
||
s4:
|
||
enabled: true
|
||
ak: "" # env: S4_AK(必填,启用 S4 时)
|
||
sk: "" # env: S4_SK(必填,启用 S4 时)
|
||
bucket: "toomstudio" # 你的缤纷云 S4 桶名
|
||
endpoint: "https://s3.bitiful.net"
|
||
region: "cn-east-1"
|
||
base_url: "" # 留空自动推导 https://toomstudio.s3.bitiful.net
|
||
style_display: "high" # 高清公开样式名(须在缤纷云控制台建 public 样式 high);或填查询串 w=1080&q=80&fmt=webp
|
||
style_thumb: "thumb" # 列表缩略图公开样式名(控制台建 public 样式 thumb);仅用于列表/卡片等小尺寸场景,详情页与大图仍用 style_display。留空则回落 style_display
|