LogoLaunchSaaS

部署

将 LaunchSaaS 部署到 Vercel、Cloudflare、Railway 或 Docker 生产环境。分步指南包含环境配置和最佳实践。

部署

本指南涵盖将 LaunchSaaS 部署到生产环境,包括特定平台的说明和最佳实践。

部署前检查清单

在部署之前,确保你已经:

  • 数据库已设置并可从生产环境访问
  • 所有必需的环境变量已配置
  • 数据库迁移已应用(pnpm run db:migrate
  • 管理员用户已创建(pnpm run init:scripts
  • Stripe webhooks 已使用生产环境 URL 配置
  • Resend 中的电子邮件域名已验证
  • 社交 OAuth 应用已使用生产环境回调 URL 配置
  • NEXT_PUBLIC_APP_ENV 设置为 production
  • NEXT_PUBLIC_APP_URL 设置为你的生产域名

Vercel(推荐)

Vercel 是 Next.js 的创建者,提供最佳的部署体验。

通过控制台部署

  1. 前往 vercel.com
  2. 点击"Add New Project"
  3. 导入你的 Git 仓库
  4. 配置环境变量(从 .env 文件添加所有变量)
  5. 点击"Deploy"

通过 CLI 部署

  1. 安装 Vercel CLI:
pnpm install -g vercel
  1. 登录并部署:
vercel login
vercel --prod

环境变量

在 Vercel Dashboard 中添加所有必需的环境变量:

  1. 前往 Project Settings → Environment Variables
  2. 为"Production"环境添加每个变量
  3. 添加变量后重新部署

自定义域名

  1. 前往 Project Settings → Domains
  2. 添加你的域名
  3. 配置 DNS(CNAME 到 cname.vercel-dns.com 或使用 Vercel 名称服务器)
  4. 等待 DNS 传播

Railway

Railway 提供简单的部署,包含数据库。

部署到 Railway

  1. 前往 railway.app
  2. 点击"New Project"
  3. 选择"Deploy from GitHub repo"
  4. 选择你的仓库
  5. 添加环境变量
  6. 点击"Deploy"

Railway 上的数据库

Railway 可以配置 PostgreSQL 数据库:

  1. 点击"New"→"Database"→"PostgreSQL"
  2. 复制连接字符串
  3. 作为 DATABASE_URL 环境变量添加

Docker(VPS/自托管)

在自己的 VPS 或服务器上使用 Docker 部署。此方法适合需要完全控制基础设施的场景。

推荐设置:使用 Docker 部署应用,使用托管数据库服务(Neon/Supabase)以获得简单性和可靠性。

前置要求

  • 安装了 Docker 的 VPS 或服务器
  • 托管数据库(推荐 Neon 或 Supabase)
  • 配置了 DNS 的域名(可选)
  • 至少 2GB RAM 和 10GB 磁盘空间

快速开始

  1. 克隆和配置
git clone https://github.com/your-repo/launchsaas.git
cd launchsaas
cp .env.example .env
  1. 编辑 .env 文件

配置必需的变量:

  • DATABASE_URL - 你的托管数据库连接字符串
  • BETTER_AUTH_SECRET - 随机的 32+ 字符字符串
  • ADMIN_EMAILADMIN_PASSWORD - 管理员凭据
  • NEXT_PUBLIC_APP_URL - 你的生产域名
  1. 构建并启动
./docker-quickstart.sh

你的应用现在运行在 http://localhost:3000

使用自托管数据库(可选)

如果你更喜欢在 Docker 中运行 PostgreSQL 而不是使用托管服务:

  1. 取消注释 docker-compose.yml 中的数据库
# 移除这些行的 # 注释:
postgres:
  image: postgres:16-alpine
  # ... 其余配置
volumes:
  postgres_data:
  1. 使用 Docker 数据库 URL 更新 .env
DATABASE_URL=postgres://postgres:postgres@postgres:5432/launchsaas
  1. 重启容器
./docker-quickstart.sh down
./docker-quickstart.sh up

自托管数据库需要定期备份和维护。生产环境推荐使用 Neon 或 Supabase 等托管服务。

生产环境设置

1. 配置反向代理和 HTTPS

选择以下选项之一来添加 HTTPS 支持:

选项 A:SWAG(推荐用于 Docker)

SWAG 是一个集成解决方案,通过 Let's Encrypt 自动管理 SSL 证书。

# 添加到你的 docker-compose.yml
services:
  swag:
    image: lscr.io/linuxserver/swag:latest
    container_name: swag
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - URL=yourdomain.com
      - VALIDATION=http
      - [email protected]
    volumes:
      - ./swag:/config
    ports:
      - 443:443
      - 80:80
    restart: unless-stopped

./swag/nginx/proxy-confs/launchsaas.subdomain.conf 创建代理配置:

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    include /config/nginx/ssl.conf;

    location / {
        include /config/nginx/proxy.conf;
        proxy_pass http://launchsaas-app:3000;
    }
}

选项 B:Caddy(最简单)

最少配置自动 HTTPS:

# 添加到 docker-compose.yml
services:
  caddy:
    image: caddy:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

创建 Caddyfile

yourdomain.com {
    reverse_proxy launchsaas-app:3000
}

选项 C:Nginx

手动 SSL 证书配置:

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

2. 环境变量

选项 A:使用单独的环境文件(推荐)

为每个环境创建不同的环境文件:

# 创建生产环境文件
cp .env.example .env.prod

# 编辑 .env.prod 设置生产值
nano .env.prod

配置生产值:

  • APP_ENV=production
  • NEXT_PUBLIC_APP_URL=https://yourdomain.com
  • 生产数据库 URL
  • 所有服务的生产 API 密钥

使用特定的环境文件启动:

# 使用 docker-quickstart.sh
./docker-quickstart.sh start --env .env.prod
./docker-quickstart.sh -e .env.staging

# 直接使用 docker compose
export ENV_FILE=.env.prod
docker compose up -d

选项 B:使用单个 .env 文件

使用生产值更新现有的 .env

nano .env

然后正常启动:

./docker-quickstart.sh

查看环境变量了解完整列表。

3. 数据库初始化

运行迁移并创建管理员用户:

docker compose exec app pnpm run init

或者分别运行:

docker compose exec app pnpm run db:migrate
docker compose exec app pnpm run init:scripts

可用命令

./docker-quickstart.sh start    # 构建并启动(默认)
./docker-quickstart.sh build    # 仅构建 Docker 镜像
./docker-quickstart.sh up       # 仅启动容器
./docker-quickstart.sh down     # 停止容器
./docker-quickstart.sh restart  # 重启容器
./docker-quickstart.sh logs     # 查看日志(Ctrl+C 退出)
./docker-quickstart.sh clean    # 移除容器和镜像

使用不同的环境文件:

# 使用生产环境启动
./docker-quickstart.sh start --env .env.prod

# 使用预发布环境启动
./docker-quickstart.sh start -e .env.staging

# 使用特定环境构建
./docker-quickstart.sh build --env .env.prod

# 查看日志(不需要环境文件)
./docker-quickstart.sh logs

常见工作流:

# 开发环境
./docker-quickstart.sh

# 生产环境
cp .env.example .env.prod
# 编辑 .env.prod 设置生产值
./docker-quickstart.sh start --env .env.prod

# 切换环境
./docker-quickstart.sh down
./docker-quickstart.sh start --env .env.staging

# 查看日志和重启
./docker-quickstart.sh logs
./docker-quickstart.sh restart

故障排除

端口已被使用:

# 在 .env 中更改端口
APP_PORT=3001

然后重启:

./docker-quickstart.sh restart

数据库连接失败:

  • 验证 DATABASE_URL 是否正确
  • 确保数据库允许来自 Docker 的连接
  • 对于托管数据库,检查 IP 白名单设置
  • 测试连接:docker compose exec app node -e "console.log(process.env.DATABASE_URL)"

容器无法启动:

# 检查错误日志
./docker-quickstart.sh logs

# 检查容器状态
docker compose ps

# 如需要可以重新构建
./docker-quickstart.sh clean
./docker-quickstart.sh build

磁盘空间不足:

# 清理 Docker 资源
docker system prune -a

# 移除旧容器和镜像
./docker-quickstart.sh clean

为什么选择 Vercel/Railway?

虽然 Docker 给你完全的控制权,但托管平台提供显著的优势:

  • ✅ 自动 SSL 证书
  • ✅ 零停机部署
  • ✅ 内置 CDN 和边缘缓存
  • ✅ 自动扩展
  • ✅ 小项目的免费套餐
  • ✅ 无需服务器维护

在以下情况使用 Docker:

  • 需要完全的服务器控制
  • 自定义基础设施要求
  • 有现有的 VPS/服务器可以利用
  • 符合特定的托管要求
  • 与现有的基于 Docker 的基础设施集成

部署后

更新 Webhook URL

部署后,更新你的 Stripe webhook URL:

  1. 前往 Stripe Dashboard→Webhooks
  2. 将端点 URL 更新为:https://yourdomain.com/api/auth/stripe/webhook

更新 OAuth 回调 URL

更新社交登录回调 URL:

  • GitHubhttps://yourdomain.com/api/auth/callback/github
  • Googlehttps://yourdomain.com/api/auth/callback/google

验证部署

  1. 访问你的生产环境 URL
  2. 测试注册和登录
  3. 使用 Stripe 测试卡测试支付流程
  4. 验证电子邮件是否正在发送
  5. 检查管理面板访问

下一步