Как установить Node.js в Debian 12 и запустить Next.js приложение?

1. Установка Node.js 22.x LTS

Рекомендую установить через NodeSource репозиторий для получения актуальной версии:

# Обновляем систему
sudo apt update && sudo apt upgrade -y

# Устанавливаем необходимые пакеты
sudo apt install -y curl software-properties-common

# Добавляем NodeSource репозиторий для Node.js 22.x
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -

# Устанавливаем Node.js
sudo apt install -y nodejs

# Проверяем версии
node --version  # должно показать v22.x.x
npm --version

Альтернативный способ через NVM (Node Version Manager)

Если хотите иметь возможность легко переключаться между версиями Node.js:

# Устанавливаем NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

# Перезагружаем shell или выполняем
source ~/.bashrc

# Устанавливаем Node.js 22 LTS
nvm install --lts
nvm use --lts
nvm alias default lts/*

# Проверяем
node --version  # покажет v22.x.x

Node.js 22 LTS имеет ряд преимуществ:

  • Улучшенная производительность
  • Встроенная поддержка WebSocket клиента
  • Улучшенная поддержка ESM модулей
  • Обновлённый V8 движок
  • Поддержка до апреля 2027 года

2. Установка PM2 (менеджер процессов)

PM2 — это специальная программа, которая следит за работой вашего Node.js приложения на сервере. Представьте её как надёжного администратора, который работает круглосуточно и следит, чтобы ваш сайт всегда оставался доступным.

Основная проблема

Когда вы запускаете Node.js приложение обычным способом, оно работает только пока открыт терминал. Стоит закрыть окно терминала или разорвать SSH-соединение — приложение останавливается. Если приложение падает из-за ошибки, оно не перезапускается самостоятельно. После перезагрузки сервера приложение не запустится автоматически — нужно вручную подключаться и запускать его снова.

Что делает PM2

PM2 решает все эти проблемы. Он запускает ваше приложение в фоновом режиме и постоянно следит за его состоянием. Если приложение упадёт из-за ошибки, PM2 моментально его перезапустит. При перезагрузке сервера PM2 автоматически запустит все необходимые приложения без вашего участия.

Кроме базового функционала «держать приложение живым», PM2 предоставляет удобные инструменты для production-окружения: ведение логов, мониторинг потребления памяти и процессора, возможность запуска нескольких экземпляров приложения для распределения нагрузки, обновление кода без остановки сервиса.

Почему это важно

Для production-сервера критически важна стабильность и непрерывность работы. PM2 обеспечивает эту стабильность, автоматизируя рутинные задачи администрирования Node.js приложений. Это стандартный инструмент в индустрии — практически каждый Node.js проект в production использует PM2 или аналогичные решения.

В контексте Next.js приложения PM2 особенно полезен, так как позволяет эффективно использовать серверные ресурсы, автоматически перезапускать приложение при обновлениях и вести подробные логи работы приложения, что упрощает отладку и мониторинг.

sudo npm install -g pm2

3. Создание Next.js приложения

# Создаём директорию для проекта
mkdir -p /var/www/nextjs-app
cd /var/www/nextjs-app

# Создаём новое Next.js приложение
npx create-next-app@latest

# Устанавливаем зависимости
npm install

# Собираем production версию
npm run build

4. Настройка PM2 для Next.js

Создайте файл ecosystem.config.js в корне проекта:

module.exports = {
  apps: [{
    name: 'nextjs-app',
    script: 'npm',
    args: 'start',
    cwd: '/var/www/nextjs-app',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }]
}

Запустите приложение:

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

# Сохраняем конфигурацию PM2
pm2 save

# Настраиваем автозапуск при перезагрузке
pm2 startup systemd -u $USER --hp /home/$USER

Если всё сделано правильно, то вы увидите в консоли это:

image 2

В процессе PM2 сгенерирует команду, которую нужно выполнить. Скопируйте и выполните эту команду:

sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ВАШ_ЮЗЕР --hp /home/ВАШ_ЮЗЕР

5. Настройка nginx для проксирования

Создайте конфигурационный файл для вашего сайта:

sudo nano /etc/nginx/sites-available/nextjs-app

Добавьте следующую конфигурацию:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;  # Замените на ваш домен

    # Максимальный размер загружаемых файлов
    client_max_body_size 20M;

    # Gzip сжатие
    gzip on;
    gzip_comp_level 5;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # Проксирование на Next.js
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        
        # Дополнительные заголовки
        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_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        
        # Таймауты
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }

    # Кеширование статических файлов Next.js
    location /_next/static {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        
        # Кеширование на 1 год
        add_header Cache-Control "public, max-age=31536000, immutable";
    }
}

6. Активация конфигурации

# Создаём символическую ссылку
sudo ln -s /etc/nginx/sites-available/nextjs-app /etc/nginx/sites-enabled/

# Проверяем конфигурацию
sudo nginx -t

# Перезапускаем nginx
sudo systemctl reload nginx

7. Настройка SSL (опционально, но рекомендуется)

# Устанавливаем Certbot
sudo apt install -y certbot python3-certbot-nginx

# Получаем SSL сертификат
sudo certbot --nginx -d example.com -d www.example.com

# Автообновление сертификатов уже настроено автоматически

Теперь ваш Next.js сайт должен быть доступен по адресу вашего домена. Next.js будет работать на порту 3000, а nginx будет проксировать все запросы к нему.

Полезные команды для управления

# PM2 команды
pm2 status          # Статус приложений
pm2 logs           # Логи
pm2 restart all    # Перезапуск
pm2 monit          # Мониторинг

# Просмотр логов nginx
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

# Перезапуск после изменений в коде
cd /var/www/nextjs-app
git pull           # Если используете git
npm install        # Если изменились зависимости
npm run build      # Пересборка
pm2 restart nextjs-app
, ,

© «Code==Poetry», 2025