BunshipBunship
快速开始

部署说明

面向 TurboRepo 的可复制部署手册(Vercel / Cloudflare)。

部署模型

Bunship 是 TurboRepo monorepo。线上只部署一个站点(apps/ship),同时承载:

  • 营销页
  • 业务页
  • 管理后台
  • 文档路由与文档搜索接口
  • /api/v1/* API 路由

无需单独部署 docs 项目。

1. 前置环境变量(先复制)

先生成密钥:

openssl rand -base64 32

生产环境最小可用变量(可直接粘贴再替换):

# 认证与站点地址
BETTER_AUTH_SECRET="replace-with-long-random-secret"
AUTH_SECRET="replace-with-long-random-secret"
BETTER_AUTH_URL="https://你的域名"
NEXT_PUBLIC_SITE_URL="https://你的域名"
NEXT_PUBLIC_SERVER_URL="https://你的域名"
NEXT_PUBLIC_API_PREFIX="/api/v1"
ADMIN_EMAIL_LIST="admin@你的域名"
EMAIL_FROM="Bunship <noreply@你的域名>"

# OAuth
OAUTH_GITHUB_CLIENT_ID="xxx"
OAUTH_GITHUB_CLIENT_SECRET="xxx"
OAUTH_GOOGLE_CLIENT_ID="xxx"
OAUTH_GOOGLE_CLIENT_SECRET="xxx"
NEXT_PUBLIC_OAUTH_GOOGLE_CLIENT_ID="xxx"

# 数据库与邮件
DATABASE_URL="postgresql://..."
RESEND_API_KEY="re_xxx"

# Stripe
STRIPE_SECRET_KEY="sk_live_xxx"
STRIPE_WEBHOOK_SECRET="whsec_xxx"

# 存储(S3 / R2)
S3_ENDPOINT="https://<account>.r2.cloudflarestorage.com"
S3_REGION="auto"
S3_ACCESS_KEY="xxx"
S3_SECRET_KEY="xxx"
S3_BUCKET="your-bucket"
NEXT_PUBLIC_S3_URL_BASE="https://cdn.你的域名"

# 当前模板校验还会要求
S_GITHUB_PERSONAL_ACCESS_TOKEN="ghp_xxx"
CLOUDFLARE_ACCOUNT_ID="xxx"

若使用 Better Auth,请设置 AUTH_SECRETBETTER_AUTH_SECRET(可复用同一个强随机值)。若使用 Clerk,请配置 NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEYCLERK_WEBHOOK_SECRET

相关配置文档:

2. Vercel 部署(TurboRepo)

由于这是 TurboRepo,有两种可用配置。

方案 A(推荐):Turbo Root 模式

把 Vercel 的 Root Directory 设为仓库根目录。

Vercel 配置项
Framework PresetNext.js
Root Directory.(仓库根目录)
Install Commandbun install
Build Commandbunx turbo run build --filter=@bunship-ai/ship...
Output Directory留空(Next.js 默认)

推荐原因:更符合 monorepo 依赖图,Turbo 缓存和依赖构建更稳定。

方案 B:App Root 模式

如果继续用 Root Directory = apps/ship,则:

Vercel 配置项
Framework PresetNext.js
Root Directoryapps/ship
Include files outside root directory in Build StepEnabled
Install Commandbun install
Build Commandbun run build
Output Directory留空(Next.js 默认)

App Root 模式下,务必保持 “Include files outside root directory in Build Step = Enabled”,否则工作区包可能无法解析。

部署完成后,在 Stripe 后台配置 Webhook:

https://你的域名/api/v1/webhook/stripe

参考链接:

3. Cloudflare 部署(OpenNext)

仓库已内置 OpenNext Cloudflare 配置(apps/ship/open-next.config.tsapps/ship/wrangler.jsonc)。

从仓库根目录执行:

bun install
cd apps/ship
bunx wrangler login
bun run deploy

bun run deploy 会执行:

  1. opennextjs-cloudflare build
  2. opennextjs-cloudflare deploy

参考链接:

Cloudflare 运行时建议显式设置 VERCEL_ENV=production,与模板内部生产分支行为保持一致。

4. 一键部署清单(照单执行)

Vercel

  • 导入仓库
  • 按上文选择方案 A 或 B 填写构建设置
  • 填入前置环境变量
  • 点击 Deploy
  • 配置 Stripe Webhook
  • 执行下方冒烟检查

Cloudflare

  • 创建/选择 Workers 项目
  • 填入环境变量与 Secrets
  • 执行 bun install
  • 执行 cd apps/ship && bun run deploy
  • 绑定自定义域名
  • 执行下方冒烟检查

5. 上线后冒烟验证

  • /:locale/docs
  • /:locale/signin
  • /:locale/subscription
  • /:locale/admin
  • /api/v1/health(如你当前环境已开放)
  • /api/docs/search