全部文章

实战 / 2026-09-01

从克隆到上线,完整走一遍

从 `bun install` 到线上域名之间的每一步——先配什么、后配什么,以及哪些步骤是真的没法自动化的。

从克隆到上线,完整走一遍

这是完整路径,顺序就是依赖关系的实际顺序。除非明确写了「可选」,否则都不能跳。

如果你用 Claude Code,第 1、2、4 步可以交给仓库自带的 skills(/setup、/google-oauth、/stripe 或 /creem,最后是 /deploy):它们执行的是同样的命令,并且会检查结果。下面写的就是它们做的事,让你知道自己在批准什么。

1. 密钥、数据库,跑起来(5 分钟)

bun install
cp .dev.vars.example .dev.vars   # 然后填 BETTER_AUTH_SECRET:openssl rand -base64 32
bun run db:migrate:local
bun run db:seed                  # 可选:灌入 90 天的演示数据,让后台页面有东西看

.dev.vars 已被 gitignore,绝不要强制提交它。环境变量在启动时校验,Google 的 client id 和 secret 是必填项,所以先做第 2 步再 bun run dev。如果只是想先看看,填上占位值也能通过校验、正常启动,只是 Google 登录按钮用不了。

2. Google OAuth(10 分钟,主要在浏览器里)

在 Google Cloud 创建 OAuth 客户端,回调地址填 http://localhost:3000/api/auth/callback/google。把 id 和 secret 写进 .dev.vars,并且把 id 同时写进 appConfig.googleClientId:One Tap 在浏览器里跑,需要这个值是公开的。然后:

bun run dev

Google 不是唯一的登录方式。邮箱验证码登录在本地不需要任何邮件服务:没配 RESEND_API_KEY 之前,验证码会直接打印在开发服务器的日志里。GitHub 登录是可选的,填上它的 client id 和 secret,按钮就会出现。

登录一次,然后把自己提成管理员:

bunx wrangler d1 execute DB --local \
  --command "UPDATE user SET role='admin' WHERE email='you@example.com';"

3. 改成你自己的(30 分钟,非常值)

先改 src/config/app-config.ts:名称、正式域名、支持邮箱、法律实体。这些值会出现在营销页、每一封事务邮件,以及服务条款和隐私政策页上——法律实体是原样打印的,所以在收第一笔钱之前就要填好。

然后是 src/config/plans.ts。文件顶部的注释解释了整个价格阶梯:加油包按标价卖,订阅在标价之下,而 plans.test.ts 会在任何一档跌破毛利下限时让测试失败。CREDIT_COST_CENTS 要来自实测,不是拍脑袋。

4. 接支付(20 分钟)

Stripe 和 Creem 都支持:PAYMENT_PROVIDER 决定新的结账走哪一家,两家也可以同时配置。以 Stripe 为例:建好商品目录——每档一个 product,每个计费周期一个 recurring price——把 id 粘回 plans.ts,替换掉那些 REPLACE_ME 占位符。把 secret key 和 webhook secret 写进 .dev.vars,并设置 PAYMENT_PROVIDER。

用 Stripe CLI 把 webhook 转发到本地 dev server 来测(Creem 的本地签名测试在 /creem skill 里):

bun run stripe:listen

用测试卡买一次,看着账本动起来。在支付商密钥配好之前,购买按钮会直接说明情况而不是发起结账,所以这一步推迟也是安全的。

5. 部署(15 分钟)

wrangler d1 create shipkit            # 把 id 填进 wrangler.jsonc
wrangler r2 bucket create shipkit-files
bun run db:migrate:remote
grep -v '^#' .prod.vars | grep = | wrangler secret bulk
bun run deploy

迁移一律手工执行,绝不从 CI 跑——改表结构是一件需要人盯着的、有意为之的操作,而部署任务会拒绝发布尚有未执行迁移的代码。

对一个小产品来说,这一整套都跑在 $5/月的 Workers 付费版上。我们算过它和 Vercel 加 Postgres 相比要花多少钱,分 1,000 和 10,000 用户两档。

6. 只有你自己能做的那些事

给正式域名再建一个 Google OAuth 客户端。在支付商后台配一个指向 <你的域名>/api/webhooks/stripe 的 webhook。在 Resend 里验证发信域名。这些都是浏览器操作,没有值得脚本化的 API——这也正是仓库自带 Claude Code 技能的原因:带你走完并验证结果,而不是假装这些步骤不存在。

更多文章