Настройка сервера для Node.js и Express с помощью PM2 и Nginx
Введение
PM2 и Nginx — мощные инструменты для запуска и управления Node.js приложениями в продакшене. PM2 управляет процессами и обеспечивает автоматический перезапуск при сбоях, а Nginx используется как обратный прокси-сервер для распределения трафика и повышения безопасности.
Требования
- Сервер на Linux.
- Установленные Node.js и Nginx.
Шаг 1. Установка Node.js и создание Express-приложения
Установка Node.js и npm:
sudo apt update sudo apt install -y nodejs npm
Создание простого Express-приложения:
Создайте новую директорию для приложения и инициализируйте проект:
mkdir my_node_app cd my_node_app npm init -y
Установите Express:
npm install express
Создайте файл app.js
с простым кодом Express-сервера:
// app.js const express = require('express'); const app = express(); const PORT = process.env.PORT || 3000; app.get('/', (req, res) => { res.send('Hello, World!'); }); app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });
Запуск приложения:
node app.js
Приложение будет доступно на http://localhost:3000
.
Шаг 2. Установка и настройка PM2
PM2 управляет процессами Node.js и автоматически перезапускает приложение при его сбое.
Установка PM2:
sudo npm install -g pm2
Запуск приложения с помощью PM2:
pm2 start app.js --name my_node_app
PM2 запустит app.js
как сервис. Используя флаг --name
, можно дать процессу понятное имя.
Добавление PM2 в автозагрузку:
Чтобы PM2 автоматически запускал процессы при перезагрузке сервера, выполните следующую команду:
pm2 startup systemd pm2 save
Основные команды управления PM2:
Проверить статус процессов:
pm2 status
Остановить процесс:
pm2 stop my_node_app
Перезапустить процесс:
pm2 restart my_node_app
Шаг 3. Настройка Nginx как обратного прокси
Nginx будет выступать в качестве обратного прокси для перенаправления HTTP-запросов к приложению Node.js, а также обрабатывать SSL и кэширование, если необходимо.
Установка Nginx (если еще не установлен):
sudo apt install -y nginx
Настройка конфигурации Nginx:
Создайте новый конфигурационный файл для вашего приложения в /etc/nginx/sites-available/
:
# /etc/nginx/sites-available/my_node_app server { listen 80; server_name example.com; # Замените на ваш домен или IP-адрес сервера 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; } }
Активация конфигурации:
Создайте символическую ссылку в sites-enabled
для включения конфигурации:
sudo ln -s /etc/nginx/sites-available/my_node_app /etc/nginx/sites-enabled/
Проверка конфигурации и перезапуск Nginx:
Проверьте конфигурацию на наличие ошибок:
sudo nginx -t
Если ошибок нет, перезапустите Nginx:
sudo systemctl restart nginx
Открытие доступа через брандмауэр (если активирован):
sudo ufw allow 'Nginx Full'
Шаг 4. Тестирование прокси-сервера Nginx
Перейдите в браузере по адресу http://example.com
(замените на ваш домен или IP) и убедитесь, что запросы успешно проходят через Nginx и перенаправляются на ваше Node.js приложение.
Шаг 5. (Опционально) Настройка SSL с помощью Let’s Encrypt
Для обеспечения безопасности рекомендуется настроить HTTPS с помощью Let’s Encrypt.
Установка Certbot:
sudo apt install certbot python3-certbot-nginx
Получение и настройка SSL-сертификата:
Выполните команду для автоматической настройки SSL:
sudo certbot --nginx -d example.com
Certbot автоматически сгенерирует и настроит SSL-сертификат, после чего приложение будет доступно по https://example.com
.
Проверка автоматического обновления:
Certbot автоматически настроит cron-задачу для продления сертификатов. Чтобы вручную проверить продление, можно использовать:
sudo certbot renew --dry-run
Заключение
С этой настройкой Node.js приложение будет надежно запущено под управлением PM2 и защищено обратным прокси-сервером Nginx с поддержкой SSL. Такая конфигурация обеспечивает стабильность, удобное управление и безопасный доступ к вашему приложению.