LINUX.ORG.RU

Демонизация nodejs сервера

 , , ,


0

1

Понимаю, что тема уже объезжена не раз, но давайте еще раз подискутируем, что сейчас актуально для демонизации веб-серверов. В частности написанных на NodeJS.

Тема актуальна для продакш приложения, а не для запуска у себя локально на отладку. Большинство серверов у меня на Ubuntu, есть несколько на CentOS.

Сначала для демонизации я использовал forever. Но потом уперся в сложность запуска скриптов не из-под root (или вообще не возможность, уже не помню). Плюс сам скрипт запуска не очень простой (когда у тебя пара десятков разных приложений то это актуально).

Затем начал всё переписывать на upstart. Он в целом мне нравится, скрипты запускаются под нужным юзером, логи пишутся куда надо, версия node выбирается через nvm под каждого юзера (один юзер - один скрипт). Нет конечно команды restart, но это мелочи.

Недавно несколько новых серверов обновил до Ubuntu 16 и там мой любимый upstart перестал работать (танцевать с бубном не хочу). Пришлось переписать скрипты на Systemd. Конфиг демона очень простой и понятный. Только сразу столкнулся с несколькими проблемами:
1) версию node надо указывать руками (типа «/opt/nvm/versions/node/v6.2.0/bin/node» вместо просто «node»). При обновлении версии все скрипты придется править. Текущую версию от nvm он не видит (или я криворук).
2) Все логи пишутся в один файл (syslog). Мои сервера генерируют много отладочной инфы в логах (плюс много запросов), поэтому syslog очень быстро растолстеет. Вполне нормальное явление что один сервер генерит логов на 50-100 Мб в день (каждый день сжимаются logrotate). А если их 10 запущено то уже до гига в день. Как это будет жить в одном файле пока не знаю, но мне кажется это не лучшим образом скажется на скорости записи логов.

Поэтому вопрос:
В какую сторону идти, какому запускателю довериться чтобы не было проблем с будущем?



Последнее исправление: cetjs2 (всего исправлений: 1)

В какую сторону идти, какому запускателю довериться чтобы не было проблем с будущем?

systemd.

Но ты, видимо, хотел спросить как починить проблемы, но забыл.

i_gnatenko_brain ★★★★
()
Ответ на: комментарий от umren

Неплохая вещь, а как он поживает на продакшене с большой нагрузкой? Единственное что не нашел - как посмотреть процессы всех юзеров, а не только текущего? Аналогичная проблема была с forever.

UndeadJoe
() автор топика

1) версию node надо указывать руками

А почему через nvm нельзя? В апстарте у меня было такое

exec bash -c 'source /root/.nvm/nvm.sh && exec node nodeca.js 2>&1'

Vit ★★★★★
()
Ответ на: комментарий от Vit

В upstart я делаю проще:

setuid myuser

и дальше exec node запускает версию которую выбирает это юзер через nvm.

Systemd запускает процесс от имени юзера, но почему в ExecStart просто node не видит, требует полный путь (если node например стоит только под одним юзером).

UndeadJoe
() автор топика

Про pm2 тебе ChALkeR расскажет.

И да,

Ты, видимо, хотел спросить, как починить проблемы, но забыл.

intelfx ★★★★★
()
Ответ на: комментарий от UndeadJoe

но почему в ExecStart просто node не видит,

А ты уверен что у тебя nvm проинициализирован к этому моменту?

Vit ★★★★★
()
Ответ на: комментарий от UndeadJoe

Потому что systemd хочет полный путь. Можешь попробовать /bin/bash -c 'exec node blabla'

deadNightTiger ★★★★★
()
Ответ на: комментарий от UndeadJoe

Короче, делай так:

[Unit]
...

[Service]
User=myuser
ExecStart=/usr/bin/env node ...
intelfx ★★★★★
()

Ставишь SmartOS, распихиваешь свои сервера по зонам, имеешь профит.

anonymous
()

/opt/nvm/versions/node/v6.2.0/bin/node

Изменяемый кусок можно засунуть в файл и прописать в юните:

EnvironmentFile=/path/to/config
В самом файле записать:
VERSION=v6.2.0
А в ExecStart уже пихать что-то типа
ExecStart=/opt/nvm/versions/node/$VERSION/bin/node

Можно еще написать юнит с @ в конце имени, тогда всё после собаки будет в переменной %I. Много намудрить можно.

Radjah ★★★★★
()
Последнее исправление: Radjah (всего исправлений: 3)

Демонизация

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

А теперь расскажи мне чем демонизация для продакшн приложения отличается от «у себя локально на отладку». Ну-ка?

reprimand ★★★★★
()

Для этого существует набор утилит daemontools (не путать с Windows-утилитой для монтирования DVD-образов).

Deathstalker ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.