配置体系

环境变量、Feature Flags、运行时配置——搞清楚什么变量控制什么功能。

本页是配置体系的完整指南,包含配置系统说明、所有环境变量速查和 Feature Flags 管理。

快速开始:3 个变量启动项目

环境变量文件位于 apps/01mvp-web/.env.local,从 .env.example 复制并修改:

cp apps/01mvp-web/.env.example apps/01mvp-web/.env.local

只需 3 个变量即可启动项目:

DATABASE_URL -- PostgreSQL 连接字符串

postgresql://user:password@localhost:5432/01mvp?schema=public

BETTER_AUTH_SECRET -- 认证签名密钥,至少 32 位字符

openssl rand -base64 32

NEXT_PUBLIC_SITE_URL -- 站点公开地址

http://localhost:7001        # 开发环境
https://your-domain.com     # 生产环境

安全提示

.env.local 已在 .gitignore 中,不要将包含密钥的文件提交到 Git。生产环境通过部署平台的环境变量面板管理。

修改环境变量后需要重启 pnpm dev 才会生效,Next.js 不会热加载环境变量的变化。另外,只有以 NEXT_PUBLIC_ 开头的变量才会暴露给浏览器端代码。

配置系统说明

项目的运行时配置集中在 packages/config/src/index.ts,通过 config 对象统一管理。应用级配置覆盖在 apps/01mvp-web/src/lib/config/index.ts

配置分为两类:

  • 环境变量:通过 .env.local 文件管理,控制外部服务连接和密钥
  • 运行时配置:通过 config 对象管理,控制功能开关和业务逻辑

环境变量优先级:以 NEXT_PUBLIC_ 开头的变量暴露给浏览器端代码,其余仅在服务端可用。

完整环境变量列表

以下变量为项目启动所必需。

变量名说明必填默认值
DATABASE_URLPostgreSQL 连接字符串--
BETTER_AUTH_SECRET认证签名密钥(至少 32 位)--
NEXT_PUBLIC_SITE_URL站点公开地址--

认证基础

变量名说明必填默认值
BETTER_AUTH_SECRET认证签名密钥(至少 32 位)--
BETTER_AUTH_URLAuth 回调基础 URLNEXT_PUBLIC_SITE_URL

Google OAuth

变量名说明必填默认值
GOOGLE_CLIENT_IDGoogle OAuth Client ID--
GOOGLE_CLIENT_SECRETGoogle OAuth Client Secret--

GitHub OAuth

变量名说明必填默认值
GITHUB_CLIENT_IDGitHub OAuth Client ID--
GITHUB_CLIENT_SECRETGitHub OAuth Client Secret--

微信登录

微信提供三种登录方式,按需配置。

PC 网页登录

变量名说明必填默认值
WECHAT_WEBSITE_APP_ID微信开放平台网站应用 AppID--
WECHAT_WEBSITE_APP_SECRET微信开放平台网站应用 AppSecret--

公众号登录(移动端)

变量名说明必填默认值
WECHAT_SERVICE_ACCOUNT_APP_ID微信公众号 AppID--
WECHAT_SERVICE_ACCOUNT_APP_SECRET微信公众号 AppSecret--

小程序登录

变量名说明必填默认值
WECHAT_MINIPROGRAM_APP_ID微信小程序 AppID--
WECHAT_MINIPROGRAM_APP_SECRET微信小程序 AppSecret--

支付渠道选择

变量名说明必填默认值
PAYMENT_ENABLED_CHANNELS逗号分隔的支付渠道 ID,如 stripe:card,zpay:alipay,zpay:wxpay。留空时启用所有密钥完整的渠道。--

Stripe

变量名说明必填默认值
STRIPE_SECRET_KEYStripe API Secret Key--
STRIPE_WEBHOOK_SECRETStripe Webhook 签名密钥--
NEXT_PUBLIC_STRIPE_PRICE_PRO_MONTHLYPro 月付 Price ID--
NEXT_PUBLIC_STRIPE_PRICE_PRO_YEARLYPro 年付 Price ID--
NEXT_PUBLIC_STRIPE_PRICE_PRO_LIFETIMEPro 终身买断 Price ID--
NEXT_PUBLIC_STRIPE_PRICE_01MVP_LIFETIME01MVP 终身买断 Price ID--

