Размещение нескольких приложений 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 в панель управления, чтобы подключить доменное имя к виртуальному выделенному серверу.
Итак, выполните следующие действия:
- Войдите на сервер;
- В панели найдите раздел DNS;
- Добавьте домен, нажав кнопку ‘Add Domain, укажите нужный VPS и доменное имя;
- Скопируйте полученный 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: crontab, forever, Linux, NGINX, Node.js, VPS