部署
双域名部署
Pay4SaaS 支持一套代码部署两个独立站点 —— 例如海外站(example.com)和国内站(example.cn)。完全通过环境变量控制,无需改动任何代码。
工作原理
每个域名是一个独立部署,拥有各自的 .env 文件。核心环境变量是 NEXT_PUBLIC_LOCALE_SITE:
- 主站(如
.com):不设置NEXT_PUBLIC_LOCALE_SITE - 副站(如
.cn):NEXT_PUBLIC_LOCALE_SITE=cn
# 主站(.com)—— 不设置 NEXT_PUBLIC_LOCALE_SITE
NEXT_PUBLIC_SITE_URL=https://www.example.com
NEXT_PUBLIC_PAYMENT_PROVIDERS=stripe,paypal
# 副站(.cn)—— 设置 NEXT_PUBLIC_LOCALE_SITE
NEXT_PUBLIC_LOCALE_SITE=cn
NEXT_PUBLIC_SITE_URL=https://www.example.cn
NEXT_PUBLIC_PAYMENT_PROVIDERS=alipay变化范围
由 NEXT_PUBLIC_LOCALE_SITE=cn(值为 cn)触发
| 维度 | 主站 | 副站(cn) |
|---|---|---|
| 货币 | USD ($) | CNY (¥) |
| 价格 | amount / price | amountCNY / priceCNY |
| 默认语言 | 英文 | 中文 |
| 服务条款 / 隐私政策 | 英文版 | 中文版 |
| ICP 备案号 | 隐藏 | 显示(需设置 NEXT_PUBLIC_ICP_BEIAN) |
| 试用期 | 开启 | 关闭 |
由 NEXT_PUBLIC_LOCALE_SITE 存在(任意值)触发
只要设置了这个变量——无论值是什么——该站点就被视为副站,SEO 完全禁用:
| 维度 | 主站 | 副站 |
|---|---|---|
robots.txt | Allow: / | Disallow: / |
| Sitemap | 完整站点地图 | 空 |
| Meta robots | 不设置 | noindex, nofollow |
这意味着只有主域名会被搜索引擎收录。
差异环境变量一览
| 变量 | 主站(.com) | 副站(.cn) | 用途 |
|---|---|---|---|
NEXT_PUBLIC_LOCALE_SITE | (不设置) | cn | 开启副站模式 |
NEXT_PUBLIC_SITE_URL | https://www.example.com | https://www.example.cn | 链接、站点地图、OG 标签的基础 URL |
NEXT_PUBLIC_PAYMENT_PROVIDERS | stripe,paypal,creem | alipay | 显示哪些支付按钮 |
NEXT_PUBLIC_PRICING_MODEL | 自行选择 | 自行选择 | 两个域名可以用不同的定价模式 |
NEXT_PUBLIC_ICP_BEIAN | (不设置) | 备案号 | 页脚显示 ICP 备案 |
NEXT_PUBLIC_CONTACT_EMAIL | 海外邮箱 | 国内邮箱 | 联系页面展示 |
支付相关密钥(Stripe 密钥、支付宝密钥等)只需在对应部署中配置。
本地开发
使用 npm run dev:cn 可以本地预览副站效果,会加载 .env.local.cn 中的 NEXT_PUBLIC_LOCALE_SITE=cn。
npm run dev # 预览主站
npm run dev:cn # 预览副站价格配置
在 config/payment.ts 中,每个套餐支持双币种定价:
basic: {
amount: 9.99, // USD —— 主站使用
amountCNY: 29, // CNY —— 副站(cn)使用
// ...
}如果未设置 amountCNY,副站会回退使用 USD 价格。
共享数据库
两个部署可以共享同一个 Supabase 数据库。用户账号、订阅、用量数据在两个域名间互通。Cookie 域名会自动从 NEXT_PUBLIC_SITE_URL 中提取,确保会话正常工作。
部署方式
每个域名需要各自独立的部署(例如两个 Vercel 项目,或一个 Vercel + 一个 VPS)。唯一的区别是环境变量——代码完全相同。
- 用主站的
.env部署主站 - 用包含
NEXT_PUBLIC_LOCALE_SITE=cn的.env部署副站 - 两个部署指向同一个 Git 仓库和同一个分支