Приложение Upstart node.js при развертывании dokku (Digital Ocean)

Я развернул свое приложение node.js в Digital Ocean, используя dokku (мини-Heroku на базе Docker). Приложение запускается командой в Procfile (web: node app.js).
Как мне запустить его с помощью Upstart, поэтому что он перезагружается автоматически после сбоя?

Добавлено:
Мне нужно, чтобы он был запущен при развертывании с git push dokku master.


person eagor    schedule 07.11.2014    source источник


Ответы (2)


Отредактируйте файл /etc/init/node.conf и вставьте в него следующий код. Замените /opt/node_project/ на путь к вашему проекту. При редактировании этого файла вы должны быть пользователем root, поэтому откройте редактор с помощью sudo.

description "Node server"
author "eagor"


# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on runlevel [016]

# Automatically restart process if crashed
respawn


script
  echo $$ > /var/run/node.pid;
  exec node /opt/node_project/app.js
end script


post-stop script
  rm -f /var/run/node.pid
end script

Теперь, когда вы создали конфигурацию Upstart для своего процесса, вы можете запустить его из командной строки:

$ sudo service node start

Upstart будет отслеживать ваш процесс и перезапускать его каждый раз, когда он выйдет из строя.

Он также перенаправляет журналы на /var/log/upstart/node.log.

Навсегда

Вышеупомянутое работает напрямую с узлом и обходит Dokku. Похоже, что Upstart - не лучший способ справиться с этим.

Вам следует подумать об использовании модуля forever. Добавьте forever в зависимости вашего package.json. Затем в вашем Procfile используйте это: web: ./node_modules/forever/bin/forever app.js

person Daniel    schedule 07.11.2014
comment
Спасибо. Могу ли я запустить его с Upstart при развертывании с помощью git push? - person eagor; 07.11.2014
comment
Я думаю, что лучшим вариантом для вас будет модуль forever. Я отредактировал свой ответ. - person Daniel; 07.11.2014
comment
Я думал об этом, но где-то читал, что выскочка - более надежное решение. Тем не менее, я использовал его вечно, и он делает именно то, что мне нужно. Спасибо. - person eagor; 07.11.2014

Начиная с версии Dokku 0.7.0 он имеет встроенные политики перезапуска:

https://github.com/dokku/dokku/blob/master/docs/deployment/process-management.md#restart-policies

e.g.

# only restart it on Docker restart if it was not manually stopped
dokku ps:set-restart-policy node-js-app unless-stopped
person Dominic    schedule 12.12.2018