Pull to refresh

Развёртывание приложений node.js

Reading time 3 min
Views 69K

Деплоймент приложения всегда является критической точкой цикла разработки… и никогда не бывает лёгким. Если Вы пользуетесь услугами хостинговых провайдеров, то вероятнее всего Вам уже предоставили достаточный всяческих удобств сервис. В данной статье я расскажу про развёртывание приложений без создания сложной хостинговой инфраструктуры…

Для начала определимся с технологией. Использовать будем, естественно, только то, что предоставила нам платформа разработки — node.js. На сервере будет работать некий web-сервис, который будет принимать запросы и заниматься всей «грязной» работой. На клиенте — command-line tool. Ну как без него?

Итак, сервис устанавливается следующим образом:
npm install -g node-deploy-server --unsafe-perm


Клиент, не сложнее…
npm install -g node-deploy-client


Софт стоит, теперь пора рассказать как его конфигурировать, чтобы подружить вместе сервис с клиентом.

Настройка сервера.

Файл конфигурации носит имя nodehosting.json и находится в папке /etc для Linux систем и в корне модуля для Windows.
Полный текст конфигурационного файла
{
    "port" : 15478,
    "username" : "admin",
    "password" : "admin",
    "applications" : {
        "application1" : {
            "path" : "../applications",
            "foreverConfig" : {
                "cwd" : "../applications/application1"
            },
            "startProcess" : true
        }
    }
}


  • port — TCP порт на котором будет работать сервис
  • username и password — тут пояснять нечего...
  • объект applications. Именами свойств этого объекта являются имена приложений, за развёртывание которых отвечает сервис.

Настройка приложения:
  • path — общая корневая папка приложений. Не беспокойтесь её создавать. Всё сделают за Вас.
  • foreverConfig — Приложения запускаются с помощью forever-monitor, поэтому более чем официальный источник мне рассказать нечего.
  • startProcess — автоматический запуск процесса после развёртывания

Отдельно хочу сказать про установку зависимостей. Она выполняется с помощью команды npm install в корневой папке приложения. Для примера это ../applications/application1. Таким образом, если необходимо при развёртывании выполнить дополнительные действия их достаточно прописать в поле scripts.install в package.json

Настройка клиента.

В корневую папку приложения (рядом с package.json) необходимо положить файл с именем .deploy и следующего содержания:
{
	"dev" : {
		"url" : "http://admin:admin@localhost:15478"
	},
	"staging" : {
		"url" : "http://admin:admin@192.168.1.3:15478"
	}
}

В отличии от сервера здесь не густо — самый минимум, чтобы связаться с сервером. В файле можно указать несколько конфигураций. Т.е. можно определить несколько различных серверов для развёртывания, например: dev, staging, production. Выбор конкретного сервера производится клиентской утилитой. Собственно именем конфигурации в тестовом примере является dev и staging. Более подробный пример можно посмотреть на github

Запуск сервера.

Запускаем сервер на Linux
service nodehosting start

Не забудьте выполнить команду chkconfig nodehosting on если хотите чтобы сервис запускался при запуске ОС.

Запускаем сервер на Windows
sc start nodehosting.exe


Запуск клиента

Для деплоя приложения необходимо перейти в его корневую папку и в командной строке выполнить
deploy dev

Вывод команды выглядит примерно так:


Как это работает?

Клиентская часть открывает файл package.json и использует поле «name» в качестве имени приложения (ничуть не странно). Далее упаковывает корневую папку исключая из архива папку node_modules. Получившийся архив отправляет POST`ом по http протоколу по адресу указанному в .deploy файле. Ну а на сервере происходят процессы уже описанные выше.

Благодарности.

Проект молодой. Так что конструктивная критика и предложения ожидаются. Исходники хостятся на github

Если чё вдруг.

Протестировано на парочке RedHat-based дистрибутивов, Debian 7.2 (wheezy) и Windows 7.

PS

C января 2014 года доступен web-интерфейс. Таким образом настройка приложений стала намного проще.

А так же…
  • Перед развёртыванием приложения не обязательно создавать через интерфейс новое приложение, и вообще что-либо настраивать. Достаточно с клиента выполнить запрос и приложение задеплоится с параметрами по умолчанию.
  • Переключение сервера в режим SSL.
  • Проверена работа на следующих ОС: CentOS 6, Fedora 18, Debian 7.2 (wheezy), Windows 7, Windows 8
Tags:
Hubs:
+18
Comments 27
Comments Comments 27

Articles