
Деплоймент приложения всегда является критической точкой цикла разработки… и никогда не бывает лёгким. Если Вы пользуетесь услугами хостинговых провайдеров, то вероятнее всего Вам уже предоставили достаточный всяческих удобств сервис. В данной статье я расскажу про развёртывание приложений без создания сложной хостинговой инфраструктуры…
Для начала определимся с технологией. Использовать будем, естественно, только то, что предоставила нам платформа разработки — 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

Запускаем сервер на 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