Использование VDS (виртуального выделенного сервера) даёт множество преимуществ для проектов на Node.js:
В этой статье разберём полный процесс развёртывания Node.js-приложения на CentOS с использованием PM2 и Nginx.
Если сервер только куплен:
Обновляем систему.
Если вы работаете от пользователя root, команды можно выполнять без sudo.
sudo dnf upgrade -y
Устанавливаем необходимые утилиты:
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
Если отображаются версии, установка завершена успешно.
Создаём каталог проекта:
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
Теперь приложение доступно по адресу:
http://IP_сервера:3000
PM2 используется для управления Node.js-приложениями.
Устанавливаем:
npm install -g pm2
Запускаем приложение:
pm2 start server.js --name nodeapp
Проверяем список процессов:
pm2 list
Сохраняем конфигурацию:
pm2 save
Настраиваем автозапуск:
pm2 startup
Если PM2 выведет команду вида:
sudo env PATH=...
Скопируйте и выполните её.
После этого приложение будет автоматически запускаться после перезагрузки сервера.
Для остановки приложения:
pm2 stop nodeapp
Если Nginx ещё не установлен:
sudo dnf install nginx -y
Запускаем его:
sudo systemctl enable --now nginx
Подробнее про настройку можно прочитать в отдельной статье: https://62yun.ru/blog/article/centos_nginx
Создаём конфигурационный файл:
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
Если используется firewalld, разрешаем HTTP и HTTPS:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Если SELinux работает в режиме Enforcing, необходимо разрешить Nginx подключаться к Node.js.
Проверяем состояние:
getenforce
Разрешаем соединения:
sudo setsebool -P httpd_can_network_connect 1
Без этого Nginx не сможет подключаться к приложению через proxy_pass.
Если используется домен, установите Certbot:
sudo dnf install certbot python3-certbot-nginx -y
Получаем сертификат:
sudo certbot --nginx
Проверяем автоматическое продление:
sudo certbot renew --dry-run
После этого сайт станет доступен по HTTPS.
pm2 logs
pm2 restart nodeapp
pm2 monit
pm2 restart nodeapp
или запуск в режиме наблюдения:
pm2 start server.js --watch
В результате мы получили полноценное окружение для Node.js на CentOS:
Такой вариант подходит как для небольших сайтов, так и для продакшн-развёртывания более крупных Node.js-приложений.
Ознакомиться с тарифами на VDS можно здесь: https://62yun.ru/index/vps