部署
构建并将 Nuxt 模板部署到生产环境。
应用会构建为 Nitro 的 .output 包,可运行于 Node、Docker,或 Vercel 这类平台。
质量闸门
每次部署前先运行:
pnpm eslint .
pnpm buildpnpm build 运行 nuxt build,并生成 Nitro 的 .output 目录。
构建产物
| 命令 | 产物 |
|---|---|
pnpm build | .output 中的服务端构建(以 node .output/server/index.mjs 运行) |
pnpm generate | 静态站点生成 |
pnpm preview | 本地启动生产构建以做冒烟测试 |
Docker / 自托管
随附的 Dockerfile 是两阶段的 node:22-alpine 构建:用 pnpm 安装、运行
pnpm build,并只把 .output 复制进运行镜像。容器启动 Nitro 服务器:
ENV PORT=80
ENV HOST=0.0.0.0
EXPOSE 80
CMD ["node", "/app/server/index.mjs"]将所有 NUXT_* / NUXT_PUBLIC_* 值作为运行时环境变量传入容器。
Vercel
在 Vercel 上部署时,Nitro 会自动选择 Vercel preset —— 无需更改配置。
@vercel/analytics 已接入。在 Vercel 项目设置中配置环境变量即可。
构建期与运行期配置
NUXT_PUBLIC_*值会暴露给浏览器,并被读入客户端包。NUXT_*服务端键必须存在于运行时环境中。Nitro 在运行时从匹配的NUXT_前缀环境变量读取runtimeConfig,因此可按环境覆盖值而无需重新构建。
确认生产环境中 NUXT_PUBLIC_AI_PUBLIC_DEMO 未设置或为 false,使 AI 路由要求
登录。保持为 true 会把付费 AI 端点暴露给匿名流量。
上线前检查清单
- 生产 PostgreSQL 已就绪,且迁移已应用(
npx drizzle-kit migrate)。 -
NUXT_PUBLIC_BASE_URL设为真实来源;NUXT_BETTER_AUTH_SECRET稳定。 - OAuth 回调 URL 指向生产域名。
- 已配置支付提供商密钥、webhook/通知 URL、Creem 产品 ID 以及
NUXT_CREEM_SERVER_IDX=0。 - Resend 域名已验证,发件人/支持地址已设置。
-
site.url与 SEO/OG 元数据已更新为真实域名。 - AI 密钥已设置;
NUXT_PUBLIC_AI_PUBLIC_DEMO为false。
暴露高风险功能之前
- 上传写入本地
public/uploads,在 serverless 或可替换容器上不持久 —— 请先迁移到 S3/R2/Blob。参见 存储。 - AI 路由通过
requireAiAuth强制鉴权 + Zod 校验,但出厂不含配额、审核或成本 上限;限流亦有意不在范围内。暴露付费端点前请补齐这些。参见 AI 聊天。
部署后冒烟测试
- 认证:注册、验证、登录、OAuth、重置。
- 邮件:验证邮件与联系消息可投递。
- 支付:每个已配置提供商的结账与 webhook。
- 仪表盘与管理页正常加载且守卫生效。
- 内容:文档/博客/法律渲染正常;英文与
/zh路由可用。 - AI 聊天与媒体(若启用)。
- 图片上传(若已配置持久化后端)。
同时确认数据库备份、日志/错误上报,以及密钥轮换方案。
