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

Сегодня мы с вами поработаем с настройками рабочего окружения. И при помощи Nginx проксируем наши приложения Node JS на отдельные домены самым простым и быстрым способом.

Я предполагаю, что вы уже самостоятельно установили Node JS и Nginx. В данной стате я не буду останавливаться на этих деталях. Про установку Nginx вы можете почитать тут.

Так же я предполагаю что у вас есть необходимые домены или поддомены, на которых мы будем размещать наши приложения.

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

Forever — это простая библиотека сообщающая Node JS, что приложение запущено на постоянной основе. Это означает, что не смотря на встретившиеся в процессе выполнения ошибки и прочие невзгоды, приложение будет продолжать выполнятся или Node JS может перезагрузить его за вас.

Просто установите библиотеку forever глобально и вы получите результат в считанные секунды.

npm install forever -g

Перейдите в папку вашего приложения, например:

cd /path/to/your/node/app/

И запустите ваше приложение с параметром forever

forever start --spinSleepTime 10000 main.js

Где --spinSleepTime 10000 означает минимальное время между запусками свалившихся скриптов.

Дополнительные команды для forever:

start               Запуск приложения
stop               Остановка выполнения приложения
stopall           Остановка выполнения всех приложений
restart            Перезапуск демона приложения
restartall        Перезапуск всех приложений
list                  Показать все запущенные приложения

P.S Для отдельно взятого приложения команда выглядит следубщим образом: forever stop myapp.js

 

Теперь перейдите в браузере на IP адрес вашего сервера и вы увидите запущенное вами приложение.

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

Я предполагаю что ваш домен уже хостится на каком-либо DNS и его А запись направляет на IP адрес вашего сервера.

Для начала давайте создадим упоминание вашего домена в Nginx при помощи коняги файла. Давайте создадим его по данному пути /etc/nginx/conf.d/ с помощью удобного вам редактора, я обычно использую VIM.

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

Где example.com ваш домен и .conf сообщают Nginx о том, что это конфигурация некоего хоста.

В данный файл необходимо вставить следующий код сообщающий серверу конфигурацию нашего виртуального хоста:

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;
    }
}

В данном коде необходимо заменить your-domain.com на имя вашего домена. Теперь давайте заменим YOUR_PORT на тот порт который вы указали в вашем приложении на Node JS 

Обратите внимание, что бы иметь возможность с нескольких доменов ссылаться на одно приложение Node JS, например с WWW и без. Вам необходимо добавить следующий код в /etc/nginx/nginx.conf для секции http

server_names_hash_bucket_size 64;

Теперь вы можете увидеть ваше приложение расположенное на домене который вы указали только что в конфиг файле. Не забудьте предварительно перезапустить Nginx:

sudo service nginx restart

Перезапуск Node.js приложения при перезагрузке сервера или VPS

Библиотека Forever хороша, когда речь идет о сохранении работоспособности вашего приложения, при падениях, сбоях и т.д. Но что делать при перезагрузках VPS сервера? Тут нам поможет простой Cronjob избавиться от простоев вашего приложения.

Давайте создадим файл 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

Где main.js заменяем на исполняющий файл вашего приложения.

Чтобы запускать этот скрипт при каждой перезагрузке сервера, вам нужно отредактировать кронтаб со следующей командой:

crontab -e

и добавить следующий код в данный файл:

@reboot /path/to/starter.sh

Не забудте указать абсолютный путь к вашему файлу. Для того что бы узнать абсолютный путь директории в который вы сейчас находитесь можно использовать команду PWD

Вот собственно и всё. Для размещения следующего приложения на отдельном домене вам лишь нужно запустить его на отличном от предыдущего порту и повторить шаг "Направление домена на приложение”.