文档
开发指南生产环境

生产环境

🚀 Cheatsheet (快速执行)

目标: 30分钟内让你的 MVP 安全上线

上线前必做清单:

# 1. 检查环境变量
bun run build

# 2. 数据库迁移
bun db:deploy

# 3. 测试邮件发送
bun --filter mail preview

# 4. 检查 SEO 设置
curl -I https://your-domain.com

最关键的配置:

  • ✅ 生产环境变量 (DATABASE_URL, NEXTAUTH_SECRET 等)
  • ✅ 域名和 SSL 证书
  • ✅ 邮件服务配置
  • ✅ 支付服务生产密钥

❓ 为什么要做生产环境检查

对 MVP 的价值:

  • 避免崩溃: 用户第一次访问就出错,永远不会再来
  • 数据安全: 生产数据丢失,创业直接结束
  • 用户信任: SSL、正确邮件域名等细节影响专业形象
  • 法律合规: 隐私政策、服务条款避免法律风险

不做检查的后果: 上线第一天就被黑客攻击,或者用户无法注册,前期努力全白费。

🤔 为什么选择这个上线流程

基于真实踩坑经验:

  • 分步验证: 每个环节都可能出问题,逐一排查更安全
  • 生产/开发分离: 开发环境的配置不能直接用于生产
  • 用户体验优先: 邮件、支付、页面加载等直接影响转化率

省时间的方法: 按照这个 checklist 走,比自己摸索快 10 倍,避免常见的低级错误。

🧠 生产环境 vs 开发环境

关键区别:

# 开发环境 (localhost)
DATABASE_URL="postgresql://localhost:5432/dev"
NEXTAUTH_SECRET="dev-secret-123"
STRIPE_SECRET_KEY="sk_test_..."

# 生产环境 (your-domain.com)
DATABASE_URL="postgresql://prod-db-url:5432/prod"
NEXTAUTH_SECRET="super-secure-random-string"
STRIPE_SECRET_KEY="sk_live_..."

最容易犯的错误:

  • 忘记把测试密钥换成生产密钥
  • 数据库连接字符串指向开发环境
  • 邮件模板里还有测试 Logo

🛠️ 实际操作步骤

1. 环境变量配置 (10分钟)

生产环境必需的变量:

# .env.production
NEXTAUTH_URL="https://your-domain.com"
NEXTAUTH_SECRET="生成一个 32 位随机字符串"
DATABASE_URL="生产数据库连接字符串"

# 邮件服务 (选择一个)
RESEND_API_KEY="re_xxx"  # 推荐
SENDGRID_API_KEY="SG.xxx"

# 支付服务 (如果用到)
STRIPE_SECRET_KEY="sk_live_xxx"
STRIPE_WEBHOOK_SECRET="whsec_xxx"

快速生成安全密钥:

# 生成 NEXTAUTH_SECRET
openssl rand -base64 32

# 或者在线生成
# https://generate-secret.vercel.app/32

2. 邮件配置检查 (5分钟)

更改邮件模板 Logo:

// packages/mail/emails/components/Wrapper.tsx
// 把 Logo 换成你的品牌 Logo
<img src="https://your-domain.com/logo.png" alt="Your Brand" />

配置发件人信息:

// config/index.ts
export const config = {
  mail: {
    from: "noreply@your-domain.com", // 必须是你的域名
    // ...
  }
}

测试邮件发送:

# 启动邮件预览
bun --filter mail preview

# 访问 http://localhost:3005 检查所有邮件模板

3. 数据库生产部署 (5分钟)

# 1. 确保生产数据库 URL 正确
echo $DATABASE_URL

# 2. 部署数据库结构
bun db:deploy

# 3. 验证部署成功
bun db:studio

4. 支付配置 (5分钟)

Stripe 生产配置:

# 1. 登录 Stripe Dashboard
# 2. 切换到 "View live data" 模式
# 3. 复制 Live 密钥到环境变量

STRIPE_SECRET_KEY="sk_live_xxx"  # 不是 sk_test_
STRIPE_PUBLISHABLE_KEY="pk_live_xxx"

测试支付流程:

  • 使用真实银行卡测试小额支付
  • 检查 Webhook 是否正常接收

5. SEO 和页面检查 (5分钟)

基础 SEO 检查:

# 检查页面标题和描述
curl -s https://your-domain.com | grep -i "<title>"
curl -s https://your-domain.com | grep -i "description"

# 检查 SSL 证书
curl -I https://your-domain.com

必需的页面:

  • ✅ 首页加载正常
  • ✅ 注册/登录流程通畅
  • ✅ 隐私政策和服务条款页面
  • ✅ 404 页面显示正常

🔒 安全和法律清单

安全配置

# 1. HTTPS 强制跳转 (Vercel 自动配置)
# 2. 安全头设置
# next.config.ts 已包含基础安全配置

# 3. 敏感信息检查
grep -r "test_" .env*  # 确保没有测试密钥
grep -r "localhost" .env*  # 确保没有本地地址

法律页面

必需创建的页面:

  • 隐私政策: content/legal/privacy-policy.zh.md
  • 服务条款: content/legal/terms.zh.md
  • Cookie 政策: content/legal/cookie-policy.zh.md 内容要点:
  • 说明收集哪些用户数据
  • 如何使用和保护数据
  • 用户权利和联系方式

💡 实用上线技巧

软启动策略

# 1. 先上线最基础功能
# 2. 邀请少数用户测试
# 3. 收集反馈后正式推广

监控设置

# 设置基础监控
# - Vercel Analytics (免费)
# - Sentry 错误追踪
# - Google Analytics

域名和 DNS

# 1. 域名解析到 Vercel
# 2. 配置 www 重定向
# 3. 设置邮件 DNS 记录 (SPF, DKIM)

🆘 常见上线问题

问题 1: 邮件发送失败

# 解决方案
# 1. 检查域名 DNS 设置
# 2. 验证邮件服务商配置
# 3. 测试发件人邮箱是否有效

问题 2: 支付回调失败

# 解决方案  
# 1. 检查 Webhook URL 是否正确
# 2. 验证 Webhook 密钥
# 3. 查看支付服务商日志

问题 3: 页面加载缓慢

# 解决方案
# 1. 优化图片大小
# 2. 启用 CDN
# 3. 检查数据库查询性能

📊 上线后监控

关键指标

  • 页面加载速度: < 3 秒
  • 注册转化率: 记录并优化
  • 邮件送达率: > 95%
  • 支付成功率: > 98%

监控工具推荐

  • Vercel Analytics: 免费页面分析
  • Google Search Console: SEO 表现
  • Stripe Dashboard: 支付数据

📎 延伸阅读

部署平台:

监控和分析:

法律合规:


下一步: 上线成功后,看 [监控系统]./monitoring) 来持续优化产品表现。