Как запустить узел.применение js как свой собственный процесс?


Что является лучшим способом, чтобы развернуть узел.Джей?

У меня есть Dreamhost VPS (это то, что они называют VM), и я смог установить узел.js и настроить прокси-сервер. Это отлично работает до тех пор, пока я сохраняю соединение SSH, которое я запустил узел с открытым.

16 186

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

короче:

  • используйте git post-receive hook
  • Джейк для инструмента построить
  • выскочка в качестве оболочки для узла
  • Monit для мониторинга и перезапуска приложений это они идут вниз
  • nginx для маршрутизации запросов к различным приложениям на одном сервере

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, с примерами файлов:

учебник: как развернуть узел.приложений на JS с примерами

Он охватывает такие вещи, как http-прокси,SSL и Socket.IO.

вот более длинная статья о решении этой проблемы с 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).

Это работает следующим образом:

  1. когда вы впервые открываете соединение SSH, введите "экран" - это запустит сеанс экрана.
  2. начните работать как обычно (т. е. Запустите свой узел.приложения на JS)
  3. когда вы закончите, закройте терминал. Ваш серверный процесс(ы) будет продолжать работать.
  4. для повторного подключения к консоли, ssh обратно на сервер, войдите в систему и введите "экран-r" для повторного подключения. Ваш старый контекст консоли будет поп назад готовы для вас, чтобы возобновить его использование.
  5. чтобы выйти из экрана при подключении к серверу, введите "выход" в командной строке консоли - это приведет вас к обычной оболочке.

вы можете иметь несколько сеансов экрана, работающих одновременно, как это, если вам нужно, и вы можете подключиться к любому из них с любого клиента. Прочитайте документацию Онлайн для всех вариантов.

Forever-это хороший вариант для запуска приложений (и это npm, устанавливаемый как модуль, который хорош).

но для более серьезного "развертывания" - такие вещи, как удаленное управление развертыванием, перезапуском, запуском команд и т. д.-Я бы использовал capistrano с расширением узла.

https://github.com/loopj/capistrano-node-deploy

https://paastor.com - это относительно новая служба, которая выполняет развертывание для вас, на VPS или другой сервер. Существует CLI для нажатия кода. У Paastor есть свободный уровень, по крайней мере, он сделал это во время публикации этого.

в вашем случае вы можете использовать выскочка демон. Для полного развертывания решения, я могу предложить Капистрано. Два полезных руководства являются настройки узла.js env и как развернуть через capistrano + upstart.

попробовать узел развертывания сервера. Это комплексный набор инструментов для развертывания приложения на частных серверах. Это написано в узле.js и использует npm для установки.