10

Запуск nodejs в виде демона

Столкнулся недавно с интересной задачей:
Разработчик пишет сайт с использованием node как сервера. Все в общем просто, ему дан доступ по ssh к серверу, он заливает код в директорию, пишет npm start, его сервер запускается на порту 3000, nginx берет proxy_pass на этот порт, все прекрасно и замечательно.... Но!
Как только разработчик покинет сервер, консоль закроется и процесс node закроется тоже!
Пичалько...
Ну мы же могли бы прописать npm start либо в rc.local, либо написать конфиг для systems, правильно? Да, но нет... Если так сделать, то разработчику нужно давать права на перезапуск служб, а это совсем не желательно...
Благо, есть в node хороший пакет - nodemon.
Устанавливается просто
npm install -g nodemon
Далее создаем простой баш скрипт такого вида, с названием, например, myscript.sh:


#!/bin/bash

DIR=<путь к вашему проекту>

USER=www-data

sudo -Hu $USER nodemon -w $DIR -e js,css,html,json --exec npm start --prefix $DIR > /dev/null 2>&1 &

То что после -e это расширения файлов, за изменением которых вы хотите следить. Можно там и ttf добавить, ну или еще что.
www-data это стандартный пользователь nginx, но если в вашем дистрибутиве не так, то прописывайте любого другого непривилегированного пользователя.
Устанавливаем этому скрипту права на выполнение
chmod +x myscript.sh
Далее прописываем выполнение в файле /etc/rc.local
По дефолту его нет, создаем:
touch /etc/rc.local
приводи к виду:

#!/bin/sh
/bin/bash <путь к скрипту>./myscript.sh

exit 0

И делаем его исполняемым.
Перезагружаем сервер, сервис запустится автоматом. А когда разработчик будет менять файлы проекта с указанными расширениями (js,css,html,json), сервис будет автоматически перезапускаться и применять изменения
Ссылка на проект nodemon https://github.com/remy/nodemon/

Лига Сисадминов

2.2K постов18.8K подписчиков

Правила сообщества

Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.