Каков наилучший способ развертывания Node.js?
У меня есть Dreamhost VPS (это то, что они называют VM), и я смог установить Node.js и установить прокси. Это отлично работает, пока я сохраняю соединение SSH, с которого я начал открывать node.
Каков наилучший способ развертывания Node.js?
У меня есть Dreamhost VPS (это то, что они называют VM), и я смог установить Node.js и установить прокси. Это отлично работает, пока я сохраняю соединение SSH, с которого я начал открывать node.
Ответ 2016 года: почти каждый дистрибутив Linux поставляется с systemd, что означает, что навсегда, monit, PM2 и т.д. Больше не нужны - ваша ОС уже выполняет эти задачи.
Создайте файл myapp.service
(очевидно, заменив "myapp" именем вашего приложения):
[Unit]
Description=My app
[Service]
ExecStart=/var/www/myapp/app.js
Restart=always
User=nobody
# Note Debian/Ubuntu uses 'nogroup', RHEL/Fedora uses 'nobody'
Group=nobody
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/var/www/myapp
[Install]
WantedBy=multi-user.target
Обратите внимание, если вы новичок в Unix: /var/www/myapp/app.js
должен содержать #!/usr/bin/env node
в самой первой строке.
Скопируйте служебный файл в папку /etc/systemd/system
.
Расскажите systemd о новом сервисе с помощью systemctl daemon-reload
.
Начните с systemctl start myapp
.
Включите его для запуска при загрузке с systemctl enable myapp
.
Смотрите журналы с journalctl -u myapp
Это взято из Как мы развертываем приложения для узлов в Linux, выпуск 2018 года, который также включает команды для генерации AWS/DigitalOcean/Azure CloudConfig для построения серверов Linux/узлов (включая файл .service
).
Используйте навсегда. Он запускает программы Node.js в отдельных процессах и перезапускает их в случае смерти.
Использование:
forever start example.js
, чтобы начать процесс.forever list
, чтобы увидеть список всех процессов, запущенных навсегдаforever stop example.js
, чтобы остановить процесс, или forever stop 0
, чтобы остановить процесс с индексом 0 (как показано forever list
).Я написал о моем методе развертывания здесь: Развертывание node.js приложений
Короче:
pm2 выполняет трюки.
Особенности: Мониторинг, перезагрузка горячего кода, встроенный балансировщик нагрузки, автоматический запуск script, а также процессы resurrect/dump.
Вы можете использовать monit
, forever
, upstart
или systemd
, чтобы запустить ваш сервер.
Вы можете использовать Varnish или HAProxy вместо Nginx (Nginx, как известно, не работает с веб-сайтами).
В качестве быстрого и грязного решения вы можете использовать nohup node your_app.js &
, чтобы ваше приложение не прекратилось с вашим сервером, но forever
, monit
и другие предлагаемые решения лучше.
Я сделал Upstart script, который в настоящее время используется для моих приложений:
description "YOUR APP NAME"
author "Capy - http://ecapy.com"
env LOG_FILE=/var/log/node/miapp.log
env APP_DIR=/var/node/miapp
env APP=app.js
env PID_NAME=miapp.pid
env USER=www-data
env GROUP=www-data
env POST_START_MESSAGE_TO_LOG="miapp HAS BEEN STARTED."
env NODE_BIN=/usr/local/bin/node
env PID_PATH=/var/opt/node/run
env SERVER_ENV="production"
######################################################
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 99 5
pre-start script
mkdir -p $PID_PATH
mkdir -p /var/log/node
end script
script
export NODE_ENV=$SERVER_ENV
exec start-stop-daemon --start --chuid $USER:$GROUP --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE 2>&1
end script
post-start script
echo $POST_START_MESSAGE_TO_LOG >> $LOG_FILE
end script
Настройте все до #########, создайте файл в /etc/init/your -service.conf и вставьте его там.
Затем вы можете:
start your-service
stop your-service
restart your-service
status your-service
Я написал довольно подробное руководство по развертыванию Node.js, с файлами примеров:
Учебное пособие: как развернуть приложения Node.js, с примерами
Если у вас есть root-доступ, вам лучше настроить демона так, чтобы он работал безопасно и звуком в фоновом режиме. Вы можете прочитать, как это сделать для Debian и Ubuntu в сообщении блога Запустите Node.js как службу в Ubuntu.
Здесь более подробная статья по решению этой проблемы с systemd: http://savanne.be/articles/deploying-node-js-with-systemd/
Некоторые вещи, которые нужно иметь в виду:
Все это легко сделать с помощью systemd.
Forever будет делать трюк.
@Kevin: вы должны уметь отлично обрабатывать процессы. Я бы дважды проверил документацию. Если вы можете воспроизвести ошибку, было бы замечательно опубликовать ее как проблему на GitHub.
Как сказал Box9, Forever является хорошим выбором для производственного кода. Но также можно продолжать процесс, даже если соединение SSH закрывается от клиента.
Несмотря на то, что это не очень хорошая идея для производства, это очень удобно, когда в середине длинных сеансов отладки, или для вывода на консоль длинных процессов или когда полезно отключить ваше соединение SSH, но поддерживайте терминал на сервере, чтобы снова подключиться (например, запустить приложение Node.js дома и снова подключиться к консоли на работе, чтобы проверить, как идут дела).
Предполагая, что ваш сервер является полем * nix, вы можете использовать команду screen из оболочки, чтобы поддерживать работу даже если клиент SSH закрыт. Вы можете загрузить/установить экран из Интернета, если он еще не установлен (найдите пакет для вашего дистрибутива, если Linux, или используйте MacPorts, если OS . Х)
Он работает следующим образом:
В случае необходимости вы можете использовать несколько сеансов экрана одновременно, как это необходимо, и вы можете подключиться к любому из них с любого клиента. Прочтите документацию онлайн для всех параметров.
Попробуйте следующее: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
Отличное и подробное руководство по развертыванию приложений Node.js с Capistrano, Upstart и Nginx
В вашем случае вы можете использовать демон upstart. Для полного решения для развертывания я могу предложить capistrano. Два полезных руководства: Как настроить Node.js env и Как сделать развертывать через capistrano + upstart.
Forever - хороший вариант для поддержки приложений (и он доступен для установки в качестве модуля, который хорош).
Но для более серьезного "развертывания" - таких, как дистанционное управление развертыванием, перезапуском, запуском команд и т.д. - я бы использовал capistrano с расширением node.
Попробуйте node-deploy-server. Это сложный набор инструментов для развертывания приложения на ваших частных серверах. Он написан в Node.js и использует npm для установки.
https://paastor.com - относительно новая услуга, которая выполняет развертывание для вас, VPS или другого сервера. Существует CLI для ввода кода. У Paastor есть свободный уровень, по крайней мере, это было во время публикации этого.