部署
Nuxt 应用可以部署在 Node.js 服务器上,预渲染为静态托管,或者部署到无服务器或边缘 (CDN) 环境中。
Node.js 服务器
了解带有 Nitro 的 Node.js 服务器预设,以便在任何 Node 托管上进行部署。
- 默认输出格式(如果未指定或自动检测)
- 仅加载所需的块以渲染请求,优化冷启动时间
- 对于将 Nuxt 应用部署到任何 Node.js 托管非常有用
入口点
当使用 Node 服务器预设运行 nuxt build
时,结果将是一个入口点,可启动一个准备好的 Node 服务器。
node .output/server/index.mjs
这将启动你的生产 Nuxt 服务器,默认在 3000 端口上监听。
它遵循以下运行时环境变量:
NITRO_PORT
或PORT
(默认为3000
)NITRO_HOST
或HOST
(默认为'0.0.0.0'
)NITRO_SSL_CERT
和NITRO_SSL_KEY
- 如果两者都存在,这将以 HTTPS 模式启动服务器。在绝大多数情况下,这不应用于其他用途,Nitro 服务器应在反向代理(如 nginx 或 Cloudflare)后运行,以终止 SSL。
PM2
PM2(进程管理器 2)是一个快速且简单的解决方案,用于在你的服务器或虚拟机上托管你的 Nuxt 应用。
要使用 pm2
,请使用 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 模块的多进程性能。
默认情况下,工作负载通过轮询策略分配给工作进程。
了解更多
静态托管
有两种方法可以将 Nuxt 应用部署到任何静态托管服务:
- 使用
ssr: true
进行静态站点生成 (SSG),在构建时预渲染你的应用的路由。(这是运行nuxi generate
时的默认行为。)它还会生成/200.html
和/404.html
单页面应用回退页面,可以在客户端渲染动态路由或 404 错误(尽管你可能需要在静态主机上配置此项)。 - 或者,你可以使用
ssr: false
来预渲染你的网站(静态单页面应用)。这将生成包含空的<div id="__nuxt"></div>
的 HTML 页面,通常你的 Vue 应用会在此处渲染。你将失去很多预渲染网站的 SEO 优势,因此建议使用<ClientOnly>
来包装那些不能被服务器渲染的部分(如果有的话)。
仅客户端渲染
如果你不想预渲染你的路由,使用静态托管的另一种方法是在 nuxt.config
文件中将 ssr
属性设置为 false
。nuxi generate
命令将输出一个 .output/public/index.html
入口点和 JavaScript 打包,就像经典的客户端 Vue.js 应用一样。
export default defineNuxtConfig({
ssr: false
})
托管提供商
Nuxt 可以部署到多个云提供商,只需最少的配置:
预设
除了 Node.js 服务器和静态托管服务外,Nuxt 项目还可以使用几种经过充分测试的预设和最少的配置进行部署。
你可以在 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 的“压缩和安全选项”。
因此,你应该确保在 Cloudflare 中选中的以下选项已取消检查/禁用。否则,不必要的重新渲染或水合错误可能会影响你的生产应用。
- 速度 > 优化 > 内容优化 > 禁用 "Rocket Loader™"
- 速度 > 优化 > 图片优化 > 禁用 "Mirage"
- 抓取保护 > 禁用 "电子邮件地址模糊化"
通过这些设置,你可以确保 Cloudflare 不会在你的 Nuxt 应用中注入可能导致不必要副作用的脚本。