@Alex_At_Net
Обращайтесь, помогу - https://t.me/codecraft_phd

Как организовать node.js приложения на сервере?

Доброго!

Интересует решение вроде бы простой задачи. Входные условия таковы:

Есть VPS сервер с Debian 6. Root shell, все как полагается. Настройки по умолчанию (стандартный init.d и т.п.). На нем хочется захостить парочку простых приложений на node.js. Думаю организовать следующим образом:

/srv/www/[domain]/application/server.js

т.е. по приложению на домен (субдомен и т.п.)

Например:
/srv/www/mysite.com/application/server.js
/srv/www/test.mysite.com/application/server.js
/srv/www/othersite.com/application/server.js

и т.д.

Естественно, хочется сделать так, что бы:

1. Приложения автоматически стартовали при рестарте сервера.
2. Приложения автоматически стартовали после падения (что для node.js довольно частое событие, как я понял).
3. Была возможность перегрузить приложение вручную.
4. Разные вкусности, типа отдельных логов на приложение и т.п.
5. Просто добавлять новые приложения. Идеально, вообще говоря, что-то вроде того, как в apache сайты добавляются. Например: node_enapp project1 && node_apps reload.

Есть такое, или это пока мечты?

BTW: сейчас все примерно то-же самое делается путем написания глючных daemon-врапперов и monit.

Спасибо.

Обновление: В идеале, хотелось бы поставить какую-нибудь софтину и получить сразу счастье. :) Но можно и пошаговую инструкцию минут на 5-10, которая приведет к выполнению перечисленных 5и пунктов.

Обновление 2: Похоже, supervisor — это тренд. Пойду гуглить. Спасибо.
  • Вопрос задан
  • 8430 просмотров
Пригласить эксперта
Ответы на вопрос 6
pomeo
@pomeo
расскажу как у меня сделано. Есть сервер, внутри Linux Containers, в каждом контейнере отдельное node.js приложение. На самом сервере вне контейнеров стоит nginx, который проксирует запросы к контрейнерам.
Дальше, внутри контейнера nvm с node.js и supervisor. Node.js работает под nobody внутри контейнера.
Куски того как это все настраивается можно глянуть у меня здесь express(node.js) + capistrano + supervisord, здесь Install LXC (Linux Containers) и здесь Install hubot on ubuntu. Записям год, что-то немного могло измениться.
Создание нового приложения максимально просто, у меня заранее лежит контейнер sample, в котором уже стоит и supervisor и node.js в nvm. Просто делаю lxc-clone контейнеру и прописываю ip с mac адресом.
Ответ написан
blo
@blo
инженер-программист
Пункты 1-4 у себя решил использованием upstart.
5 пункт — решается не сложным скриптом (bash, python)
Ответ написан
@cat_crash
1. Управлять автозапуском, рестартом можно удобно при помощи supervisor
2. Watchdog служит как раз для этого
3. Supervisor как раз и такое умеет
4. Supervisor как раз и такое умеет
5. Тут думаю можно написать не глючный wrapper
Ответ написан
dkiyatkin
@dkiyatkin
У меня похожая ситуация, только сайты расположены таким образом: /var/www/[name-site.ru]/.index.js.
Чтобы приложение не падало в .index.js добавлено:
process.on('uncaughtException', function (err) { console.log('Caught exception: ' + err); });
Автостарт сайтов при загрузке системы происходит с помощью самописного скрипта — /etc/init.d/nodejs.
Ответ написан
Комментировать
@xdenser
У меня forever(sudo npm forever -g) для 2,3,4, автостарт прописан в /etc/init.d/local
строчками

forever start app1/server.js
forever start app2/server.js

Для логов лучше log4js — ничего специально даже делать не надо, он умеет консоль перенаправлять.
Хотя, если с самого начала им пользоваться, то конечно лучше спец методы вызывать (info, error и т.д.).

5. писать руками.

Для слежения за работоспособностью приложения желательно иметь дополнительный критерий, а не только запущено/незапущено. Например, периодически делать ему запрос, и ждать ответа. По таймауту перезапускать.
Ответ написан
Комментировать
Не supervisor едины — есть еще Runit я пользуюсь им. Там вообще пару строк на bush написать и все. А вообще в node.js есть cluster, которым все это можно сделать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы