返回更新日志
里程碑
运行时设置:支付与存储凭证加密入库
支付与 S3 凭证离开环境变量,加密写入数据库。生产环境必须设置 MUSE_SETTINGS_SECRET。结账使用稳定套餐 ID,后台支付页把每个网关的产品 ID 收进对应服务商面板。
对已有 fork 这是一次破坏性配置变更:网关密钥和 S3 凭证运行时不再从环境变量读取。
为什么改模板
- 支付和存储密钥以前和邮件、OAuth 一起放在
.env里。轮换密钥就要重建部署,把启动必需的配置和日常运维混在了一起。 - 运行时对支付和 S3 只读
app_setting表。把本地残留值导入之后,没有环境变量回退。
你必须设置的项
- 增加
MUSE_SETTINGS_SECRET(至少 32 个字符)。它用 HKDF-SHA256 + AES-256-GCM 包装加密设置,绝不入库。生产运行时缺少它会在启动时直接失败。 - 执行迁移
0001_dry_terror.sql,确保存在app_setting与app_setting_revision(pnpm drizzle:migrate)。 - 创建管理员后打开 后台 → 运行时设置(
/app/admin/settings)。保存网关凭证、结账产品 ID 和 S3 设置。上线前先点 测试连接。 - 可选一次性操作:
pnpm muse:settings:import把本地残留的网关/存储凭证写入数据库。之后运行时不再读取这些 env。结账产品 ID 在后台填写,不走环境变量。
计费与结账
- 公开定价页仍使用稳定套餐 ID(
pro_monthly、pro_yearly、lifetime)。支付商产品 ID 存在billing.productMap。 - Direct checkout 模式已移除。付费套餐一律通过 Muse Billing,走后台保存的默认网关(Creem、Stripe、Dodo 或 Waffo)。
- 后台支付页顶部是默认网关卡片。每个服务商默认收起;展开后在同一面板填写凭证和该网关的产品 ID。标题右侧会显示「默认」「已配置 / 未配置」、已映射产品 ID 数量,以及未保存时的「未保存」。
存储与部署
- S3 access key、secret、endpoint 和头像 bucket 都在后台设置。
NEXT_PUBLIC_AVATARS_PROXY_URL仍留在环境变量,因为浏览器要靠它拼接头像 URL。 - Docker、Vercel、Cloudflare Workers 和 EdgeOne 的生产环境变量清单现在都要求
MUSE_SETTINGS_SECRET,不再把网关或 S3 密钥当作环境变量。