部署

了解如何将您的 Nuxt 应用程序部署到任何托管提供商。

Nuxt 应用程序可以部署在 Node.js 服务器上、预渲染为静态托管,或者部署到无服务器或边缘(CDN)环境中。

如果您正在寻找支持 Nuxt 的云提供商列表,请参阅 托管提供商 部分。

Node.js 服务器

探索使用 Nitro 的 Node.js 服务器预设,将其部署到任何 Node 托管环境。

  • 如果未指定或自动检测到输出格式,则为默认输出格式
  • 仅加载渲染请求所需的块,以实现最佳冷启动时间
  • 用于将 Nuxt 应用部署到任何 Node.js 托管环境

入口点

使用 Node 服务器预设运行 nuxt build 时,结果将是一个可直接运行的 Node 服务器入口点。

终端
node .output/server/index.mjs

这将启动您的生产 Nuxt 服务器,默认监听 3000 端口。

它支持以下运行时环境变量:

  • NITRO_PORTPORT(默认为 3000
  • NITRO_HOSTHOST(默认为 '0.0.0.0'
  • NITRO_SSL_CERTNITRO_SSL_KEY - 如果两者都存在,将以 HTTPS 模式启动服务器。在绝大多数情况下,除了测试外不应使用此选项,并且 Nitro 服务器应在终止 SSL 的反向代理(如 nginx 或 Cloudflare)后面运行。

PM2

PM2(进程管理器 2)是在您的服务器或虚拟机上托管 Nuxt 应用程序的快速简便解决方案。

要使用 pm2,请使用 ecosystem.config.cjs

ecosystem.config.cjs
module.exports = {
  apps: [
    {
      name: 'NuxtAppName',
      port: '3000',
      exec_mode: 'cluster',
      instances: 'max',
      script: './.output/server/index.mjs'
    }
  ]
}

集群模式

您可以使用 NITRO_PRESET=node_cluster 来利用 Node.js cluster 模块实现多进程性能。

默认情况下,工作负载会以轮询策略分配给工作进程。

了解更多

阅读更多 Nitro 文档中的 node-server 预设.

静态托管

将 Nuxt 应用程序部署到任何静态托管服务有两种方式:

  • 使用 ssr: true 的静态站点生成 (SSG) 在构建时预渲染应用程序的路由。(这是运行 nuxt generate 时的默认行为。)它还将生成 /200.html/404.html 单页应用回退页面,这些页面可以在客户端渲染动态路由或 404 错误(尽管您可能需要在静态主机上配置此功能)。
  • 或者,您可以使用 ssr: false 预渲染您的站点(静态单页应用)。这将生成包含空 <div id="__nuxt"></div> 的 HTML 页面,您的 Vue 应用通常会在此处渲染。这样会失去预渲染站点的许多 SEO 优势,因此建议改用 <ClientOnly> 来包装站点中无法在服务器端渲染的部分(如果有的话)。
阅读更多 Nuxt 预渲染.

仅客户端渲染

如果您不想预渲染路由,另一种使用静态托管的方法是在 nuxt.config 文件中将 ssr 属性设置为 false。然后,nuxt generate 命令将输出一个 .output/public/index.html 入口点和 JavaScript 捆绑包,就像经典的客户端 Vue.js 应用程序一样。

nuxt.config.ts
export default defineNuxtConfig({
  ssr: false
})

托管提供商

Nuxt 可以通过最少的配置部署到多个云提供商:

阅读更多 Deploy.

预设

除了 Node.js 服务器和静态托管服务外,Nuxt 项目还可以使用经过充分测试的预设和最少的配置进行部署。

您可以在 nuxt.config.ts 文件中明确设置所需的预设:

nuxt.config.ts
export default defineNuxtConfig({
  nitro: {
    preset: 'node-server'
  }
})

... 或者在运行 nuxt build 时使用 NITRO_PRESET 环境变量:

终端
NITRO_PRESET=node-server nuxt build

🔎 查看 Nitro 部署 了解所有可能的部署预设和提供商。

CDN 代理

在大多数情况下,Nuxt 可以处理不是由 Nuxt 本身生成或创建的第三方内容。但有时此类内容可能会导致问题,尤其是 Cloudflare 的 "Minification and Security Options"。

因此,您应确保在 Cloudflare 中取消选中/禁用以下选项。否则,不必要的重新渲染或 hydration 错误可能会影响您的生产应用程序。

  1. Speed > Optimization > Content Optimization > 禁用 "Rocket Loader™"
  2. Speed > Optimization > Image Optimization > 禁用 "Mirage"
  3. Scrape Shield > 禁用 "Email Address Obfuscation"

通过这些设置,您可以确保 Cloudflare 不会将可能导致意外副作用的脚本注入到您的 Nuxt 应用程序中。

它们在 Cloudflare 仪表板上的位置有时会发生变化,所以请随时留意。

所有的代码块、Markdown格式、特殊组件(如:read-more、:video-accordion)都已保留原样,仅翻译了文本内容。