Подтвердить что ты не робот

Как я могу автоматически запустить приложение node.js в Amazon Linux AMI на aws?

Есть ли краткое руководство по объяснению запуска приложения при запуске и запуске экземпляра? Если бы это была одна из услуг, установленных через yum, то, я думаю, я могу использовать /sbin/chkconfig, чтобы добавить ее в службу. (Чтобы убедиться, что это правильно?)

Однако я просто хочу запустить программу, которая не была установлена ​​через yum. Для запуска программы node.js мне придется запускать script sudo node app.js в домашнем каталоге всякий раз, когда система загружается.

Я не привык к Amazon Linux AMI, поэтому у меня мало проблем с поиском "правильного" способа запуска некоторого script автоматически при каждой загрузке.

Есть ли элегантный способ сделать это?

4b9b3361

Ответ 1

Один из способов - создать выскочку. Таким образом, ваше приложение начнет работу с загрузкой Linux, автоматически перезапустится, если произойдет сбой, и вы можете запустить/остановить/перезапустить его с помощью sudo start yourapp/sudo stop yourapp/sudo restart yourapp.

Здесь начинаются шаги:

1) Установите утилиту upstart (может быть предварительно установлена, если вы используете стандартный AMI Amazon Linux):

sudo yum install upstart

Для Ubuntu:

sudo apt-get install upstart

2) Создайте upstart script для вашего приложения node:

в /etc/init добавить файл yourappname.conf со следующими строками кода:

#!upstart
description "your app name"

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

env NODE_ENV=development

# Warning: this runs node as root user, which is a security risk
# in many scenarios, but upstart-ing a process as a non-root user
# is outside the scope of this question
exec node /path_to_your_app/app.js >> /var/log/yourappname.log 2>&1

3) запустите приложение sudo start yourappname

Ответ 2

Вы можете использовать forever-service для обеспечения node script как услугу и автоматически запускаться во время загрузки. Следующие команды сделают необходимый,

npm install -g forever-service
forever-service install test

Это предоставит app.js в текущем каталоге как услугу навсегда. Служба будет автоматически перезагружаться при каждом перезапуске системы. Также при остановке он попытается сделать изящную остановку. Этот script содержит logrotate script.

Github url: https://github.com/zapty/forever-service

В настоящее время вечная служба поддерживает Amazon Linux, CentOS, поддержка Redhat для других дистрибутивов Linux, Mac и Windows в работе.

ПРИМЕЧАНИЕ. Я являюсь автором forever-service.

Ответ 3

Быстрое решение для вас будет запустить ваше приложение с /etc/rc.local; просто добавьте свою команду туда.

Но если вы хотите пойти по элегантному пути, вам придется упаковать свое приложение в rpm файл, иметь скрипт запуска, который находится в /etc/rc.d чтобы вы могли использовать chkconfig в своем приложении, а затем установить rpm в вашем случае.

Может быть, это или это поможет. (или просто Google для "создания пакетов RPM")

Ответ 4

Вы можете создать script, который может запустить и остановить ваше приложение и поместить его в /etc/init.d; сделайте script придерживайтесь соглашений chkconfig (ниже), а затем используйте chkconfig, чтобы он запускался при запуске других служб.

Вы можете выбрать существующий script из /etc/init.d для использования в качестве примера; эта статья описывает требования, которые в основном:

  • Исполняемый script, который идентифицирует требуемую оболочку (т.е. #!/bin/bash)
  • Комментарий формы # chkconfig: где часто 345, startprio указывает, где в порядке запуска сервисов, а stopprio - это где в порядке остановки сервисов. Обычно я выбираю аналогичную службу, которая уже существует, и использую ее как руководство для этих значений (т.е. Если у вас есть служба, связанная с веб-сайтом, начинайте с тех же уровней, что и httpd, с аналогичными приоритетами запуска и остановки).

Как только ваш script настроен, вы можете использовать

 chkconfig --add yourscript 
 chkconfig yourscript on 

и вам должно быть хорошо идти. (Некоторые дистрибутивы могут потребовать, чтобы вы вручную ссылались на script на /etc/init.d/rc.d, но я считаю, что ваш дистрибутив AWS сделает это для вас, когда вы включите script.

Ответ 5

Используйте Elastic Beanstalk:) Обеспечивает поддержку автоматического масштабирования, завершения SSL, синего/зеленого развертывания и т.д.

Ответ 6

Мой экземпляр Amazon Linux работает в Ubuntu, и я использовал systemd для его настройки.

Сначала вам нужно создать служебный файл. (в моем случае cloudyleela.service)

sudo nano /lib/systemd/system/cloudyleela.service

Введите в этом файле следующее:

[Unit]
Description=cloudy leela
Documentation=http://documentation.domain.com
After=network.target

[Service]
Type=simple
TimeoutSec=0
User=ubuntu
ExecStart=/usr/bin/node /home/ubuntu/server.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

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

[email protected]:~$ sudo systemctl daemon-reload
[email protected]:~$ sudo systemctl start cloudyleela
[email protected]:~$ sudo systemctl enable cloudyleela
Created symlink /etc/systemd/system/multi-user.target.wants/cloudyleela.service → /lib/systemd/system/cloudyleela.service.
[email protected]:~$

Отличное руководство по systemd для node.js доступно здесь.

Если вы запускаете веб-сервер:

Вы можете запустить веб-сервер (например, экспресс). В этом случае вы скоро обнаружите, что не так легко заставить его работать на порте 80. Самое простое решение - фактически установить его на другой порт (например, 4200), а затем перенаправить порт 80 на 4200. может сделать это с помощью следующей команды:

sudo iptables -t nat -A PREROUTING -i -p tcp --dport 80 -j REDIRECT --to-port 4200

К сожалению, это не является постоянным, поэтому вы должны повторять это всякий раз, когда ваш сервер перезагружается. Конечно, лучше всего включить его в наш сервисный скрипт:

  1. ExecStartPre для добавления переадресации портов
  2. ExecStopPost для удаления переадресации портов
  3. PermissionStartOnly чтобы сделать это с силой sudo

Итак, как то так:

[Service]
...
PermissionsStartOnly=true
ExecStartPre=/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200
ExecStopPost=/sbin/iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4200

Не забудьте перезагрузить и перезапустить ваш сервис:

[[email protected] system]$ sudo systemctl daemon-reload
[[email protected] system]$ sudo systemctl stop zbaduk.ishida
[[email protected] system]$ sudo systemctl start zbaduk.ishida
[[email protected] system]$

Ответ 7

Вы можете использовать screen. Запустите crontab -e и добавьте эту строку:

@reboot  screen -d -m bash -c "cd /home/user/yourapp/; node app"

Ответ 8

Использовали forever на AWS, и он отлично справляется. Установите с помощью

 [sudo] npm install forever -g

Чтобы добавить приложение, используйте

 forever start path_to_application

и для остановки использования приложения

 forever stop path_to_application

Это - полезная статья, которая помогла мне настроить ее.