Узел.установка js для легкого развертывания и обновления



в настоящее время мы разрабатываем веб-сайт (TYPO3 под Apache) для клиента, который поддерживается приложением node.js/socket.io, которое предоставляет обновления в реальном времени для контента, подаваемого с CMS.



как это наш первый узел.JS project у меня нет никаких лучших практик, когда дело доходит до "идеальной настройки", поэтому я потратил некоторое время на изучение методов развертывания.



несколько вопросов остаются для меня, чтобы добиться хорошей настройки который:




  1. легко для клиента, чтобы развернуть. Это очень важно, потому что наш сайт будет интегрирован в их "живую" установку TYPO3, которая обслуживает множество веб-сайтов и работает на серверах, которые не управляются клиентом, но другой (централизованной) организацией, которая делает вызовы поддержки и серверные изменения медленным процессом.


  2. должно быть легко обновить. как уже упоминалось запрос перезагрузки и внесение изменений в сервер-это медленный процесс, поэтому в идеале установка узла должна перезапускаться / обновляться, когда она получает изменения, которые передаются в live installion с помощью git.



развертывание



общий консенсус, кажется, использовать forever когда дело доходит до развертывания приложений узла, чтобы они продолжали работать. Я проверил forever, и это, кажется, работает нормально при установке npm install forever -g (глобальный). Этот однако потребуется внешняя помощь для глобальной установки в живой среде, поэтому я бы предпочел, чтобы она работала из приложения node_modules каталог, но я не смог создать твердую оболочку, чтобы сделать это.



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




  • простой init.d сценарий?

  • написание a сторожевая обертка?

  • задача планировщика TYPO3, которая проверяет forever статус?


быстрое развитие / перезапуск при обновлении



в настоящее время мы все еще находимся на стадии разработки проекта и каждый раз, когда я делаю изменения в узле.JS приложение я вручную перезапустить node или forever. Это работает, но далеко не идеально.
Есть несколько меньших npm модули, которые проверяют изменения файлов и перезапускают node по обнаруженные изменения, например:




есть ли у кого-нибудь опыт работы с любым из них?



обновление: почему бы вам просто не использовать Кластер?



The модуль кластера обеспечивает аналогичную функциональность через перезагрузка механизм, но не работает с узлом 0.5+. Элемент модуль кластера ядра (узел 0.6+) который заменил его, не имеет всех этих функций, а только обеспечивает кластеризацию. Что, в свою очередь не очень хорошо играет с socket.io по крайней мере, не без использования Redis (что является проблемой для нас, потому что мы не можем заставить другого предварительное обслуживание клиента).



--



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

585   3  

3 ответов:

объединение всех собранных знаний (большое спасибо Джулиан Найт для идей) и методов, протестированных на прошлой неделе, я решил согласиться на решение для развертывания, описанное ниже (я подумал, что было бы неплохо поделиться, чтобы помочь другим с аналогичными вопросами):

автоматический перезапуск при ошибках скрипта и автоматическая перезагрузка при изменении скрипта обрабатывается навсегда, так как он также включает в себя скрипт смотреть, как долго, как навсегда выметывается в узел.JS скрипт.

для этого, я добавил server.js запустить app.js скрипт мы хотим запустить:

сервер.js

var forever = require('forever'),
    child = new(forever.Monitor)('app.js', {
        'silent': false,
        'pidFile': 'pids/app.pid',
        'watch': true,
        'watchDirectory': '.',      // Top-level directory to watch from.
        'watchIgnoreDotFiles': true, // whether to ignore dot files
        'watchIgnorePatterns': [], // array of glob patterns to ignore, merged with contents of watchDirectory + '/.foreverignore' file
        'logFile': 'logs/forever.log', // Path to log output from forever process (when daemonized)
        'outFile': 'logs/forever.out', // Path to log output from child stdout
        'errFile': 'logs/forever.err'
    });
child.start();
forever.startServer(child);

это отслеживает все файлы в каталоге приложения для изменений и перезапускает скрипт, работающий в foreverкак только один меняется. Поскольку журналы и pidfile находятся в подкаталогах приложения, они должны быть проигнорированы из файла смотрите, или скрипт будет цикл перезагрузки:

.foreverignore

pids/**
logs/**

чтобы все это началось при загрузке системы и позволило нам легко управлять сервисом с помощью start node-appи stop node-app мы используем:выскочка Ubuntu. Я объединил два примера (этой и этой один) в тот, который делает работу довольно хорошо:

/ etc/init / node-app.conf

# This is an upstart (http://upstart.ubuntu.com/) script
# to run the node.js server on system boot and make it
# manageable with commands such as
# 'start node-app' and 'stop node-app'
#
# This script is to be placed in /etc/init to work with upstart.
#
# Internally the 'initctl' command is used to manage:
# initctl help
# initctl status node-app
# initctl reload node-app
# initctl start node-app

description "node.js forever server for node-app"
author      "Remco Overdijk <[email protected]>"
version "1.0"

expect fork

# used to be: start on startup
# until we found some mounts weren't ready yet while booting:

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

env HOME=/home/user/node-app-dir

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME=$HOME
    chdir $HOME
    exec /usr/local/bin/node server.js > logs/node.log &
end script

#post-start script
#   # Optionally put a script here that will notifiy you node has (re)started
#   # /root/bin/hoptoad.sh "node.js has started!"
#end script

как Кевин мудро упоминает в своей статье это неразумно, чтобы запустить узел в качестве корня, так что мы изменим, что до exec sudo -u www-data /usr/local/bin/node когда мы перейдем на новые серверы на следующей неделе.

и forever запускается автоматически node server.js который запускается по upstart, и мониторы для сбоев и изменений файлов, сохраняя всю установку работает до тех пор, как мы хотим.

я надеюсь, что это помогает любому.

Так как мой последний ответ на будущее! Вот некоторые другие ссылки, чтобы помочь:

кажется, что еще нет идеального ответа, но есть много людей, работающих с экземплярами производственного узла. Надеюсь, это укажет вам в правильном направлении.

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

Как вы говорите, Forever подходит для тестирования, но на самом деле не имеет того, что требуется для использования в производстве.

Я, кажется, смутно помню, что кластер или что-то подобное может быть принято в сам узел come v0.7

Comments

    Ничего не найдено.