Главная/Статьи/Как разместить несколько Node JS приложений на одном VPS аккаунте при помощи Nginx
NodeJS

Как разместить несколько Node JS приложений на одном VPS аккаунте при помощи Nginx

Настройка рабочего окружения для размещения нескольких приложений Node JS на одном VPS через Nginx. Предполагается, что Node JS и Nginx уже установлены.

Постоянное выполнение приложений

Библиотека Forever автоматизирует управление запущенными приложениями Node JS. При возникновении ошибок приложение продолжает работать или перезагружается.

Установка:

npm install forever -g

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

cd /path/to/your/node/app/
forever start --spinSleepTime 10000 main.js

Параметр --spinSleepTime 10000 устанавливает минимальный интервал между перезапусками. Основные команды: start, stop, stopall, restart, restartall, list.

Направление домена на приложение

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

sudo vi /etc/nginx/conf.d/example.com.conf

Содержимое файла (замените your-domain.com и YOUR_PORT на свои значения):

server {
    listen 80;
    server_name your-domain.com;
    location / {
        proxy_pass http://localhost:{YOUR_PORT};
        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;
    }
}

Для поддержки множественных доменов добавьте в /etc/nginx/nginx.conf:

server_names_hash_bucket_size 64;

Перезагрузка Nginx:

sudo service nginx restart

Автозапуск при перезагрузке сервера

Создаём файл starter.sh:

#!/bin/sh

if [ $(ps -e -o uid,cmd | grep $UID | grep node | grep -v grep | wc -l | tr -s "\\n") -eq 0 ]
then
    export PATH=/usr/local/bin:$PATH
    forever start --sourceDir /path/to/your/node/app main.js >> /path/to/log.txt 2>&1
fi

Редактируем crontab:

crontab -e

Добавляем строку:

@reboot /path/to/starter.sh

Для размещения дополнительных приложений запустите каждое на отдельном порту и создайте для них аналогичные конфигурационные файлы. Для современных проектов рекомендуется использовать пакет PM2 вместо Forever.