Перейти к основному содержанию

VPS для Node.js и Next.js: деплой, PM2, Nginx — полный гайд 2026

Как задеплоить Node.js и Next.js на VPS в 2026: установка, PM2, Nginx reverse proxy, Docker, оптимизация. Требования к серверу и сравнение провайдеров.

VPS для Node.js и Next.js 2026: полный гайд по деплою с PM2, Nginx reverse-proxy, Docker и оптимизацией производительности

Почему Node.js и Next.js требуют VPS

Node.js и Next.js — серверные технологии, которые требуют постоянно работающий процесс. В отличие от PHP, где каждый запрос обрабатывается отдельным процессом, Node.js запускает долгоживущий event loop. Shared-хостинг не поддерживает эту модель — нужен VPS с root-доступом и возможностью запуска фоновых процессов.

Next.js в режиме SSR (Server-Side Rendering) требует Node.js сервер для рендеринга страниц на лету. Даже в режиме SSG (Static Site Generation) для ISR (Incremental Static Regeneration) нужен серверный процесс. App Router — основной роутер Next.js: стабильным он стал в версии 13.4.

Когда VPS обязателен

  • SSR/ISR приложения — Next.js с server-side rendering требует Node.js процесс 24/7.
  • WebSocket/real-time — чаты, уведомления, Socket.io работают только на VPS с постоянным процессом.
  • Кастомный бэкенд — Express, Fastify, NestJS API серверы.
  • Очереди и воркеры — BullMQ, agenda.js для фоновых задач.
  • SSG с частым ребилдом — Astro, Next.js static export с CI/CD pipeline.
Node.js production stack 2026: Node.js app → PM2 cluster 4x → Nginx reverse proxy → Client с HTTP/2 и zero-downtime
Архитектура Node.js в продакшене на VPS: PM2 cluster, Nginx reverse-proxy, HTTP/2 и zero-downtime перезапуск

Минимальные требования VPS для Node.js

Лёгкое API или статический сайт

  • CPU: 1 vCPU
  • RAM: 2 ГБ
  • Диск: 20 ГБ NVMe SSD
  • Node.js 22 или 24 LTS (у 20-й поддержка закончилась 30 апреля 2026 года)
  • Цена: от 499 ₽ при оплате за месяц — AdminVPS Promo

Среднее SSR-приложение

  • CPU: 2-4 vCPU
  • RAM: 4-8 ГБ
  • Диск: 40-80 ГБ NVMe SSD
  • PM2 для кластеризации
  • Redis для кеширования
  • Цена: от 899 ₽ при оплате за месяц — AdminVPS Micro (2 ядра, 4 ГБ, 60 ГБ); с запасом — Start за 1 289 ₽ при оплате за месяц

Нагруженный Next.js

  • CPU: 8+ vCPU
  • RAM: 16+ ГБ
  • Диск: 100+ ГБ NVMe SSD
  • Docker + Load Balancer
  • CDN для статики (Brotli/gzip)
  • Цена: от 3 379 ₽ при оплате за месяц — AdminVPS Pro: 8 ядер 3,6 ГГц, 16 ГБ RAM, 160 ГБ NVMe

Рекомендуемые провайдеры: Timeweb Cloud — от 900 ₽/мес при оплате за год, с NVMe и Node.js в один клик. AdminVPS — помесячные тарифы с открытым прайсом. Почасовой оплаты у него нет: страница про неё на сайте провайдера есть, но сама услуга там помечена как находящаяся в разработке (проверено 11.09.2026).

Реклама · ООО «Админвпс»

AdminVPS Promo — 499 ₽ при оплате за месяц

1 ядро 3,6 ГГц, 2 ГБ RAM, 30 ГБ NVMe, канал 1 Гбит/с и 3 ТБ включённого трафика с расширением до 35 ТБ. Резервные копии еженедельные и входят в тариф; панель ispmanager бесплатна первый месяц по промокоду провайдера, дальше оплачивается отдельно. Этого хватает лёгкому API и SSG; под SSR с тысячами запросов в минуту берите Start за 1 289 ₽ при оплате за месяц.

Год −15 %

Промокод EASYLINK — скидка 60 % на первый месяц при оплате за 1 месяц, кроме тарифов Lite.

Смотреть тариф Promo →

Установка Node.js на VPS

Рекомендуется устанавливать Node.js через NVM (Node Version Manager) — это позволяет легко переключаться между версиями.

Установка через NVM

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
source ~/.bashrc

# Установка LTS версии
nvm install 22
nvm use 22
nvm alias default 22
node --version  # v22.x.x
npm --version

Альтернатива: NodeSource

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install nodejs -y

Установка pnpm (рекомендуется для Next.js)

npm install -g pnpm
pnpm --version

Деплой Next.js приложения на VPS

Клонирование и сборка

# Создаём директорию
sudo mkdir -p /var/www/myapp
sudo chown $USER:$USER /var/www/myapp
cd /var/www/myapp

# Клонируем репозиторий
git clone https://github.com/user/myapp.git .

# Устанавливаем зависимости и собираем
pnpm install --frozen-lockfile
pnpm build

Запуск в production

# Прямой запуск (для теста)
NODE_ENV=production pnpm start

# Или через next start с указанием порта
npx next start -p 3000

Переменные окружения

# /var/www/myapp/.env.production
NODE_ENV=production
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
NEXTAUTH_SECRET=your-secret-key
NEXT_PUBLIC_API_URL=https://api.example.com
Next.js 2026: SSR (PM2+Nginx) vs SSG (CDN) vs ISR — сравнение Pros/Cons для Dynamic, Static, Hybrid и Edge-рендеринга
Сравнение режимов деплоя Next.js на VPS: SSR, SSG и ISR — три сценария с разными плюсами и минусами

PM2: управление Node.js процессами

PM2 — менеджер процессов Node.js для production. Автоматический перезапуск при падении, кластерный режим для использования всех ядер CPU, мониторинг и логирование.

# Установка PM2
npm install -g pm2

# Запуск Next.js через PM2
pm2 start npm --name "myapp" -- start

# Или через ecosystem-файл — он ниже

ecosystem.config.js

// ecosystem.config.js
module.exports = {
  apps: [{
    name: 'myapp',
    script: 'node_modules/next/dist/bin/next',
    args: 'start -p 3000',
    cwd: '/var/www/myapp',
    instances: 'max', // Кластер на все ядра
    exec_mode: 'cluster',
    max_memory_restart: '512M',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
};

Путь — к самому файлу next, а не к node_modules/.bin/next. При pnpm в .bin лежит shell-обёртка, PM2 запускает её через node, и оба процесса сразу уходят в состояние errored — так было на нашей проверке. Путь node_modules/next/dist/bin/next работает и с npm, и с pnpm.

# Запуск через ecosystem
pm2 start ecosystem.config.js

# Автозапуск при перезагрузке VPS
pm2 startup
pm2 save

# Мониторинг
pm2 monit
pm2 logs myapp --lines 50

Кластерный режим (instances: 'max') запускает по одному процессу на каждое ядро CPU. На 4 vCPU VPS это даёт 4 воркера.

Nginx как reverse proxy для Node.js

Nginx стоит перед Node.js как reverse proxy: обрабатывает SSL, раздаёт статику, балансирует нагрузку и защищает от медленных клиентов.

Сначала поставьте Nginx — в разделах выше его установки нет:

sudo apt install nginx -y

Порядок с сертификатом. Блок на 443 в полном конфиге ниже ссылается на сертификат Let's Encrypt, которого до выпуска нет, и nginx -t падает с ошибкой «cannot load certificate». Поэтому сначала включите блок только на 80 — без перенаправления на https, с теми же location:

# /etc/nginx/sites-available/myapp — шаг 1, пока сертификата нет
server {
    listen 80;
    server_name example.com www.example.com;

    location /_next/static/ {
        alias /var/www/myapp/.next/static/;
        expires 365d;
        add_header Cache-Control "public, immutable";
    }

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

Проверьте nginx -t и перезагрузите Nginx, выпустите сертификат — порядок в статье о сертификате Let's Encrypt для Nginx, — и только после этого переходите на полный конфиг:

# /etc/nginx/sites-available/myapp
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # Статика Next.js (кеш на год)
    location /_next/static/ {
        alias /var/www/myapp/.next/static/;
        expires 365d;
        add_header Cache-Control "public, immutable";
    }

    # Отдельный блок для public/ не нужен: Next.js отдаёт эти файлы
    # с корня сайта (/favicon.ico), их проксирует location / ниже

    # Проксирование к Node.js
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Nginx раздаёт статику (_next/static/) напрямую без обращения к Node.js — это снижает нагрузку на сервер и ускоряет загрузку страниц.

Docker для Node.js и Next.js на VPS

Docker изолирует приложение и упрощает деплой. Для Next.js рекомендуется multi-stage сборка для минимального размера образа.

Dockerfile для Next.js

Нужна строка output: 'standalone' в next.config.ts или next.config.js: Dockerfile ниже копирует каталог .next/standalone, а Next.js создаёт его только с этой настройкой (так в документации Next.js; сборку образа на стенде мы не запускали).

// next.config.ts — добавить в объект настроек
output: 'standalone',
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN corepack enable && pnpm install --frozen-lockfile

FROM node:22-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN corepack enable && pnpm build

FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]

docker-compose.yml

services:
  app:
    build: .
    ports:
      - "127.0.0.1:3000:3000"   # только для Nginx на этом же сервере
    environment:
      - NODE_ENV=production
      - DATABASE_URL=${DATABASE_URL}
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000"]
      interval: 30s
      timeout: 10s
      retries: 3

Next.js standalone output (output: 'standalone' в next.config.js) создаёт минимальный сервер со всеми нужными файлами — ставить node_modules в образ не нужно, и он получается заметно меньше.

Оптимизация производительности

Node.js tuning

# Увеличение лимита памяти V8
NODE_OPTIONS="--max-old-space-size=4096" pm2 start ecosystem.config.js

# UV_THREADPOOL_SIZE для I/O операций
UV_THREADPOOL_SIZE=16 node server.js

Next.js оптимизация

  • output: 'standalone' в next.config.js — минимальный production build
  • Image Optimization: sharp + loader: 'custom' для CDN
  • ISR (revalidate: 60) — кеширование страниц на 60 секунд
  • React Server Components — меньше JavaScript на клиенте
  • next/dynamic для lazy loading тяжёлых компонентов

Redis для кеширования

# Установка Redis
sudo apt install redis-server
sudo systemctl enable redis-server

В коде Next.js — через пакет ioredis:

import Redis from 'ioredis';
const redis = new Redis();

// Кеширование результатов API
const cached = await redis.get('products');
if (cached) return JSON.parse(cached);
const data = await db.query('SELECT * FROM products');
await redis.set('products', JSON.stringify(data), 'EX', 300);

Redis рядом с Node.js съедает память отдельно от приложения: под сессии и кэш закладывайте минимум 512 МБ сверх того, что нужно самому процессу. Конфигурации с запасом под связку — в подборке серверы под Redis.

Восемь настроек Node.js на VPS: кластерный режим PM2, HTTP/2 и Brotli, кэш ISR у Next.js, обратный прокси-кэш Nginx, сессии в Redis, WebP и AVIF
Восемь параметров ускорения Node.js и Next.js на VPS: PM2, HTTP/2, ISR, Nginx-кэш, Redis, WebP, Edge, zero-downtime

Проверка на сервере 12.10.2026: что работает по шагам

Наш замер 12.10.2026. На чистом сервере Timeweb Cloud (2 vCPU, 2 ГБ памяти) с Ubuntu 24.04.5 мы прошли разделы статьи по порядку: Node.js 22 из NodeSource, pnpm, свежее приложение create-next-app на Next.js 16.4.0. Установка зависимостей заняла 10 секунд, сборка — 18 секунд; node_modules — 468 МБ, каталог .next — 33 МБ.

  • PM2 с прежним ecosystem.config.js приложение не запустил: оба процесса в состоянии errored, страница не открывалась. С путём node_modules/next/dist/bin/next (исправлено выше) страница отвечает 200, два процесса next-server занимают около 131 МБ памяти каждый.
  • Nginx на чистой Ubuntu не установлен, а статья его не ставила — команда добавлена.
  • Полный конфиг с блоком на 443 до выпуска сертификата ронял nginx -t — добавлен порядок через блок на 80. С ним страница через Nginx отвечает 200, статика _next/static отдаётся напрямую.

Чего проверка не показывает: Docker-сборку образа, выпуск сертификата (нужен свой домен) и работу под нагрузкой. Вместо git clone вашего репозитория — пустое приложение create-next-app, а не ваш проект.

Заключение

Деплой Node.js и Next.js на VPS — стандартный подход для production-проектов в 2026 году. PM2 обеспечивает надёжность и кластеризацию, Nginx — SSL и раздачу статики, Docker — воспроизводимость окружения. Для начала достаточно VPS с 2 ядрами и 4 ГБ памяти — это AdminVPS Micro за 899 ₽/мес при оплате за месяц.

Сравните VPS-провайдеров с поддержкой Node.js на EasyLinkLife — актуальные цены, NVMe-диски и отзывы в одном месте.

Реклама · АО «ТаймВэб»

Облачный VPS для Next.js

Timeweb Cloud: образ с Node.js в маркетплейсе и почасовая оплата. MSK 40 — 1 000 ₽/мес при оплате за месяц или 900 ₽/мес при оплате за 12 месяцев.

Попробовать Timeweb Cloud

Реклама · ООО «Админвпс»

AdminVPS 5,0 ГГц — под серверный рендеринг

Для SSR важна частота одного ядра: у AdminVPS есть линейка 5,0 ГГц на Intel Xeon E и Core i9. Тариф Start — 4 ГБ RAM и 80 ГБ NVMe за 1 699 ₽/мес при помесячной оплате.

Промокод EASYLINK — скидка 60 % на первый месяц при оплате за 1 месяц, кроме тарифов Lite.

Выбрать тариф AdminVPS

Реклама · ООО «Админвпс»

AdminVPS — сервер под Node.js и Next.js

Node.js ставится из каталога приложений, PM2 — одной командой npm. Под рабочий проект берите Micro — 899 ₽/мес при помесячной оплате за 2 vCPU, 4 ГБ RAM и 60 ГБ NVMe.

Промокод EASYLINK — скидка 60 % на первый месяц при оплате за 1 месяц, кроме тарифов Lite.

Выбрать тариф AdminVPS

Частые вопросы

Какой VPS нужен для Next.js SSR?

Минимум 2 vCPU и 4 ГБ RAM для среднего SSR-приложения. PM2 в кластерном режиме использует все ядра CPU. Это AdminVPS Micro за 899 ₽/мес при оплате за месяц; на Promo за 499 ₽ — одно ядро и 2 ГБ — поместится лёгкое API или статический сайт.

PM2 или Docker для Node.js на VPS?

PM2 проще и подходит для одного приложения. Docker лучше для нескольких сервисов и CI/CD. Можно комбинировать: Docker для изоляции, PM2 внутри контейнера.

Нужен ли Nginx для Node.js?

Да. Nginx как reverse proxy: обрабатывает SSL, раздаёт статику без нагрузки на Node.js, защищает от медленных клиентов и позволяет ограничить частоту запросов.

Как обновить Node.js приложение без простоя?

PM2 reload: pm2 reload myapp обновляет процессы по одному (zero-downtime). С Docker: docker compose up -d --no-deps --build app.

Next.js standalone vs обычный build?

Standalone (output: 'standalone') собирает минимальный сервер со всеми нужными файлами — ставить node_modules не нужно, образ получается заметно меньше. Рекомендуется для Docker и production.

Можно ли хостить Next.js на shared-хостинге?

Только SSG (Static Export). SSR/ISR требуют постоянный Node.js процесс — нужен VPS. Экспорт: output: 'export' в next.config.js и next build — команду next export убрали в Next.js 14.

VPS для Node.js с NVMe

Выбрать VPS для Node.js

Ссылки на провайдеров в этом материале партнёрские: если вы оформите услугу, мы получим комиссию. На цену для вас это не влияет. Подробнее

Об авторе

Логотип EasyLinkLife

Редакция EasyLinkLife

Редакция EasyLinkLife сверяет цены, состав тарифов и условия оплаты российских хостинг-провайдеров по их первоисточникам.

Проверено: Редакция EasyLinkLife | Обновлено: 12 октября 2026 г.

Полезные материалы