Как запустить приложение Node.js в качестве собственного процесса?
Каков наилучший способ развертывания Node.js?
У меня есть Dreamhost VPS (это то, что они называют VM), и я смог установить Node.js и установить прокси. Это отлично работает, пока я сохраняю соединение SSH, с которого я начал открывать node.
Ответы
Ответ 1
Ответ 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
).
Ответ 2
Используйте навсегда. Он запускает программы Node.js в отдельных процессах и перезапускает их в случае смерти.
Использование:
forever start example.js
, чтобы начать процесс.
forever list
, чтобы увидеть список всех процессов, запущенных навсегда
forever stop example.js
, чтобы остановить процесс, или forever stop 0
, чтобы остановить процесс с индексом 0 (как показано forever list
).
Ответ 3
Я написал о моем методе развертывания здесь: Развертывание node.js приложений
Короче:
- Использовать git хук после приема
- Jake для инструмента сборки
- Upstart как служебная обертка для node
- Монит для мониторинга и перезапуска приложений, с которыми они идут.
- nginx для маршрутизации запросов к различным приложениям на одном сервере
Ответ 4
pm2 выполняет трюки.
Особенности: Мониторинг, перезагрузка горячего кода, встроенный балансировщик нагрузки, автоматический запуск script, а также процессы resurrect/dump.
Ответ 5
Вы можете использовать monit
, forever
, upstart
или systemd
, чтобы запустить ваш сервер.
Вы можете использовать Varnish или HAProxy вместо Nginx (Nginx, как известно, не работает с веб-сайтами).
В качестве быстрого и грязного решения вы можете использовать nohup node your_app.js &
, чтобы ваше приложение не прекратилось с вашим сервером, но forever
, monit
и другие предлагаемые решения лучше.
Ответ 6
Я сделал 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
Ответ 7
Я написал довольно подробное руководство по развертыванию Node.js, с файлами примеров:
Учебное пособие: как развернуть приложения Node.js, с примерами
Он охватывает такие вещи, как http-proxy, SSL и Socket.IO.
Ответ 8
Если у вас есть root-доступ, вам лучше настроить демона так, чтобы он работал безопасно и звуком в фоновом режиме. Вы можете прочитать, как это сделать для Debian и Ubuntu в сообщении блога Запустите Node.js как службу в Ubuntu.
Ответ 9
Здесь более подробная статья по решению этой проблемы с systemd: http://savanne.be/articles/deploying-node-js-with-systemd/
Некоторые вещи, которые нужно иметь в виду:
- Кто начнет мониторинг вашего процесса? Forever - отличный инструмент, но для его работы необходим инструмент мониторинга. Это немного глупо, почему бы просто не использовать вашу систему init?
- Можете ли вы адекватно контролировать свои процессы?
- Вы используете несколько бэкэндов? Если да, у вас есть положения, позволяющие никому из них не сбивать других с точки зрения использования ресурсов?
- Будет ли обслуживание постоянно работать? Если нет, рассмотрите активацию сокета (см. Статью).
Все это легко сделать с помощью systemd.
Ответ 10
Forever будет делать трюк.
@Kevin: вы должны уметь отлично обрабатывать процессы. Я бы дважды проверил документацию. Если вы можете воспроизвести ошибку, было бы замечательно опубликовать ее как проблему на GitHub.
Ответ 11
Как сказал Box9, Forever является хорошим выбором для производственного кода. Но также можно продолжать процесс, даже если соединение SSH закрывается от клиента.
Несмотря на то, что это не очень хорошая идея для производства, это очень удобно, когда в середине длинных сеансов отладки, или для вывода на консоль длинных процессов или когда полезно отключить ваше соединение SSH, но поддерживайте терминал на сервере, чтобы снова подключиться (например, запустить приложение Node.js дома и снова подключиться к консоли на работе, чтобы проверить, как идут дела).
Предполагая, что ваш сервер является полем * nix, вы можете использовать команду screen из оболочки, чтобы поддерживать работу даже если клиент SSH закрыт. Вы можете загрузить/установить экран из Интернета, если он еще не установлен (найдите пакет для вашего дистрибутива, если Linux, или используйте MacPorts, если OS . Х)
Он работает следующим образом:
- Когда вы сначала открываете соединение SSH, введите "screen" - это запустит сеанс экрана.
- Начните работать как обычно (например, запустите приложение Node.js)
- Когда вы закончите, закройте свой терминал. Ваши серверные процессы будут продолжать работать.
- Чтобы снова подключиться к консоли, ssh вернитесь на сервер, войдите в систему и введите "screen -r" для повторного подключения. Ваш старый контекст консоли снова будет готов к возобновлению использования.
- Чтобы выйти из экрана, при подключении к серверу, введите "exit" в командной строке - это выведет вас на обычную оболочку.
В случае необходимости вы можете использовать несколько сеансов экрана одновременно, как это необходимо, и вы можете подключиться к любому из них с любого клиента. Прочтите документацию онлайн для всех параметров.
Ответ 12
Попробуйте следующее: 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
Ответ 13
В вашем случае вы можете использовать демон upstart. Для полного решения для развертывания я могу предложить capistrano. Два полезных руководства: Как настроить Node.js env и Как сделать развертывать через capistrano + upstart.
Ответ 14
Forever - хороший вариант для поддержки приложений (и он доступен для установки в качестве модуля, который хорош).
Но для более серьезного "развертывания" - таких, как дистанционное управление развертыванием, перезапуском, запуском команд и т.д. - я бы использовал capistrano с расширением node.
https://github.com/loopj/capistrano-node-deploy
Ответ 15
Попробуйте node-deploy-server. Это сложный набор инструментов для развертывания приложения на ваших частных серверах. Он написан в Node.js и использует npm для установки.
Ответ 16
https://paastor.com - относительно новая услуга, которая выполняет развертывание для вас, VPS или другого сервера. Существует CLI для ввода кода. У Paastor есть свободный уровень, по крайней мере, это было во время публикации этого.