Nuxt Starter

部署到 Cloudflare

建正式库、上传一次密钥、发布到自定义域名。

正式环境的 Worker 名、域名和 D1 ID 在 scripts/production-target.ts。wrangler.jsonc 只给本地用。

第一次发布

npm install -g cf
cf auth login
npx wrangler login                  # cf 和 wrangler 登录不通用
cf d1 create --name 你的库名         # 把返回的 uuid 填进 production-target.ts
npm run db:migrate:production

上传密钥,只需一次:

cp .env.production.example .env.production   # 填好;已被 Git 忽略
npx wrangler secret bulk .env.production --name 你的Worker名   # Worker 还不存在时会问是否先建空 Worker,选 y

NUXT_AUTH_SECRET 新生成:node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"。也可以在 Cloudflare 后台 Worker → Settings → Variables and Secrets 里逐个填。

npm run deploy:production:check     # 预演,看绑定是否是正式库和正式域名
npm run deploy:production

之后的发布

npm run db:migrate:production   # 有新迁移时
npm run deploy:production

普通发布不带密钥,已上传的会保留(Cloudflare 说明)。只改了代码才需要发布;新增变量时代码和变量都要上线,先后不限。

改线上变量

本地 .env 不会同步到线上,线上的值单独改,改完立即生效,不用重新发布。

npx wrangler secret put 变量名 --name 你的Worker名              # 改一个
npx wrangler secret bulk .env.production --name 你的Worker名    # 改多个
npx wrangler secret delete 变量名 --name 你的Worker名           # 删除
npx wrangler secret list --name 你的Worker名                   # 查看名字

secret bulk 只改文件里出现的变量,其它不动。文件里留空的 KEY= 会把线上值改成空字符串,不改的变量整行删掉。

例:关掉 Google One Tap,secret put NUXT_GOOGLE_ONE_TAP,填 false。

检查

curl https://你的域名/api/health
curl https://你的域名/api/auth-providers

Google 客户端要登记 https://你的域名/api/auth/callback/google。

原理

nuxt build 生成 .output/server/wrangler.json,wrangler 发布读的是它。这份配置不能分环境,所以 scripts/use-production-config.ts 在构建后把 Worker 名、域名、D1 和线上地址改成正式值。

/docs 预渲染成静态 HTML,Markdown 不会上线。静态资源请求免费、不计入 Worker 调用(Cloudflare 说明,2026-10-20)。