微信支付

变量名说明必填默认值
WECHAT_PAY_MCH_ID商户号--
WECHAT_PAY_SERIAL_NO证书序列号--
WECHAT_PAY_PRIVATE_KEYRSA 私钥--
WECHAT_PAY_API_V3_KEYV3 API 密钥--
WECHAT_PAY_NOTIFY_URL支付回调通知 URL--

支付宝

变量名说明必填默认值
ALIPAY_APP_ID支付宝应用 ID--
ALIPAY_PRIVATE_KEYRSA 私钥--
ALIPAY_PUBLIC_KEY支付宝公钥(用于签名验证)--

PayPal

变量名说明必填默认值
PAYPAL_CLIENT_IDPayPal REST API Client ID--
PAYPAL_CLIENT_SECRETPayPal REST API Client Secret--
PAYPAL_WEBHOOK_IDPayPal Webhook ID--

Waffo

变量名说明必填默认值
WAFFO_MERCHANT_IDWaffo 商户 ID--
WAFFO_PRIVATE_KEYWaffo 私钥--
WAFFO_ENVIRONMENTWaffo 环境:test / prodtest
NEXT_PUBLIC_WAFFO_PRICE_01MVP_LIFETIMEWaffo 终身买断价格--

基础模型配置

变量按优先级从高到低:AI_* > OPENAI_*

变量名说明必填默认值
AI_API_KEYAI 服务 API Key(最高优先级)--
AI_BASE_URLAI 服务基础 URL(最高优先级)--
AI_MODELAI 模型名称(最高优先级)--
OPENAI_API_KEYOpenAI 兼容服务 API Key--
OPENAI_BASE_URLOpenAI 兼容服务基础 URLhttps://api.deepseek.com
OPENAI_MODEL模型名称deepseek-v4-flash

视频生成

变量名说明必填默认值
VOLCENGINE_API_KEY火山引擎 API Key(Seedance 视频生成)--

图片/视频生成

变量名说明必填默认值
QWEN_API_KEY通义千问 API Key(图片/视频生成)--

AI 变量遵循优先级机制:当同时配置了 AI_API_KEYOPENAI_API_KEY 时,AI_API_KEY 优先使用。详见下方"变量优先级说明"。

项目使用 S3 兼容的对象存储。

变量名说明必填默认值
S3_ENDPOINTS3 API 端点--
S3_REGIONS3 区域--
S3_ACCESS_KEY_IDS3 Access Key--
S3_SECRET_ACCESS_KEYS3 Secret Key--
S3_BUCKETS3 存储桶名称--
NEXT_PUBLIC_S3_ENDPOINTS3 公开端点(浏览器访问用)--

S3_ENDPOINT 是服务端连接 S3 API 的地址,用于上传、删除和生成签名 URL。NEXT_PUBLIC_S3_ENDPOINT 是浏览器可访问的公开地址,用于展示已上传的图片或文件。写入凭证只能放在 S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY,不要加 NEXT_PUBLIC_

Cloudflare R2 示例:

S3_ENDPOINT=https://<ACCOUNT_ID>.r2.cloudflarestorage.com
S3_REGION=auto
S3_BUCKET=01mvp-public-assets
NEXT_PUBLIC_S3_ENDPOINT=https://assets.01mvp.com

邮件

变量名说明必填默认值
RESEND_API_KEYResend 邮件服务 API Key(推荐)--
ZEABUR_EMAIL_API_KEYZeabur 邮件服务 API Key(备选)--
EMAIL_FROM发件人邮箱地址--
CONTACT_EMAIL联系表单收件人,也是订单通知的默认收件人contact@01mvp.com
ORDER_NOTIFICATION_EMAIL订单通知收件人覆盖项,支持用逗号、空格或分号配置多个邮箱回退到 CONTACT_EMAIL
FEEDBACK_EMAIL_FROM反馈表单发件人--

早期通常只配置 CONTACT_EMAIL 就够了。只有当你希望订单通知发给运营、财务或多人邮箱,而联系表单仍然发到另一个收件箱时,再单独配置 ORDER_NOTIFICATION_EMAIL

短信

变量名说明必填默认值
SMS_PROVIDER短信服务商:tencent / aliyun / twilio--

腾讯云短信(需同时配置 TENCENT_CLOUD_SECRET_IDTENCENT_CLOUD_SECRET_KEY,见"其他")

阿里云短信 -- 使用阿里云凭证

Twilio -- 使用 Twilio 凭证

变量名说明必填默认值
COOKIE_DOMAIN跨子域 SSO Cookie 域名--
TRUSTED_ORIGINSCORS 信任来源列表--
THEME_PRESET默认主题预设:01mvp / vercel / linear / claude01mvp
TENCENT_CLOUD_SECRET_ID腾讯云 Secret ID(内容审核/短信)--
TENCENT_CLOUD_SECRET_KEY腾讯云 Secret Key(内容审核/短信)--

变量优先级说明

部分服务存在多组配置变量,系统按以下优先级从高到低选择:

AI 模型配置: AI_* > OPENAI_* > 内置默认值

当同时配置了 AI_API_KEYOPENAI_API_KEY 时,系统优先使用 AI_* 系列变量。如果 AI_* 未配置,则回退到 OPENAI_*。若均未配置,则使用内置默认值(DeepSeek V4 Flash)。

Feature Flags

功能开关集中管理在 packages/config/src/index.ts

  • i18n -- 国际化启用、默认语言、支持语言列表
  • auth -- 是否启用邮箱/手机号/社交登录
  • organizations -- 组织功能开关
  • payments -- Stripe 和 Waffo 支付开关

修改对应字段后重启开发服务器生效。

按功能查看

以下表格帮助你快速找到启用某个功能所需的变量。

功能必需变量可选变量
基础启动DATABASE_URL, BETTER_AUTH_SECRET, NEXT_PUBLIC_SITE_URLTHEME_PRESET
Google 登录GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETBETTER_AUTH_URL
GitHub 登录GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRETBETTER_AUTH_URL
微信 PC 登录WECHAT_WEBSITE_APP_ID, WECHAT_WEBSITE_APP_SECRET--
微信公众号登录WECHAT_SERVICE_ACCOUNT_APP_ID, WECHAT_SERVICE_ACCOUNT_APP_SECRET--
微信小程序登录WECHAT_MINIPROGRAM_APP_ID, WECHAT_MINIPROGRAM_APP_SECRET--
Stripe 支付STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, PAYMENT_ENABLED_CHANNELS=stripe:cardNEXT_PUBLIC_STRIPE_PRICE_*
Waffo 支付WAFFO_MERCHANT_ID, WAFFO_PRIVATE_KEY, PAYMENT_ENABLED_CHANNELS=waffo:defaultWAFFO_ENVIRONMENT, NEXT_PUBLIC_WAFFO_PRICE_*
AI 对话OPENAI_API_KEYAI_API_KEYAI_BASE_URL, AI_MODEL
视频生成VOLCENGINE_API_KEY--
S3 存储S3_ENDPOINT, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKETS3_REGION, NEXT_PUBLIC_S3_ENDPOINT
邮件RESEND_API_KEYZEABUR_EMAIL_API_KEY, EMAIL_FROMCONTACT_EMAIL, ORDER_NOTIFICATION_EMAIL, FEEDBACK_EMAIL_FROM
短信SMS_PROVIDER, 对应服务商凭证--

安全提醒

不要将包含密钥的环境变量文件提交到 Git。 .env.local 已在 .gitignore 中,请确保不会意外提交。生产环境通过部署平台的环境变量面板管理,例如 Zeabur Variables。

区分公钥和私钥变量。NEXT_PUBLIC_ 开头的变量会打包到客户端代码中,任何敏感信息(Secret Key、Private Key)都不应使用此前缀。