Размещение нескольких приложений Node.js на одном VPS (при помощи Nginx, Forever и Crontab)

Требования

Чтобы следовать данному руководству, необходимо предварительно установить Nginx и Node.js. чтобы получить инструкции по установке данного ПО, читайте статьи:

Кроме того, вместо http://[ip-адрес-vps]:[порт] лучше использовать домен, подключив к нему запущенный сервис Node.js.

Запуск приложения Node.js с помощью Forever

Forever – это простой командный инструмент, который гарантирует, что скрипт/приложение будет работать «вечно». То есть если в результате ошибки происходит сбой приложения, forever найдет способ исправить ее и перезапустит приложение.

Установите инструмент forever глобально, это займет считанные секунды:

npm install forever -g

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

  • перейдите к приложению Node.js:

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

  • и запустите файл main.js через forever:

forever start --spinSleepTime 10000 main.js

где –spinSleepTime 10000 обозначает минимальный аптайм (в миллисекундах) между запусками аварийного скрипта. Эта команда сработает практически во всех случаях.

Теперь направьте браузер на http://[ip-адрес-vps]:[порт], чтобы увидеть приложение в действии.

Подключение домена к приложению Node.js

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

Итак, выполните следующие действия:

  1. Войдите на сервер;
  2. В панели найдите раздел DNS;
  3. Добавьте домен, нажав кнопку ‘Add Domain, укажите нужный VPS и доменное имя;
  4. Скопируйте полученный Nameserver и внесите его в запись DNS в панели управления.

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

Подключение домена к сервису Nginx

В данном разделе речь пойдет о подключении обратного прокси-серера с помощью Nginx.

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

nano /etc/nginx/conf.d/example.com.conf

Примечание: файл можно назвать как угодно, важной часть имени файла является расширение .conf.

Теперь нужно скопировать следующий фрагмент кода и вставить его в только что созданный файл:

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.example.com и example.com) необходимо добавить следующий код в раздел http файла /etc/nginx/nginx.conf:

server_names_hash_bucket_size 64;

Когда изменения DNS вступят в силу, направьте ​​веб-браузер на доменное имя; это должно открыть работающее в сети приложение.

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

Инструмент forever очень полезен при аварийных сбоях приложения; но что делать при перезагрузке сервера?

В таком случае нужно использовать простую таблицу crontab, которая может предотвратить неожиданные простои приложения.

Создайте файл по имени 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:

crontab -e

внеся в нее следующий код:

@reboot /path/to/starter.sh

Затем укажите абсолютный путь к файлу starter.sh.

Примечание: перейдите в местонахождение файла starter.sh и выведите текущий каталог с помощью pwd.

Повторите все вышеописанные действия для каждого домена и сервиса.

Tags: , , , , ,

Добавить комментарий