Главная
|
Услуги и цены
VDS
Выделенные серверы
Размещение сервера
|
F.A.Q
|
О компании
|

Развёртывание сайта на Node.js с использованием PM2 и Nginx на CentOS

Использование VDS (виртуального выделенного сервера) даёт множество преимуществ для проектов на Node.js:

  1. Гибкость — полный контроль над сервером позволяет самостоятельно выбирать версии Node.js, баз данных и других компонентов.
  2. Производительность — ресурсы сервера не делятся с другими пользователями, как на shared-хостинге.
  3. Безопасность — можно самостоятельно настроить файрвол, SSH и другие механизмы защиты.
  4. Масштабируемость — при росте нагрузки легко увеличить ресурсы сервера.
  5. Надёжность — PM2 автоматически перезапускает приложение при сбоях, а Nginx принимает внешние подключения и передаёт их Node.js.

В этой статье разберём полный процесс развёртывания Node.js-приложения на CentOS с использованием PM2 и Nginx.

  • Шаг 1. Подготовка сервера
  • Шаг 2. Установка Node.js
  • Шаг 3. Развёртывание Node.js-приложения
  • Шаг 4. Установка PM2
  • Шаг 5. Установка Nginx
  • Шаг 6. Настройка обратного прокси
  • Шаг 7. Настройка Firewall
  • Шаг 8. Настройка SELinux
  • Шаг 9. Установка HTTPS
  • Полезные советы
  • Итог

Шаг 1. Подготовка сервера

Если сервер только куплен:

  • Подключитесь к серверу
  • Выполните подготовку сервера к работе

Обновляем систему.

Если вы работаете от пользователя root, команды можно выполнять без sudo.

sudo dnf upgrade -y

Шаг 2. Установка Node.js

Устанавливаем необходимые утилиты:

sudo dnf install curl git -y

Затем устанавливаем NVM:

curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash

source ~/.bashrc

Устанавливаем последнюю LTS-версию Node.js:

nvm install --lts

Проверяем установку:

node -v
npm -v

Если отображаются версии, установка завершена успешно.

Проверка установки Node.js на CentOS

Шаг 3. Развёртывание Node.js-приложения

Создаём каталог проекта:

mkdir -p ~/nodeapp

cd ~/nodeapp

Создаём файл:

nano server.js

Добавляем простой HTTP-сервер:

const http = require("http");

const port = 3000;

const server = http.createServer((req, res) => {
    res.writeHead(200, {
        "Content-Type": "text/plain"
    });

    res.end("Hello, Node.js on CentOS!");
});

server.listen(port, () => {
    console.log(`Server started on port ${port}`);
});

Инициализируем проект:

npm init -y

При необходимости устанавливаем зависимости:

npm install express

Откройте порт, если он закрыт

firewall-cmd --permanent --add-port=3000/tcp  
firewall-cmd --reload

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

node server.js
Запуск Node.js-приложения на CentOS

Теперь приложение доступно по адресу:

http://IP_сервера:3000
Node.js-приложение на CentOS

Шаг 4. Установка PM2

PM2 используется для управления Node.js-приложениями.

Устанавливаем:

npm install -g pm2

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

pm2 start server.js --name nodeapp
Запуск Node.js-приложения через PM2

Проверяем список процессов:

pm2 list

Сохраняем конфигурацию:

pm2 save

Настраиваем автозапуск:

pm2 startup

Если PM2 выведет команду вида:

sudo env PATH=...

Скопируйте и выполните её.

После этого приложение будет автоматически запускаться после перезагрузки сервера.

Для остановки приложения:

pm2 stop nodeapp

Шаг 5. Установка Nginx

Если Nginx ещё не установлен:

sudo dnf install nginx -y

Запускаем его:

sudo systemctl enable --now nginx

Подробнее про настройку можно прочитать в отдельной статье: https://62yun.ru/blog/article/centos_nginx

Шаг 6. Настройка обратного прокси

Создаём конфигурационный файл:

cat > /etc/nginx/conf.d/nodeapp.conf << 'EOF'
server {
    listen 80;
    server_name 147.45.113.2; # замените ip на свой ip или домен

    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_cache_bypass $http_upgrade;
    }
}
EOF

Проверяем конфигурацию:

sudo nginx -t

Если ошибок нет:

sudo systemctl reload nginx

Теперь приложение будет доступно по адресу:

http://yourdomain.com

или

http://IP_сервера

без указания порта.

Если не доступен, то вы можете посмотреть логи или перейти к пункту SELinux

Шаг 7. Настройка Firewall

Если используется firewalld, разрешаем HTTP и HTTPS:

sudo firewall-cmd --permanent --add-service=http

sudo firewall-cmd --permanent --add-service=https

sudo firewall-cmd --reload

Шаг 8. Настройка SELinux

Если SELinux работает в режиме Enforcing, необходимо разрешить Nginx подключаться к Node.js.

Проверяем состояние:

getenforce

Разрешаем соединения:

sudo setsebool -P httpd_can_network_connect 1

Без этого Nginx не сможет подключаться к приложению через proxy_pass.

Шаг 9. Установка HTTPS

Если используется домен, установите Certbot:

sudo dnf install certbot python3-certbot-nginx -y

Получаем сертификат:

sudo certbot --nginx

Проверяем автоматическое продление:

sudo certbot renew --dry-run

После этого сайт станет доступен по HTTPS.

Полезные советы

Просмотр логов PM2

pm2 logs

Перезапуск приложения

pm2 restart nodeapp

Мониторинг ресурсов

pm2 monit

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

pm2 restart nodeapp

или запуск в режиме наблюдения:

pm2 start server.js --watch

Итог

В результате мы получили полноценное окружение для Node.js на CentOS:

  • Node.js запускает приложение;
  • PM2 автоматически следит за процессом и перезапускает его при сбоях;
  • Nginx принимает HTTP- и HTTPS-запросы и передаёт их приложению;
  • firewalld разрешает внешние подключения;
  • SELinux корректно настроен для работы обратного прокси;
  • Let's Encrypt обеспечивает безопасное HTTPS-соединение.

Такой вариант подходит как для небольших сайтов, так и для продакшн-развёртывания более крупных Node.js-приложений.

Ознакомиться с тарифами на VDS можно здесь: https://62yun.ru/index/vps

logo
© 2022 62yun
Все права защищены
vk.com/62yuncom
support@62yun.ru
logo
vk.com/62yuncom
support@62yun.ru
Услуги
VDS Выделенные серверы
Полезное
F.A.Q О компании Политика конфиденциальности Оферта
Способы оплаты
wechatpay visa mastercard
MirAccept
Партнеры
25port
© 2022 62yun Все права защищены
ВВЕРХ