Node js debian автозапуск

Обновлено: 03.07.2024

Запуск в фоновом режиме при помощи nohup

Традиционный подход заключается в том, чтобы запустить команду, используя nohup:

Эта строчка говорит о том, чтобы мы запустили приложение Node.js в фоновом режиме, а все логи записывались в файл output.log.

Использование модуля Forever

Установить данный модуль можно следующей командой:

Чтобы использовать Forever, как долговременный процесс, нужно запустить процесс через команду «start». Имея эти задачи, запуск сценария nodejs с Forever прост:

Первая команда запускает скрипт simple-server.js в фоновом режиме с помощью daemon.node и возвращает управление текущему процессу оболочки. Вторая команда перечисляет все процессы, выполняемые с Forever. Идентификаторами после имени сценария являются идентификаторы процесса целевого скрипта и демона, которые будут запущены всегда, пока работает сервер. Мы можем подтвердить это, просмотрев список процессов:

Чтобы проиллюстрировать, что Forever автоматически перезапустит дочерний процесс, который, каким-либо образом был закрыт в процессе перезагрузки или ошибки. Для этого давайте принудительно убьем запущенный процесс и проверим перезапустит ли Forever его:

Как вы видите, идентификатор процесса целевого скрипта «simple-server.js» изменился с 24597 до 24611, что указывает на то, что новый процесс был запущен Forever. Таким образом, наш целевой скрипт будет работать непрерывно, но как мы его остановим? Остановка процесса с Forever проста из командной строки. Нам просто нужно передать индекс этого процесса из списка «вечный список» на остановку:

Существуют некоторые параметры по умолчанию и соглашения о конфигурации, о которых вам следует знать при использовании Forever:

  1. Forever отслеживает запущенные процессы в файлах * .fvr, которые помещаются в /tmp/forever/pids;
  2. Каждый процесс Forever будет генерировать уникальный файл журнала, помещенный в /tmp/forever/*.log;
  3. Если не указано иное, вывод дочернего процесса stdout и stderr будет записан в указанный выше файл журнала.

Подробнее об этих параметрах можно узнать из использования Forever и документации по Github .

Использование модуля PM2

Последняя стабильная версия PM2 устанавливается через NPM:

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

И далее очень просто их запускаем:

Подробнее об объявлении приложения читайте здесь .

Перезапуск PM2 с процессами, которые вы выполняете при загрузке / перезагрузке сервера, имеет решающее значение. Чтобы решить эту проблему, просто запустите эту команду для создания активного сценария запуска:

Вот некоторые команды, которые стоит знать:

Пожалуй, основные из вышеизложенного списка:

Если используется фреймворк express, то команда запуска приложения в демон-режиме будет выглядеть так:

Node.js – это платформа JavaScript для программирования общего назначения, которая позволяет быстро создавать сетевые приложения. Данная платформа работает в Linux, OS X, FreeBSD и Windows. Приложения Node.js можно запускать в командной строке, но данное руководство продемонстрирует, как запустить приложение в качестве сервиса (в таком случае приложение сможет автоматически перезагружаться вместе с сервером или при сбое и будет безопасно для использования в производственной среде).

Данное руководство поможет подготовить среду Node.js к производству на сервере Debian 8. Приложение Node.js будет управляться PM2 и предоставит пользователям безопасный доступ при помощи обратного прокси-сервера Nginx.

Требования

  • Сервер Debian 8 (инструкции по настройке здесь).
  • Не root пользователь с доступом к sudo.
  • Домен, направленный на внешний IP-адрес сервера.

Установка Node.js

Для начала нужно установить LTS-релиз Node.js при помощи архива NodeSource.

Установите PPA в домашний каталог, чтобы получить доступ к его содержимому. Используйте curl, чтобы извлечь установочный сценарий необходимой версии (укажите её вместо 6.x ):

Проверьте содержимое сценария при помощи редактора:

sudo bash nodesource_setup.sh

Архив PPA будет добавлен в настройки. Индекс пакетов обновится автоматически. После запуска установочного сценария nodesource можно установить пакет Node.js:

sudo apt-get install nodejs

Пакет nodejs содержит бинарный файл nodejs и npm (потому вам не придётся устанавливать npm отдельно). Однако для работы некоторых компонентов npm (компилирующих исходный код и т.п.) необходим пакет build-essential:

sudo apt-get install build-essential

Теперь можно приступать к созданию приложения.

Создание приложения Node.js

Примечание: Копируя код, не забудьте указать свой IP-адрес и порт вместо условных данных.

Код приложения Hello World

Создайте приложение Node.js и откройте его в текстовом редакторе (в руководстве файл называется hello.js):

Вставьте в файл следующий код. При необходимости можно заменить номер порта 8080 (он должен быть от 1024 и больше).

Сохраните и закройте файл.

Тестирование приложения

Чтобы протестировать приложение, создайте исполняемый файл hello.js:

chmod +x ./hello.js

Примечание: Запуская Node.js таким образом, вы блокируете дополнительные команды. Они будут доступны после остановки приложения (Ctrl-C).

Чтобы протестировать приложение, откройте новый терминал и подключитесь к localhost с помощью curl:

Если на экране появился следующий вывод, приложение работает правильно:

Если такой вывод не появился, убедитесь, что приложение Node.js запущено и правильно настроено (слушает правильный адрес и порт).

Остановите приложение, нажав Ctrl+C.

Установка PM2

Теперь нужно установить PM2. Это менеджер процессов Node.js. PM2 предоставляет простой способ управления и демонизации приложений.

Установку можно выполнить при помощи пакетного менеджера npm.

sudo npm install -g pm2

При помощи опции –g менеджер npm выполнит глобальную установку PM2.

Управление приложением с помощью PM2

Менеджер процессов PM2 очень прост в использовании. Рассмотрим основы его работы.

Запуск приложения

Для запуска приложений в фоновом режиме используется команда pm2 start:

pm2 start hello.js

Также эта команда добавит приложение в список процессов PM2, который выводится на экран при запуске каждого приложения:

[PM2] Spawning PM2 daemon
[PM2] PM2 Successfully daemonized
[PM2] Starting hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ hello │ 0 │ fork │ 3524 │ online │ 0 │ 0s │ 21.566 MB │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app

Как видите, PM2 автоматически устанавливает App name (имя файла без расширения .js) и PM2 id. Также PM2 предоставляет другую информацию: PID процесса, текущее состояние, использование памяти.

Запущенное с помощью PM2 приложение будет автоматически перезапускаться в случае ошибок или сбоев, однако автоматический запуск приложения нужно настроить отдельно. Для этого существует подкоманда startup.

Эта команда генерирует и настраивает сценарий запуска менеджера PM2 и всех его процессов вместе с загрузкой сервера. Также нужно указать платформу (в данном случае это ubuntu).

pm2 startup systemd

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

[PM2] You have to run this command as root. Execute the following command:
sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u 8host --hp /home/8host

Запустите сгенерированную команду, чтобы настроить автозапуск PM2.

sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u 8host --hp /home/8host

Эта команда создаст unit-файл для systemd, запускающий pm2 при запуске сервера. Менеджер pm2, в свою очередь, запустит приложение hello.js. Проверьте состояние юнита systemd:

systemctl status pm2

Другие функции PM2 (опционально)

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

Остановить приложение можно при помощи:

pm2 stop app_name_or_id

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

pm2 restart app_name_or_id

Список приложений, управляемых PM2, можно просмотреть при помощи следующей подкоманды:

Подробную информацию о конкретном приложении можно получить с помощью подкоманды info:

pm2 info example

Подкоманда monit показывает данные процесса PM2: состояние приложения, использование CPU и памяти:

Теперь нужно настроить обратный прокси.

Nginx как обратный прокси-сервер

Итак, приложение запущено и прослушивает localhost. Теперь нужно настроить доступ к нему. Установите Nginx как обратный прокси-сервер.

Примечание: Если Nginx уже установлен, скопируйте блок location в файл виртуального хоста (убедитесь, что скопированные настройки не конфликтуют с уже существующими настройками).

Чтобы установить Nginx, введите:

sudo apt-get install nginx

Откройте стандартный блок server:

sudo nano /etc/nginx/sites-available/default

Удалите все содержимое файла и вставьте предложенные ниже настройки. Откорректируйте номер порта (8080), если приложение прослушивает другой порт.

Это отправит запрос приложению hello.js на порт 8080 localhost.

Сохраните и закройте файл.

Убедитесь, что в файлах нет ошибок:

После этого перезапустите Nginx:

sudo systemctl restart nginx

Теперь нужно открыть порт приложения в брандмауэре.

Если вы используете ufw, введите команду:

sudo ufw allow 'Nginx Full'

Чтобы проверить состояние брандмауэра, используйте команду:

sudo ufw status

Если вы используете IPTables, вы можете разблокировать трафик Nginx с помощью команды:

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Чтобы проверить состояние брандмауэра, введите:

sudo iptables -S

Если приложение Node.js запущено, а сервер Nginx правильно настроен, теперь вы можете получить доступ к приложению через обратный прокси-сервер Nginx. Попробуйте открыть URL сервера (его IP или домен).

Node.js – это платформа JavaScript для программирования общего назначения, которая позволяет быстро создавать сетевые приложения. Данная платформа работает на Linux, macOS, FreeBSD и Windows. Приложения Node.js можно запускать в командной строке, но данный мануал продемонстрирует, как запустить его как сервис (в таком случае приложение сможет автоматически перезагружаться вместе с сервером или при сбое и будет безопасно работать в производственной среде).

Требования

1: Установка Node.js

Для начала нужно при помощи архива NodeSource установить Node.js.

Установите PPA в домашний каталог, чтобы получить доступ к его содержимому. Для этого вам понадобится curl:

sudo apt update
sudo apt install curl

Используйте curl, чтобы извлечь установочный скрипт необходимой версии (укажите её вместо 10.x ).

Чтобы просмотреть содержимое скрипта, введите:

sudo bash nodesource_setup.sh

Архив PPA будет добавлен в настройки. Индекс пакетов обновится автоматически. После запуска установочного сценария nodesource можно установить пакет Node.js:

sudo apt install nodejs

Чтобы проверить версию Node.js, введите:

nodejs -v
v10.16.0

Примечание: При установке Node.js из архива PPA бинарный файл, как правило, называется nodejs, а не node.

Пакет nodejs содержит бинарный файл nodejs и npm (поэтому вам не придётся устанавливать npm отдельно).

Для отслеживания обновлений npm использует конфигурационный файл в домашнем каталоге. Он создается при первом запуске npm. Запустите эту команду, чтобы убедиться, что npm установлен и файл на месте:

Для работы некоторых компонентов npm (компилирующих исходный код и т.п.) необходим пакет build-essential:

sudo apt install build-essential

Теперь можно приступать к созданию приложения.

2: Создание приложения Node.js

Примечание: Копируя код, не забудьте указать свой IP-адрес вместо условных данных.

Создайте файл приложения Node.js и откройте его в текстовом редакторе (здесь файл называется hello.js):

Вставьте в него такой код:

Сохраните и закройте файл.

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

Примечание: Запуская Node.js таким образом, вы блокируете дополнительные команды. Команды будут доступны после остановки приложения (Ctrl-C).

Чтобы протестировать приложение, откройте новый терминал и подключитесь к localhost с помощью curl:

Если на экране появился следующий вывод, приложение работает правильно:

Если такой вывод не появился, убедитесь, что приложение Node.js запущено и правильно настроено (слушает правильный адрес и порт).

Остановите приложение, нажав Ctrl+C.

3: Установка PM2

Теперь нужно установить PM2. Это менеджер процессов Node.js. PM2 предоставляет простой способ управления и демонизации приложений.

Установку можно выполнить при помощи пакетного менеджера npm.

sudo npm install pm2 -g

При помощи опции –g менеджер npm выполнит глобальную установку PM2.

Менеджер процессов PM2 очень прост в использовании. Рассмотрим основы его работы.

Для запуска приложений в фоновом режиме используется команда pm2 start:

pm2 start hello.js

Также эта команда добавит приложение в список процессов PM2, который выводится на экран при запуске каждого приложения:

[PM2] Spawning PM2 daemon with pm2_home=/home/8host/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/8host/hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐

│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │

├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤

│ hello │ 0 │ fork │ 1338 │ online │ 0 │ 0s │ 0% │ 23.0 MB │ 8host │ disabled │

└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app

Как видите, PM2 автоматически устанавливает App name (имя файла без расширения .js) и PM2 id. Также PM2 предоставляет другую информацию: PID процесса, текущее состояние, использование памяти.

Запущенное с помощью PM2 приложение будет автоматически перезапускаться в случае ошибок или сбоев, однако автозагрузку приложения нужно настроить отдельно. Для этого существует подкоманда startup. Эта команда генерирует и настраивает сценарий запуска менеджера PM2 и всех его процессов вместе с загрузкой сервера.

sudo pm2 startup

На экране появится такой вывод, описывающий конфигурацию сервиса:

Только что вы создали юнит systemd, который запускает pm2 вместе с сервером.

Запустите сервис с помощью systemctl:

sudo systemctl start pm2-root.service

Проверьте состояние юнита:

systemctl status pm2-root.service

Вы получите примерно такой вывод:

pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-07-12 16:09:54 UTC; 4s ago

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

Остановить приложение можно при помощи:

pm2 stop app_name_or_id

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

pm2 restart app_name_or_id

Список приложений, управляемых PM2, можно просмотреть при помощи следующей подкоманды:

Подробную информацию о конкретном приложении можно получить с помощью подкоманды info, указав имя приложения:

pm2 info app_name

Подкоманда monit показывает данные процесса PM2: состояние приложения, использование CPU и памяти:

Запуск PM2 без каких-либо аргументов отобразит страницу справки, на которой можно найти подробные примеры использования PM2.

Теперь нужно настроить обратный прокси.

4: Nginx как обратный прокси-сервер

Итак, приложение запущено и прослушивает localhost. Теперь нужно настроить доступ к нему. Установите Nginx как обратный прокси-сервер.

В мануале из требований вы установили Nginx и поместили конфигурации в файл /etc/nginx/sites-available/your_domain. Откройте его:

sudo nano /etc/nginx/sites-available/your_domain

В блоке server найдите блок location /. Замените его содержимое следующими конфигурациями. Если ваше приложение прослушивает другой порт, укажите его.

Теперь сервер будет отвечать на запросы к root-каталогу. К примеру, если сервер доступен по домену your_domain, то приложение будет доступно по ссылке:

Node.js – это платформа JavaScript для программирования общего назначения, которая позволяет быстро создавать сетевые приложения. Данная платформа работает на Linux, macOS, FreeBSD и Windows. Приложения Node.js можно запускать в командной строке, но данный мануал продемонстрирует, как запустить его как сервис (в таком случае приложение сможет автоматически перезагружаться вместе с сервером или при сбое и будет безопасно работать в производственной среде).

Требования

1: Установка Node.js

Для начала нужно установить Node.js при помощи архива NodeSource.

Установите PPA в домашний каталог, чтобы получить доступ к его содержимому. Для этого вам понадобится curl:

sudo apt update
sudo apt install curl

Используйте curl, чтобы извлечь установочный скрипт необходимой версии (укажите её вместо 8.x ).

Чтобы просмотреть содержимое скрипта, введите:

sudo bash nodesource_setup.sh

Архив PPA будет добавлен в настройки. Индекс пакетов обновится автоматически. После запуска установочного сценария nodesource можно установить пакет Node.js:

sudo apt install nodejs

Чтобы проверить версию Node.js, введите:

Примечание: При установке Node.js из архива PPA бинарный файл, как правило, называется nodejs, а не node.

Пакет nodejs содержит бинарный файл nodejs и npm (потому вам не придётся устанавливать npm отдельно).

Для отслеживания обновлений npm использует конфигурационный файл в домашнем каталоге. Он создается при первом запуске npm. Запустите эту команду, чтобы убедиться, что npm установлен и файл на месте:

Для работы некоторых компонентов npm (компилирующих исходный код и т.п.) необходим пакет build-essential:

sudo apt install build-essential

Теперь можно приступать к созданию приложения.

2: Создание приложения Node.js

Примечание: Копируя код, не забудьте указать свой IP-адрес вместо условных данных.

Создайте файл приложения Node.js и откройте его в текстовом редакторе (здесь файл называется hello.js):

Вставьте в него такой код:

Сохраните и закройте файл.

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

Примечание: Запуская Node.js таким образом, вы блокируете дополнительные команды. Команды будут доступны после остановки приложения (Ctrl-C).

Чтобы протестировать приложение, откройте новый терминал и подключитесь к localhost с помощью curl:

Если на экране появился следующий вывод, приложение работает правильно:

Если такой вывод не появился, убедитесь, что приложение Node.js запущено и правильно настроено (слушает правильный адрес и порт).

Остановите приложение, нажав Ctrl+C.

3: Установка PM2

Теперь нужно установить PM2. Это менеджер процессов Node.js. PM2 предоставляет простой способ управления и демонизации приложений.

Установку можно выполнить при помощи пакетного менеджера npm.

sudo npm install pm2@latest -g

При помощи опции –g менеджер npm выполнит глобальную установку PM2.

Менеджер процессов PM2 очень прост в использовании. Рассмотрим основы его работы.

Для запуска приложений в фоновом режиме используется команда pm2 start:

pm2 start hello.js

Также эта команда добавит приложение в список процессов PM2, который выводится на экран при запуске каждого приложения:

[PM2] Spawning PM2 daemon with pm2_home=/home/8host/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/8host/hello.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬───────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼───────┼──────────┤
│ hello │ 0 │ fork │ 1338 │ online │ 0 │ 0s │ 0% │ 23.0 MB │ 8host │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴───────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app

Как видите, PM2 автоматически устанавливает App name (имя файла без расширения .js) и PM2 id. Также PM2 предоставляет другую информацию: PID процесса, текущее состояние, использование памяти.

Запущенное с помощью PM2 приложение будет автоматически перезапускаться в случае ошибок или сбоев, однако автозагрузку приложения нужно настроить отдельно. Для этого существует подкоманда startup. Эта команда генерирует и настраивает сценарий запуска менеджера PM2 и всех его процессов вместе с загрузкой сервера.

pm2 startup systemd

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

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u 8host --hp /home/8host

Запустите сгенерированную команду, чтобы настроить автозапуск PM2.

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u 8host --hp /home/8host

Также можно сохранить процесс PM2 и соответствующую среду.

Эта команда создаст unit-файл для systemd, запускающий pm2 при запуске сервера. Менеджер pm2, в свою очередь, запустит приложение hello.js. Запустите сервис с помощью systemctl:

sudo systemctl start pm2-8host

Проверьте состояние юнита systemd:

systemctl status pm2-8host

PM2 предоставляет множество других функций, которые позволяют управлять или просматривать информацию о приложениях. Запуск PM2 без каких-либо аргументов отобразит страницу справки, на которой можно найти подробные примеры использования PM2.

Остановить приложение можно при помощи:

pm2 stop app_name_or_id

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

pm2 restart app_name_or_id

Список приложений, управляемых PM2, можно просмотреть при помощи следующей подкоманды:

Подробную информацию о конкретном приложении можно получить с помощью подкоманды info, указав имя приложения:

pm2 info app_name

Подкоманда monit показывает данные процесса PM2: состояние приложения, использование CPU и памяти:

Теперь нужно настроить обратный прокси.

4: Nginx как обратный прокси-сервер

Итак, приложение запущено и прослушивает localhost. Теперь нужно настроить доступ к нему. Установите Nginx как обратный прокси-сервер.

В блоке server найдите блок location /. Замените его содержимое следующими конфигурациями. Если ваше приложение прослушивает другой порт, укажите его.

Читайте также: