部署指南
将 ProductReady 部署到生产环境 - Vercel、Docker、环境设置和 CI/CD 最佳实践
部署指南
将 ProductReady 部署到生产环境的完整指南。学习 Vercel、Docker 和自托管环境的部署策略。
推荐:部署到 Vercel 以获得最简单的体验。它针对 Next.js 优化,需要最少的配置。
快速概览
部署选项:
- ✅ Vercel - 推荐(一键部署,自动 HTTPS)
- ✅ Docker - 自托管或云(AWS、GCP、Azure)
- ✅ Kubernetes - 用于大规模应用
- ✅ VPS - 传统服务器(DigitalOcean、Linode)
你需要什么:
- PostgreSQL 数据库(Neon、Supabase 或自托管)
- 邮件服务商(Resend、Postmark、AWS SES)
- 支付服务商(Stripe、LemonSqueezy)- 可选
- 域名 + SSL 证书
部署到 Vercel
一键部署
最快的开始方式:
Fork 仓库
将 ProductReady Fork 到您的 GitHub 账户
导入到 Vercel
- 前往 vercel.com/new
- 导入您 fork 的仓库
- 选择
apps/productready作为根目录
配置环境变量
在 Vercel 仪表板中添加:
# 数据库
PG_DATABASE_URL=postgresql://user:pass@host:5432/db
# 认证
BETTER_AUTH_SECRET=your-32-char-secret
BETTER_AUTH_URL=https://your-domain.vercel.app
# OAuth(可选)
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-secret
# 邮件(可选)
RESEND_API_KEY=re_123456789
# 支付(可选)
STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...自定义域名
在 Vercel 中添加域名:
- 前往 Project Settings → Domains
- 添加您的域名(例如
productready.com)
更新 DNS:
- 添加指向
cname.vercel-dns.com的 CNAME 记录 - 等待 DNS 传播(通常 < 5 分钟)
更新环境变量:
BETTER_AUTH_URL=https://productready.com使用 Docker 部署
Dockerfile
ProductReady 包含生产就绪的 Dockerfile:
# apps/productready/Dockerfile
FROM node:24.18.0-alpine AS base
# 仅在需要时安装依赖
FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
# 安装 pnpm
RUN npm install -g pnpm
# 复制包文件
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
# 仅在需要时重新构建源代码
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# 构建
ENV NEXT_TELEMETRY_DISABLED 1
RUN pnpm build
# 生产镜像
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# 复制构建文件
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
CMD ["node", "server.js"]构建和运行
# 构建镜像
docker build -t productready:latest .
# 运行容器
docker run -p 3000:3000 \
-e PG_DATABASE_URL="postgresql://..." \
-e BETTER_AUTH_SECRET="your-secret" \
-e BETTER_AUTH_URL="https://your-domain.com" \
productready:latest数据库设置
Neon(推荐)
- 在 neon.tech 创建账户
- 创建项目
- 复制连接字符串
- 添加到环境:
PG_DATABASE_URL=postgresql://user:pass@host.neon.tech:5432/neondb?sslmode=require为什么选择 Neon?
- ✅ Serverless PostgreSQL(缩放到零)
- ✅ 慷慨的免费套餐
- ✅ 用于开发的分支数据库
- ✅ 内置连接池
Supabase
- 在 supabase.com 创建项目
- 从 Settings → Database 获取连接字符串
- 在生产中使用连接池字符串:
# 事务模式(推荐用于 Drizzle)
PG_DATABASE_URL=postgresql://postgres.[ref]:[password]@aws-0-[region].pooler.supabase.com:6543/postgres本地数据库
对于本地开发,ProductReady 提供了 Docker Compose 配置,可以快速启动开发所需的所有数据库服务。
使用 make db 启动本地数据库
在项目根目录(kapps/)运行以下命令:
# 启动数据库服务
make db这将启动:
-
PostgreSQL 16 (带 pgvector 扩展)
- 端口:
5432 - 用户名:
bika - 密码:
bikabika - 数据库:
bikadev - 连接字符串:
postgresql://bika:bikabika@localhost:5432/bikadev
- 端口:
-
Redis Stack 7.2 (带 Redis Insight)
- Redis 端口:
6379 - Redis Insight UI:
http://localhost:8001 - 数据持久化:
./.data/redis
- Redis 端口:
-
Typesense 27.1 (搜索引擎)
- 端口:
8108 - API Key:
bikabika - 数据持久化:
./.data/typesense
- 端口:
常用数据库管理命令
# 停止数据库服务
make db-stop
# 查看服务日志
make db-logs
# 运行数据库迁移(所有项目)
make db-migrate
# 生成 Prisma/Drizzle 客户端
make db-generate
# 填充种子数据
make db-seed
# 重置数据库
make db-reset配置环境变量
在 apps/productready/.env 中配置本地数据库连接:
# PostgreSQL
PG_DATABASE_URL="postgresql://bika:bikabika@localhost:5432/bikadev"
# Redis(如果需要)
REDIS_URL="redis://localhost:6379"
# Typesense(如果需要)
TYPESENSE_URL="http://localhost:8108"
TYPESENSE_API_KEY="bikabika"数据持久化:所有数据存储在 ./.data/ 目录中,该目录已添加到 .gitignore,不会被提交到版本控制。
注意:确保已安装 Docker 和 Docker Compose。如果尚未安装,请访问 Docker 官网 下载。
环境变量
必需
# 数据库
PG_DATABASE_URL=postgresql://...
# 认证
BETTER_AUTH_SECRET=your-32-char-random-string
BETTER_AUTH_URL=https://your-production-domain.com可选 - OAuth
# GitHub OAuth
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
# Google OAuth
GOOGLE_CLIENT_ID=your-google-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=your-google-client-secret可选 - 邮件
# Resend
RESEND_API_KEY=re_123456789
# 或 Postmark
POSTMARK_API_KEY=your-postmark-token生成密钥
# 生成 32 字符密钥
openssl rand -base64 32
# 或使用 Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"数据库迁移
生产迁移
重要:在部署新代码之前运行迁移以避免错误。
选项 1:手动
# 安装依赖
pnpm install
# 运行迁移
pnpm db:migrate选项 2:CI/CD(推荐)
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v3
with:
node-version: 24.18.0
cache: 'pnpm'
# 运行迁移
- run: pnpm install
- run: pnpm db:migrate
env:
PG_DATABASE_URL: ${{ secrets.PG_DATABASE_URL }}
# 部署(Vercel 示例)
- run: npx vercel --prod
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}健康检查
ProductReady 包含健康检查端点:
GET /api/health
Response:
{
"status": "ok",
"timestamp": "2025-11-19T10:00:00.000Z",
"service": "productready",
"version": "1.0.0"
}部署前检查清单
部署到生产环境前:
- 设置所有必需的环境变量
- 运行数据库迁移
- 使用生产数据库测试(staging 环境)
- 设置自定义域名
- 配置 SSL/HTTPS
- 设置错误跟踪(Sentry)
- 设置正常运行时间监控
- 设置数据库备份
- 测试 OAuth 流程(生产凭据)
- 测试支付 webhooks(生产模式)
部署后
部署后:
- 监控错误率(Sentry)
- 检查性能指标(Vercel Analytics)
- 验证 webhooks 是否正常工作
- 测试关键用户流程
- 监控数据库性能
下一步
- 部署到 staging - 生产前测试所有内容
- 设置监控 - 跟踪错误和性能
- 配置备份 - 保护您的数据
从 Vercel 开始获得最简单的部署体验。一旦熟悉,探索 Docker/Kubernetes 以获得更多控制。