Как разместить несколько приложений Node.js на одном VPS с помощью nginx, forever и crontab
Требования для выполнения этого руководства
Вам необходимо установить nginx и Node.js, и на DigitalOcean уже есть хорошо написанные руководства по этим темам:
Как установить Node.js.
Кроме того, у вас уже должен быть домен, чтобы сопоставить работающую службу Node.js с доменным именем вместо перехода по адресу http://[your-vps-ip]:[port].
Запуск вашего приложения Node.js с Forever
Forever — это простой инструмент командной строки для обеспечения непрерывной работы приложения Node.js (т. е. вечно). Это означает, что если ваше приложение обнаружит ошибку и выйдет из строя, навсегда позаботится об этой проблеме и перезапустит ее для вас.
Просто установите навсегда глобально, и навсегда можно использовать за считанные секунды:
npm install forever -g
Чтобы запустить скрипт с навсегда, вам необходимо выполнить следующие шаги:
Перейдите к своему приложению Node.js:
cd /path/to/your/node/app/
и запустите сервер/основной файл JavaScript навсегда:
forever start --spinSleepTime 10000 main.js
Где --spinSleepTime 10000
относится к минимальному времени безотказной работы (в миллисекундах) между запусками сбойного скрипта. Эта команда будет работать почти во всех случаях.
Теперь укажите в браузере http://[your-vps-ip]:[port] и посмотрите, как работает ваше приложение.
Сопоставьте домен с вашим приложением Node.js
Теперь вам нужно добавить запись DNS в панель управления DigitalOcean, чтобы сопоставить ваше доменное имя с вашей каплей (VPS).
Следующие шаги:
Примечание. Изменения вступят в силу не сразу, так как для распространения DNS может потребоваться до 24 часов.
Сопоставьте домен со службой, работающей на вашем VPS, с помощью nginx
В этом разделе вы узнаете, как настроить обратный прокси-сервер с помощью nginx за несколько простых шагов.
Прежде всего, создайте файл для нужного домена в /etc/nginx/conf.d/ с помощью вашего любимого редактора (я буду использовать nano). Файл должен быть назван после имени домена из соображений согласованности.
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 прослушивает на вашем VPS.
Примечание. Чтобы иметь возможность ссылаться на несколько доменов для одного приложения Node.js (например, example.com), вам необходимо добавить следующий код в файл /etc/nginx/nginx.conf
в http
раздел:
server_names_hash_bucket_size 64;
Если изменения DNS распространяются, вы можете указать свой веб-браузер на свой домен, и вы должны увидеть, что ваше приложение работает и доступно из Интернета.
Перезапуск приложения Node.js при перезагрузке
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 с помощью этой команды:
crontab -e
и добавьте следующий код в этот файл
@reboot /path/to/starter.sh
Теперь установите абсолютный путь к вашему файлу starter.sh.
Совет. Перейдите к местоположению вашего файла starter.sh и распечатайте текущий каталог с помощью pwd
.
Повторите шаги, описанные выше, для каждого из ваших доменов/сервисов.