Развёртывание
Приложение Nuxt можно развернуть на Node.js-сервере, пререндерить для статического хостинга или выложить в serverless/edge (CDN).
Node.js-сервер
Пресет Node.js в Nitro позволяет развернуть приложение на любом Node-хостинге.
- Формат по умолчанию, если другой не задан и не определён автоматически
- Подгружаются только нужные чанки для обработки запроса — быстрый cold start
- Подходит для развёртывания Nuxt на любом Node.js-хостинге
Точка входа
После nuxt build с пресетом Node результат — готовый к запуску сервер:
node .output/server/index.mjs
Сервер по умолчанию слушает порт 3000.
Учитываются переменные окружения:
NITRO_PORTилиPORT(по умолчанию3000)NITRO_HOSTилиHOST(по умолчанию'0.0.0.0')NITRO_SSL_CERTиNITRO_SSL_KEY— при наличии обоих сервер запускается в HTTPS. В большинстве случаев лучше не использовать и держать Nitro за reverse proxy (nginx, Cloudflare), который завершает SSL.
PM2
PM2 — удобный вариант для запуска Nuxt на своём сервере или VM.
Пример ecosystem.config.cjs:
module.exports = {
apps: [
{
name: 'NuxtAppName',
port: '3000',
exec_mode: 'cluster',
instances: 'max',
script: './.output/server/index.mjs',
},
],
}
Режим cluster
Переменная NITRO_PRESET=node_cluster включает многопроцессный режим через cluster Node.js.
По умолчанию нагрузка распределяется между воркерами по round robin.
Дополнительно
Статический хостинг
Развернуть Nuxt на статическом хостинге можно двумя способами:
- SSG с
ssr: true— маршруты пререндерятся при сборке (поведение по умолчанию приnuxt generate). Также генерируются fallback-страницы/200.htmlи/404.htmlдля SPA (динамические маршруты и 404 на клиенте; настройка может потребоваться на стороне хостинга). - С
ssr: false— статическое SPA: HTML с пустым<div id="__nuxt"></div>, куда монтируется Vue. Многие преимущества пререндеринга для SEO теряются; лучше оставить SSR и оборачивать только несовместимые с сервером части в<ClientOnly>.
Только клиентский рендеринг
Если не нужен пререндеринг, в nuxt.config можно задать ssr: false. Тогда nuxt generate создаст .output/public/index.html и JS-бандлы как у классического клиентского Vue-приложения.
export default defineNuxtConfig({
ssr: false,
})
Провайдеры хостинга
Nuxt можно развернуть у многих облачных провайдеров с минимальной настройкой:
Пресеты
Кроме Node.js и статики, Nuxt поддерживает ряд пресетов с минимальной конфигурацией.
Пресет задаётся в nuxt.config.ts:
// @errors: 2353
export default defineNuxtConfig({
nitro: {
preset: 'node-server',
},
})
…или переменной окружения при nuxt build:
NITRO_PRESET=node-server nuxt build
Список пресетов и провайдеров: Nitro deployment.
Прокси и CDN
Обычно Nuxt нормально работает с контентом от сторонних сервисов. Но некоторые настройки (например «Minification and Security» в Cloudflare) могут ломать приложение.
В Cloudflare рекомендуется отключить:
- Speed > Optimization > Content Optimization — выключить «Rocket Loader™»
- Speed > Optimization > Image Optimization — выключить «Mirage»
- Scrape Shield — выключить «Email Address Obfuscation»
Так Cloudflare не будет внедрять скрипты в Nuxt и вызывать лишний ре-рендер или ошибки гидрации.