В настоящее время мы разрабатываем веб-сайт (TYPO3 под Apache) для клиента, который поддерживается приложением node.js/socket.io, которое предоставляет обновления в реальном времени для контента, поданного с CMS.
Поскольку это наш первый проект node.js, у меня нет лучшей практики, когда дело доходит до "идеальной настройки", поэтому я потратил некоторое время на исследование методов развертывания.
Несколько вопросов остаются для меня, чтобы достичь хорошей настройки, которая:
-
Легко для клиента развертывать. Это очень важно, потому что наш сайт будет интегрирован в свою "живую" установку TYPO3, которая обслуживает множество веб-сайтов и работает на серверах, которые не управляются клиентом, а другая (централизованная) организация, которая делает вызовы поддержки и изменения сервера медленный процесс.
-
Должно быть легко обновлено. Как упоминалось, запрос на перезагрузку и внесение изменений в сервер - это медленный процесс, поэтому рекомендуется, чтобы установка node должна перезапускаться/обновляться, когда она получает внесенные изменения на живую установку с помощью
git
.
Развертывание
Кроме того, forever
работает нормально, но его нужно запускать вручную. Каким будет наилучший подход к тому, чтобы он запускался при загрузке сервера и продолжал работать?
- Простой
init.d
script? - Написание сторожевой обертки?
- Задача планировщика TYPO3, которая проверяет статус
forever
?
Быстрая разработка/Перезагрузка при обновлении
В настоящее время мы все еще находимся на стадии разработки проекта, и каждый раз, когда я вношу изменения в приложение node.js, я вручную перезапускаю node
или forever
. Это работает, но далека от идеала.
Существует несколько небольших модулей npm
, которые проверяют изменения файлов и перезапускают node
при обнаруженных изменениях, например:
- Nodemon
- Node.js Supervisor
- Bounce
- Nodules (который не требует перезапуска node, поэтому было бы проще объединить с
forever
) - Up
Есть ли у кого-нибудь опыт с любым из них?
Обновление: почему бы вам просто не использовать кластер?
Кластерный модуль обеспечивает аналогичную функциональность с помощью reload, но не работает с node 0.5+. основной кластерный модуль (Node 0.6+), который заменил его, не имеет всех этих функций, но обеспечивает кластеризацию. Что, в свою очередь, не очень хорошо работает с socket.io. По крайней мере не без использования Redis (это проблема для нас, потому что мы не можем заставить другую службу prereq для клиента).
-
Очевидно, я пытаюсь найти наиболее стабильное решение, которое объединяет обновление-restarter с forever
, прежде чем передать проект клиенту, и я действительно надеюсь, что кто-то произведет проверенную комбинацию методов.