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

Введение
Node.js — это свободная платформа на базе движка V8, которая позволяет запускать JavaScript вне браузера. Её используют для создания серверных приложений с низкой задержкой и высокой масштабируемостью. Nginx часто ставят перед Node.js как фронтенд-прокси для обработки TLS, статики и балансировки нагрузки.
Краткие определения:
- Node.js: среда выполнения JavaScript на сервере.
- Nginx: высокопроизводительный веб-сервер и обратный прокси.
- PM2: менеджер процессов для запуска Node.js в фоне.
- NPM: пакетный менеджер для Node.js.
Требования
- Сервер с Debian 10 (buster).
- Доступ root или пользователь с sudo.
- Открытый порт 80 (и 443 при необходимости).
Важно: перед началом рекомендуем выполнить резервную копию и тестировать команды в тестовой среде, если вы работаете в продакшене.
Шаг 1 — Обновление системы
Обновите пакеты и ядро до актуального состояния:
apt-get update -y
apt-get upgrade -yПосле обновления перезагрузите сервер, если обновления это требуют.
Шаг 2 — Установка Node.js (через NodeSource)
В стандартном репозитории Debian 10 может не быть требуемой версии Node.js. Удобный способ — использовать скрипт NodeSource.
Установите curl, если он отсутствует:
apt-get install curl -yЗатем скачайте и выполните установочный скрипт (пример для ветки 12.x):
curl -sL https://deb.nodesource.com/setup_12.x | bash -После этого установите Node.js:
apt-get install nodejs -yПроверьте версии:
nodejs --versionОжидаемый вывод (пример):
v12.16.1Проверьте npm:
npm --versionПример вывода:
6.13.4Примечание: если вы планируете управлять несколькими версиями Node.js, рассмотрите nvm (Node Version Manager) как альтернативу.
Альтернативы установке Node.js
- nvm — удобен для разработки и переключения версий per-user.
- Docker — изолированное окружение, упрощает деплой в контейнерах.
- Официальные пакеты Debian — проще, но могут быть старее.
Шаг 3 — Создание простого Node.js приложения
Создайте директорию для приложения и установите express:
mkdir nodeapp
cd nodeapp
npm install expressСоздайте файл app.js:
nano app.jsВставьте содержимое:
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send("Nginx as Frontend Server for Node.js!");
});
app.listen(8000, '127.0.0.1');Сохраните и закройте редактор. Запустите приложение:
node app.jsВ отдельном терминале проверьте, что приложение слушает на 127.0.0.1:8000:
netstat -antup | grep 8000Пример вывода:
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 26193/nodeПроверьте ответ приложения локально:
curl http://127.0.0.1:8000Ожидаемый вывод:
Nginx as Frontend Server for Node.js!Шаг 4 — Запуск приложения в фоне с PM2
PM2 поможет держать приложение запущенным и восстанавливать его при падениях.
Установите PM2 глобально:
npm install pm2 -gЗапустите приложение через PM2:
cd nodeapp
pm2 start app.jsПример стартового баннера и информации (сокращённый):
[PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /root/nodeapp/app.js in fork_mode (1 instance)
[PM2] Done.Список процессов PM2 покажет PID, статус, время и потребление памяти/CPU.
Сделайте автозапуск PM2 при старте системы:
pm2 startupПример создаваемого systemd-сервиса и команд (в выводе pm2 будет указано, какую команду выполнить, например systemctl enable pm2-root). Затем сохраните список процессов, чтобы PM2 их восстанавливал:
pm2 saveЗапустите сервис systemd, если это требуется:
systemctl start pm2-root
systemctl status pm2-rootПример статуса (сокращённый):
? pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
Active: active (running)Важно: убедитесь, что pm2_home и пути в unit-файле соответствуют вашему пользователю. Для продакшена часто создают systemd-юнит под выделенным системным пользователем, а не root.
Альтернатива PM2: systemd unit для прямого запуска node (проще и надёжней для небольшой инфраструктуры).
Шаг 5 — Установка и настройка Nginx как обратного прокси
Установите Nginx:
apt-get install nginx -yСоздайте конфигурацию виртуального хоста:
nano /etc/nginx/sites-enabled/myapp.confВставьте:
server {
listen 80;
server_name node.myserver.tld;
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
}Сохраните файл и перезапустите Nginx:
systemctl restart nginx
systemctl status nginxПример статуса:
? nginx.service - A high performance web server and a reverse proxy server
Active: active (running)Теперь Nginx принимает внешние запросы и проксирует их на ваш Node.js, который слушает только localhost.

Проверка доступа
Откройте в браузере:
Вы должны увидеть содержимое, которое возвращает ваш Node.js-приложение.
Если используете DNS-имя, убедитесь, что запись A указывает на IP сервера. Для теста можно временно прописать /etc/hosts локально.
Безопасность и рекомендации для продакшена
- TLS: используйте Certbot/LetsEncrypt для SSL и включите 443. Nginx удобно управляет сертификатами.
- Права: не запускайте приложение от root; создайте отдельного пользователя для сервиса.
- Ограничения: примените лимиты systemd и ulimit для процессов.
- Фаервол: закройте прямой доступ к порту 8000/127.0.0.1 он уже локальный; в firewall разрешите только 80/443.
- Логи: настройте логирование и ротацию (logrotate) для /var/log/nginx и PM2-логов.
- Мониторинг: используйте инструменты мониторинга (Prometheus, Grafana, PM2 monit).
Трублешутинг — распространённые проблемы
- «Connection refused» при обращении извне: проверьте что Nginx запущен и server_name/hosts настроены.
- PM2 не восстанавливает процессы после перезагрузки: выполните pm2 save и убедитесь, что systemd-юнит включён (systemctl enable pm2-root).
- Пустой ответ или 502 Bad Gateway: проверьте, что Node.js слушает на том адресе и порту, который указан в proxy_pass, и что нет SELinux/фаервола, блокирующего связь.
- Порт занят: проверьте netstat или ss на предмет процессов, использующих порт.
Критерии приёмки
- Node.js успешно возвращает ожидаемый контент по curl на localhost:8000.
- PM2 показывает приложение в статусе online и процессы сохраняются (pm2 list, pm2 save).
- Nginx отвечает на запросы по домену и проксирует их на Node.js (curl http://node.myserver.tld).
- При рестарте сервера приложение автоматически поднимается.
Мини-методология развёртывания (быстрое руководство)
- Обновить систему.
- Установить Node.js (NodeSource или nvm).
- Развернуть приложение, пройти smoke-тесты локально.
- Запустить приложение через PM2 или systemd.
- Настроить Nginx как обратный прокси и SSL.
- Настроить мониторинг и бэкапы конфигураций.
Чек-лист по ролям
- DevOps / Системный администратор:
- Установил Node.js и Nginx; настроил firewall и TLS.
- Настроил автозапуск PM2/systemd, логирование и мониторинг.
- Разработчик:
- Подготовил package.json, проверил работу в localhost.
- Предоставил инструкции для запуска и переменных окружения.
- Менеджер проекта:
- Утвердил политику восстановления после падения и время отклика SLA.
Когда этот подход не подходит
- Большое микросервисное окружение — лучше использовать балансировщик и контейнеризацию (Kubernetes).
- Нужна строгая изоляция — предпочтительно Docker/VM.
Миграция и совместимость
- При переходе на Debian 11 или более новые версии Node.js проверьте совместимость зависимостей.
- При обновлении Node.js используйте nvm или проводите миграцию через тестовый деплой.
Заключение
Вы научились устанавливать Node.js на Debian 10, запускать приложение через PM2 и настраивать Nginx как фронтенд-прокси. Этот набор шагов обеспечивает простую и надёжную схему развертывания для небольших и средних сервисов. Для продакшена дополнительно настройте TLS, мониторинг, ротацию логов и процедуры отката.
Ключевые команды и конфигурации в статье пригодны для быстрого старта и дальнейшей адаптации под ваши требования.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента