部署

构建并将 Nuxt 模板部署到生产环境。

应用会构建为 Nitro 的 .output 包,可运行于 Node、Docker,或 Vercel 这类平台。

质量闸门

每次部署前先运行:

pnpm eslint .
pnpm build

pnpm 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_DEMOfalse

暴露高风险功能之前

  • 上传写入本地 public/uploads,在 serverless 或可替换容器上不持久 —— 请先迁移到 S3/R2/Blob。参见 存储
  • AI 路由通过 requireAiAuth 强制鉴权 + Zod 校验,但出厂不含配额、审核或成本 上限;限流亦有意不在范围内。暴露付费端点前请补齐这些。参见 AI 聊天

部署后冒烟测试

  • 认证:注册、验证、登录、OAuth、重置。
  • 邮件:验证邮件与联系消息可投递。
  • 支付:每个已配置提供商的结账与 webhook。
  • 仪表盘与管理页正常加载且守卫生效。
  • 内容:文档/博客/法律渲染正常;英文与 /zh 路由可用。
  • AI 聊天与媒体(若启用)。
  • 图片上传(若已配置持久化后端)。

同时确认数据库备份、日志/错误上报,以及密钥轮换方案。

相关页面

On this page