+7 (495) 107-75-45 Подключение
+7 (495) 107-75-47 Тех. поддержка 24/7
Пример
01.11.2024

Настройка сервера для Node.js и Express с помощью PM2 и Nginx

Введение

PM2 и Nginx — мощные инструменты для запуска и управления Node.js приложениями в продакшене. PM2 управляет процессами и обеспечивает автоматический перезапуск при сбоях, а Nginx используется как обратный прокси-сервер для распределения трафика и повышения безопасности.

Требования

  • Сервер на Linux.
  • Установленные Node.js и Nginx.

PM2

Шаг 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.

 

nodejs

Шаг 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

Настройка Nginx PM2

Шаг 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. Такая конфигурация обеспечивает стабильность, удобное управление и безопасный доступ к вашему приложению.