Ноду народу(нет)

Пока разбираюсь с тем что творится в жизни и душе, оставлю несколько заметок по поднятию (и удержанию) сервера node.js на centos. Благо тема лично для меня интересная и несколько познавательная.

Итак, приступим.
Первым делом конечно же надо получить сам сервер. К сожалению в репозитории epel на данный момент валяется довольно старая версия, тогда как мне понадобилась новенькая, свежая, только с сайта разработчика. Поэтому отставить yum install! (:

Качаем ноду:

wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz

Для дистрибутива CentOS берем ссылку Linux binaries (x64) и первое что бросается в глаза, что за .хз
Распаковать такой форматик обычной командой не получится, поэтому делаем

unxz node-v10.15.3-linux-x64.tar.xz
tar --strip-components 1 -xvf node-v* -C /usr/local

Если с первой командой фейл, то надо поставить пакет xz. Что вполне логично. Вторая команда распаковывает получившийся tar, обрезая информацию о версии, сразу в путь где будет жить сервер ноды.
Проверяем всё ли работает:

node --version

Следующим шагом будет установка менеджера пакетов. Кому-то по-вкусу npm, но мне понадобился yarn. Его и будем ставить. Опять же есть вариант с добавлением официального репозитория, но у него в зависимостях старая версия ноды.
Поэтому… идем на гетхуб и качаем актуалочку.

wget https://github.com/yarnpkg/yarn/releases/download/v1.21.1/yarn-1.21.1-1.noarch.rpm
rpm -i --nodeps yarn-1.21.1-1.noarch.rpm
rpm -U --nodeps yarn-1.21.1-1.noarch.rpm // для обновления

Качаем пакет и устанавливаем минуя проверку зависимостей (нода у нас уже стоит).
Проверяем:

yarn --version

Ну и в качестве бонуса информация или правильнее сказать подводные камушки как это всё крутить в виде сервера и с приложением.

Для начала, приложение. Ставим необходимое, настраиваем по вкусу, проверяем работу в ручном режиме.

/path_to_app/node yourapp.js

Если всё работает как надо, добавляем в начало yourapp.js строку

#!/usr/bin/env node

и делаем файл исполняемым (об этом умалчивает часть руководств). Дополнительно я рекомендую создать отдельного пользователя на котором будет крутиться нода и запускать всё от его имени (об этом чуть ниже).

chmod +x yourapp.js
chown -R nodeuser:nodegroup /path_to_app/

А теперь, самое интересное. Пока что нода работает только вызовом команды, и это не здорово! Это же сервер! Поэтому надо сделать ноду демоном и отправить на службу. )))

Для этого создаем файл описания сервиса нашего приложения:

touch /usr/lib/systemd/system/yourapp.service

со следующим содержимым

[Unit]
Description=Your best app
After=network.target

[Service]
ExecStart=/path_to_app/yourapp.js
Restart=always
StandardOutput=syslog
StandardError=syslog
TimeoutSec=90
SyslogIdentifier=yourapp
User=nodeuser
Group=nodegroup
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/path_to_app

[Install]
WantedBy=multi-user.target

После чего сервис будет доступен для управления. В случае неполадок, либо после изменения файла, обновляем список демонов командой systemctl daemon-reload
Поехали! systemctl start yourapp
Если всё запускается и работает, новую службу можно смело добавлять в автозагрузку.
systemctl enabe yourapp

Дополнительно можно вынести лог сервиса в отдельный файл. Для этого создаем файл /etc/rsyslog.d/yourapp.conf со следующим содержанием:

if $programname == 'yourapp' then /var/log/yourapp/logfile.log
& stop

Перезапускаем сервис и наслаждаемся systemctl restart rsyslog

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *