src/env.ts——以那个文件为准。本页是它的镜像,按类别组织,方便你一次复制粘贴,搞定 .env.local
(和 prod env)。
约定几条:
- 必填变量缺失或为空时启动报错。
- 可选变量默认为空字符串,对应模块静默 no-op。
NEXT_PUBLIC_*变量会进浏览器。永远别在里面放 secret。- CI build 步骤如果不需要真实值(Vercel preview build、Docker bake 等),设
SKIP_ENV_VALIDATION=true跳过校验。
Core
App 启动的最小集合。| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
NODE_ENV | 否 | development | development / production / test。runtime 自动设。 |
DATABASE_PROVIDER | 否 | postgres | 给未来其他驱动留的位。v0.1 只有 postgres 能用。 |
DATABASE_URL | 是 | — | Postgres 连接串。生产用池化 URL。 |
BETTER_AUTH_SECRET | 是 | — | session 签名密钥,16+ 字符。生成:openssl rand -base64 32。 |
BETTER_AUTH_URL | 否 | — | 部署后 app 的完整 URL(带 scheme)。生产环境 OAuth 回调必填。 |
NEXT_PUBLIC_APP_URL | 否 | http://localhost:3000 | sitemap、OG 图、OAuth redirect 用。设为 prod URL。 |
NEXT_PUBLIC_APP_NAME | 否 | vibestrap | title、OG metadata、邮件中的显示名。 |
ADMIN_EMAILS | 否 | '' | 逗号分隔的管理员邮箱。注册时自动提升为 role: 'admin'。 |
OAuth
每个 provider 独立——id + secret 都填启用,留空隐藏。| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
GOOGLE_CLIENT_ID | 否 | '' | Google OAuth client id。启用「用 Google 登录」。 |
GOOGLE_CLIENT_SECRET | 否 | '' | Google OAuth secret(仅服务端)。 |
NEXT_PUBLIC_GOOGLE_CLIENT_ID | 否 | '' | GOOGLE_CLIENT_ID 的镜像。客户端 One-Tap 要用。可暴露。 |
GITHUB_CLIENT_ID | 否 | '' | GitHub OAuth app id。启用「用 GitHub 登录」。 |
GITHUB_CLIENT_SECRET | 否 | '' | GitHub OAuth secret。 |
邮件(Mail)
默认 Resend。RESEND_API_KEY 为空时邮件 facade 静默 no-op。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
RESEND_API_KEY | 否 | '' | Resend API key(re_…)。验证、欢迎、重置密码邮件靠它。 |
RESEND_FROM_EMAIL | 否 | [email protected] | From: 地址。生产环境换成你验证过的域名。 |
RESEND_REPLY_TO_EMAIL | 否 | '' | 可选 Reply-To: header。 |
RESEND_AUDIENCE_ID | 否 | '' | newsletter 用的 Resend Audience id(newsletter.provider = 'resend' 时)。 |
Newsletter — Beehiiv
只在siteConfig.newsletter.provider = 'beehiiv' 时生效。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
BEEHIIV_API_KEY | 否 | '' | Beehiiv v2 API key。 |
BEEHIIV_PUBLICATION_ID | 否 | '' | publication id(pub_…)。 |
支付 — Stripe
默认 provider。只有你实际在卖的*_PRICE_* id 才需要填。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
STRIPE_SECRET_KEY | 是(激活时) | '' | sk_test_… / sk_live_…。 |
STRIPE_WEBHOOK_SECRET | 是(激活时) | '' | Stripe dashboard webhook 配置里的 whsec_…。 |
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY | 否 | '' | pk_…。Stripe.js / Elements 用。 |
STRIPE_PRICE_VIBESTRAP_PROMO | 否 | '' | vibestrap promo 档($49)的 price id。 |
STRIPE_PRICE_VIBESTRAP_STANDARD | 否 | '' | vibestrap 标准档($99)的 price id。 |
STRIPE_PRICE_PRO_MONTHLY | 否 | '' | 下游应用 Pro 月付。 |
STRIPE_PRICE_PRO_YEARLY | 否 | '' | 下游应用 Pro 年付。 |
STRIPE_PRICE_LIFETIME | 否 | '' | 下游应用 Lifetime 档。 |
STRIPE_PRICE_CREDITS_BASIC | 否 | '' | 积分包 basic。 |
STRIPE_PRICE_CREDITS_STANDARD | 否 | '' | 积分包 standard。 |
STRIPE_PRICE_CREDITS_PREMIUM | 否 | '' | 积分包 premium。 |
STRIPE_PRICE_CREDITS_ENTERPRISE | 否 | '' | 积分包 enterprise。 |
支付 — Paddle
仅当siteConfig.payment.provider = 'paddle' 时生效。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
PADDLE_API_KEY | 是(激活时) | '' | Paddle API key。 |
PADDLE_WEBHOOK_SECRET | 是(激活时) | '' | Webhook 签名密钥。 |
PADDLE_PRICE_VIBESTRAP_PROMO | 否 | '' | promo 档 price id。 |
PADDLE_PRICE_VIBESTRAP_STANDARD | 否 | '' | 标准档 price id。 |
NEXT_PUBLIC_PADDLE_CLIENT_TOKEN | 否 | '' | Paddle.js 公开 client token。 |
NEXT_PUBLIC_PADDLE_ENV | 否 | sandbox | sandbox 或 production。和 API key 对齐。 |
支付 — Lemon Squeezy
仅当siteConfig.payment.provider = 'lemonsqueezy' 时生效。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
LEMON_SQUEEZY_API_KEY | 是(激活时) | '' | Lemon Squeezy dashboard 的 API key。 |
LEMON_SQUEEZY_STORE_ID | 是(激活时) | '' | 数字 store id。 |
LEMON_SQUEEZY_WEBHOOK_SECRET | 是(激活时) | '' | Webhook 签名密钥。 |
LEMON_VARIANT_VIBESTRAP_PROMO | 否 | '' | promo 档 variant id。 |
LEMON_VARIANT_VIBESTRAP_STANDARD | 否 | '' | 标准档 variant id。 |
支付 — Creem
仅当siteConfig.payment.provider = 'creem' 时生效。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
CREEM_API_KEY | 是(激活时) | '' | Creem API key。 |
CREEM_WEBHOOK_SECRET | 是(激活时) | '' | Webhook 签名密钥。 |
CREEM_PRICE_VIBESTRAP_PROMO | 否 | '' | promo 档 price id。 |
CREEM_PRICE_VIBESTRAP_STANDARD | 否 | '' | 标准档 price id。 |
AI providers
Phase 2 启用。v0.1 默认mock provider,demo 页面无 key 也能流式输出假 token。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
AI_PROVIDER | 否 | mock | mock / openrouter / openai / anthropic / replicate / fal。 |
OPENROUTER_API_KEY | 否 | '' | OpenRouter key(接入大多数 LLM 的网关)。 |
OPENROUTER_BASE_URL | 否 | https://openrouter.ai/api/v1 | 仅当自托管网关时改。 |
OPENAI_API_KEY | 否 | '' | OpenAI key(sk-…)。 |
OPENAI_BASE_URL | 否 | https://api.openai.com/v1 | Azure OpenAI 或兼容 endpoint 时改。 |
ANTHROPIC_API_KEY | 否 | '' | Anthropic key(sk-ant-…)。 |
ANTHROPIC_BASE_URL | 否 | https://api.anthropic.com | Bedrock / 代理时改。 |
REPLICATE_API_TOKEN | 否 | '' | Replicate API token,用于图像/音频模型。 |
FAL_KEY | 否 | '' | fal.ai key,用于快速图像生成。 |
存储(S3 / R2)
v0.1 是 stub——需要上传或签名下载时接上。| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
S3_ENDPOINT | 否 | '' | endpoint URL。AWS S3、Cloudflare R2、MinIO 都行。 |
S3_REGION | 否 | '' | bucket region。R2 用 auto。 |
S3_ACCESS_KEY_ID | 否 | '' | access key id。 |
S3_SECRET_ACCESS_KEY | 否 | '' | secret access key。 |
S3_BUCKET | 否 | '' | bucket 名。 |
S3_PUBLIC_URL | 否 | '' | 对外 CDN base URL。 |
反 bot — Cloudflare Turnstile
两把 key 都填,启用 Turnstile 在 signup、forgot-password、newsletter 表单。| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
TURNSTILE_SECRET_KEY | 否 | '' | 服务端校验密钥。 |
NEXT_PUBLIC_TURNSTILE_SITE_KEY | 否 | '' | 控件公开 site key。 |
客服
每次只挂一个,由siteConfig.customerService.provider 决定。每个 widget 自检 env 变量。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
NEXT_PUBLIC_CRISP_WEBSITE_ID | 否 | '' | Crisp website id(UUID)。 |
NEXT_PUBLIC_TAWK_PROPERTY_ID | 否 | '' | tawk.to property id。 |
NEXT_PUBLIC_TAWK_WIDGET_ID | 否 | '' | tawk.to widget id。 |
NEXT_PUBLIC_INTERCOM_APP_ID | 否 | '' | Intercom workspace id。 |
NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN | 否 | '' | Chatwoot website token。 |
NEXT_PUBLIC_CHATWOOT_BASE_URL | 否 | https://app.chatwoot.com | 自托管 Chatwoot URL。 |
联盟(Affiliate)
siteConfig.affiliate.provider 选哪个,就填哪个对应的变量。internal provider 不需要 env 变量。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
NEXT_PUBLIC_AFFONSO_PROGRAM_ID | 否 | '' | Affonso program id。 |
NEXT_PUBLIC_REWARDFUL_API_KEY | 否 | '' | Rewardful public API key。 |
NEXT_PUBLIC_TOLT_API_KEY | 否 | '' | Tolt public API key。 |
分析(Analytics)
每个脚本仅在自己 env 变量有值时挂载。可任意混搭。| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
NEXT_PUBLIC_GOOGLE_ANALYTICS_ID | 否 | '' | GA4 measurement id(G-…)。 |
NEXT_PUBLIC_POSTHOG_KEY | 否 | '' | PostHog 项目 key。 |
NEXT_PUBLIC_POSTHOG_HOST | 否 | https://us.i.posthog.com | 欧洲用户:https://eu.i.posthog.com。 |
NEXT_PUBLIC_PLAUSIBLE_DOMAIN | 否 | '' | Plausible 站点域名。 |
NEXT_PUBLIC_PLAUSIBLE_HOST | 否 | https://plausible.io | 自托管 Plausible URL。 |
NEXT_PUBLIC_UMAMI_WEBSITE_ID | 否 | '' | Umami website id。 |
NEXT_PUBLIC_UMAMI_HOST | 否 | https://cloud.umami.is | 自托管 Umami URL。 |
NEXT_PUBLIC_CLARITY_PROJECT_ID | 否 | '' | Microsoft Clarity 项目 ID(热图 + session 录屏)。 |
NEXT_PUBLIC_YANDEX_METRIKA_ID | 否 | '' | Yandex Metrika counter id(纯数字)。 |
搜索引擎站长工具验证
每个变量通过 Next.jsmetadata.verification 在 <head> 渲染一个 <meta> 标签,
用来在对应站长后台证明所有权。服务端 env 变量(不带 NEXT_PUBLIC_ 前缀),
留空就不渲染对应标签。
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
GOOGLE_SITE_VERIFICATION | 否 | '' | Google Search Console —— google-site-verification meta 标签的 content 值。 |
BING_SITE_VERIFICATION | 否 | '' | Bing Webmaster Tools —— msvalidate.01 meta 标签的 content 值。 |
YANDEX_SITE_VERIFICATION | 否 | '' | Yandex Webmaster —— yandex-verification meta 标签的 content 值。 |
License 派发
购买成功后下载 endpoint 重定向到的地址。| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
LICENSE_DOWNLOAD_URL | 否 | '' | 带 {key} 占位符的 URL 模板。通常是 GitHub 私有 release tarball 或 S3 签名 URL。 |
杂项
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
NEXT_PUBLIC_DEMO_MODE | 否 | false | 设 true 隐藏真实支付 + 认证,显示只读 demo 浮层。 |
另见
- Vercel 部署 —— 生产环境去哪粘。
- Cloudflare 部署 —— 每个 secret 用
wrangler secret put。 - 配置 ——
siteConfig开关决定哪个 provider 读哪些 key。