Как запустить узел.применение js как свой собственный процесс?
Что является лучшим способом, чтобы развернуть узел.Джей?
У меня есть Dreamhost VPS (это то, что они называют VM), и я смог установить узел.js и настроить прокси-сервер. Это отлично работает до тех пор, пока я сохраняю соединение SSH, которое я запустил узел с открытым.
16 ответов:
ответить на 2016: почти каждый дистрибутив Linux с systemd, что означает навсегда, монит и т. д. больше не нужны-ваша ОС уже обрабатывает эти задачи.
сделать
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 edition, который также включает команды для создания AWS / DigitalOcean / Azure CloudConfig для создания серверов Linux/node (включая
.service
file).
использовать навсегда. Он запускает узел.JS программирует в отдельных процессах и перезапускает их, если они умирают.
использование:
forever start example.js
начать процесс.forever list
чтобы увидеть список всех процессов, запущенных навсегдаforever stop example.js
остановить процесс, илиforever stop 0
остановить процесс с индексом 0 (как показано наforever list
).
Я написал о моем методе развертывания здесь: развертывание узла.js apps
короче:
pm2 делает трюки.
особенности: мониторинг, перезагрузка горячего кода, встроенный балансировщик нагрузки, автоматический сценарий запуска и процессы resurrect/dump.
можно использовать
monit
,forever
,upstart
илиsystemd
для запуска сервера.вы можете использовать лак или HAProxy вместо Nginx (Nginx, как известно, не работает с websockets).
в качестве быстрого и грязного решения вы можете использовать
nohup node your_app.js &
чтобы предотвратить завершение работы вашего приложения с вашим сервером, ноforever
,monit
и другие предложенные решения лучше.
Я сделал сценарий выскочки в настоящее время используется для моих приложений:
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.конф и вставьте его туда.
затем вы можете:
start your-service stop your-service restart your-service status your-service
Я написал довольно полное руководство по развертыванию узла.js, с примерами файлов:
вот более длинная статья о решении этой проблемы с systemd:http://savanne.be/articles/deploying-node-js-with-systemd/
некоторые вещи, чтобы иметь в виду:
- кто начнет ваш процесс мониторинга? Forever-отличный инструмент, но ему нужен инструмент мониторинга, чтобы продолжать работать. Это немного глупо, почему бы просто не использовать вашу систему инициализации?
- можете ли вы адекватно контролировать свои процессы?
- вы работаете несколько бэкенды? Если да, то есть ли у вас какие-либо положения для предотвращения любого из них от снижения других с точки зрения использования ресурсов?
- будет ли услуга нужна все время? Если нет, рассмотрите активацию сокета (см. статью).
все эти вещи легко сделать с systemd.
Если у вас есть корневой доступ, вам лучше настроить демон так, чтобы он работал в фоновом режиме в целости и сохранности. Вы можете прочитать, как это сделать для Debian и Ubuntu в блоге Запустить Узел.js как сервис на Ubuntu.
навсегда будет делать трюк.
@Kevin: вы должны быть в состоянии убить процессы нормально. Я бы дважды проверил документацию немного. Если вы можете воспроизвести ошибку, было бы здорово опубликовать ее как проблему на GitHub.
попробуйте это: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
большое и подробное руководство по развертыванию узла.js приложения с Капистрано, выскочка и Nginx
Как сказал Box9, навсегда хороший выбор для производства кода. Но также можно сохранить процесс, даже если SSH соединение закрывается от клиента.
хотя это не обязательно хорошая идея для производства, это очень удобно, когда в середине длинных сеансов отладки, или следить за выводом консоли длительных процессов, или всякий раз, когда полезно отключить SSH-соединение, но сохранить терминал живым на сервере для повторного подключения позже (например, запуск узла.приложение js дома и повторное подключение к консоли позже на работе, чтобы проверить, как идут дела).
предполагая, что ваш сервер является * nix box, вы можете использовать команда из оболочки, чтобы сделать держать процесс запущен, даже если клиент SSH закрыт. Вы можете скачать/установить экран из интернета, если он еще не установлен (найдите пакет для своего дистрибутива, если Linux, или используйте MacPorts Если OS X).
Это работает следующим образом:
- когда вы впервые открываете соединение SSH, введите "экран" - это запустит сеанс экрана.
- начните работать как обычно (т. е. Запустите свой узел.приложения на JS)
- когда вы закончите, закройте терминал. Ваш серверный процесс(ы) будет продолжать работать.
- для повторного подключения к консоли, ssh обратно на сервер, войдите в систему и введите "экран-r" для повторного подключения. Ваш старый контекст консоли будет поп назад готовы для вас, чтобы возобновить его использование.
- чтобы выйти из экрана при подключении к серверу, введите "выход" в командной строке консоли - это приведет вас к обычной оболочке.
вы можете иметь несколько сеансов экрана, работающих одновременно, как это, если вам нужно, и вы можете подключиться к любому из них с любого клиента. Прочитайте документацию Онлайн для всех вариантов.
Forever-это хороший вариант для запуска приложений (и это npm, устанавливаемый как модуль, который хорош).
но для более серьезного "развертывания" - такие вещи, как удаленное управление развертыванием, перезапуском, запуском команд и т. д.-Я бы использовал capistrano с расширением узла.
https://paastor.com - это относительно новая служба, которая выполняет развертывание для вас, на VPS или другой сервер. Существует CLI для нажатия кода. У Paastor есть свободный уровень, по крайней мере, он сделал это во время публикации этого.
в вашем случае вы можете использовать выскочка демон. Для полного развертывания решения, я могу предложить Капистрано. Два полезных руководства являются настройки узла.js env и как развернуть через capistrano + upstart.
попробовать узел развертывания сервера. Это комплексный набор инструментов для развертывания приложения на частных серверах. Это написано в узле.js и использует npm для установки.