部署
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 (Process Manager 2) 是一個快速且簡單的解決方案,用於在您的伺服器或 VM 上託管您的 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 模組的多進程效能。
預設情況下,工作負載會使用循環策略分配給 worker。
了解更多
靜態託管
有兩種方法將 Nuxt 應用程式部署到任何靜態託管服務
- 靜態網站生成 (SSG),搭配
ssr: true
在建置時預先渲染應用程式的路由。(這是運行nuxi generate
時的預設行為。)它還將生成/200.html
和/404.html
單頁應用程式後備頁面,這些頁面可以在客戶端上渲染動態路由或 404 錯誤(儘管您可能需要在靜態主機上配置此項)。 - 或者,您可以使用
ssr: false
(靜態單頁應用程式)預先渲染您的網站。這將產生 HTML 頁面,其中包含一個空的<div id="__nuxt"></div>
,您的 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 中取消選取/禁用以下選項。否則,不必要的重新渲染或 hydration 錯誤可能會影響您的生產應用程式。
- Speed > Optimization > Content Optimization > 禁用「Rocket Loader™」
- Speed > Optimization > Image Optimization > 禁用「Mirage」
- Scrape Shield > 禁用「Email Address Obfuscation」
通過這些設定,您可以確保 Cloudflare 不會將腳本注入到您的 Nuxt 應用程式中,這可能會導致不必要的副作用。