- PVSM.RU - https://www.pvsm.ru -
dotCloud [1] — облачная платформа для
Ее преимущества:
Но есть и недостатки:
node 0.4.10
. Но это можно исправить.
Warning: Большая часть того, что написано дальше, является кратким пересказом официальной документации [4]. Конечно, лучше будет почитать полную версию.
При работе с DotCloud слово приложение (application) означает совокупность сервисов (services), которые вы используете. Сервисом может быть один процесс node.js (php, python, ruby и т.д.) или один экземпляр базы данных. Например, из сервисов php и mysql можно сделать приложение «блог на wordpress».
Когда вы зарегистрируетесь на сайте, в разделе Settings увидите так называемый API Key — случайно сгенерированную последовательность букв и цифр. Она понадобится в дальнейшем для работы с платформой.
Все действия с DotCloud выполняются с помощью специальной утилиты dotcloud
(в документации ее называют CLI — Command-Line Interface).
CLI [5] написан на питоне и использует менеджер пакетов EasyInstall, поэтому сначала нужно установить его [6]:
sudo apt-get install python-setuptools python-dev build-essential
и потом
sudo easy_install pip && sudo pip install dotcloud
В результате у вас в системе появится утилита dotcloud. При первом запуске надо будет ввести ваш API Key.
Простейший пример приложения нашелся вот здесь [7]. Но оно ничего не делает, а потому не особо интересно.
Допустим, у вас уже есть какое-то работающее приложение node.js. Можно воспользоваться примером [8] из этой статьи [9]. Нужно будет внести одно изменение: dotCloud-приложения обязаны слушать порт 8080 [10]. После деплоймента оно будет доступно как обычно, по 80-му порту, но но в исходниках это должен быть именно 8080.
Для развертывания нужно создать и положить в правильные места на файловой системе три файла: dotcloud.yml
, supervisord.conf
и package.json
. В итоге должна получиться такая структура:
ninja_on_dotcloud/
|_ dotcloud.yml
|_ ninja-store/ Эта папка станет корневым каталогом вашего сайта
|_ supervisord.conf
|_ package.json
|_ app.js стартовый файл приложения
|_ ... прочие файлы и папки вашего сайта
Файл dotcloud.yml
описывает набор сервисов, которые использует наше приложение. Сервис у нас один, поэтому dotcloud.yml
выглядит так:
www:
type: nodejs
approot: ninja-store
Здесь www
— имя сервиса (теоретически может быть любым), ninja-store
— наша папка с исходниками.
supervisord.conf
тоже простой:
[program:node]
command = node app.js
directory = /home/dotcloud/current
В данном случае app.js
— основной файл нашего приложения.
package.json [11] — стандартный файл npm [12]. Для размещения на dotCloud имеет значение только секция dependencies [13], в которой перечисляются пакеты, используемые вашим приложением.
Чтобы все это попало на сервер, нужно выполнить две команды.
Сначала создать приложение
dotcloud create -f sandbox nstore
Ключ -f
задает application flavor [14] — грубо говоря, тарифный план и опции nstore
— имя нашего приложения, понадобится для дальнейшего управления.
И, наконец, отправить код нашего сайта на сервер
dotcloud push nstore ./ninja_on_dotcloud
В результате, если все пройдет хорошо, то в консоли напишут адрес, по которому приложение станет доступно. В моем случае это http://nstore-beardog.dotcloud.com/ [15]. Правила, по которым формируется этот URL, могут меняться: год назад просто генерировалась случайная последовательность символов, сейчас комбинируется имя приложения и акаунта. Использовать свой собственный домен с бесплатным акаунтом нельзя.
А если будет плохо, прийдется смотреть логи.
Если приложение успешно запустилось, логи можно посмотреть командой [16]
dotcloud logs имя_приложения.имя_сервиса
Бывает, что приложение не удается запустить (например, если забыть указать зависимость в package.json). Тогда нужно использовать что-то вроде очень урезанного ssh-доступа [17]. Например, вот так я обнаружил, что в версии 0.4.10 нехватает модуля zlib [18], нужного для работы express.js:
user@u5$ dotcloud ssh ninjastore.www
# $SHELL
dotcloud@ninjastore-default-www-0:~$ ls /var/log/supervisor/
node-stderr---supervisor-7vur0l.log node-stdout---supervisor-xqRYq7.log supervisord.log
dotcloud@ninjastore-default-www-0:~$ tail --lines=20 /var/log/supervisor/node-stderr---supervisor-7vur0l.log
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Cannot find module 'zlib'
at Function._resolveFilename (module.js:317:11)
at Function._load (module.js:262:25)
at require (module.js:346:19)
at Object.<anonymous> (/home/dotcloud/node_modules/express/node_modules/connect/lib/middleware/compress.js:14:12)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at require (module.js:346:19)
at Object.compress (/home/dotcloud/node_modules/express/node_modules/connect/lib/connect.js:89:14)
Названия файлов с логами могут измениться с выходом новой версии платформы, поэтому четкой инструкции дать не получится. Скорее всего, где-то в /var/log/
есть файл с нужной информацией.
Благодаря хаку, продемонстрированному в этом репозитории [19], на dotCloud можно установить любую версию node.js.
Нужно:
node_version
указать нужную версиюhellonode
на свои исходникиdotcloud push
, как обычно.Важно: удалите папку .git после клонирования. Если dotcloud ее заметит, то попытается забрать исходники с github'а [20], вместо того, чтобы использовать локальную версию.
В результате в процессе установки dotcloud
скачает и скомпилирует исходники указанной версии node. При следующих вызовах push
компиляция проводиться не будет.
Возможно, возникнут проблемы с логами, тогда можно попробовать вот эту версию [21]
Еще одна возможная проблема — порт, который должно слушать приложение. Почему-то в том примере он задается вот так [22]:
}).listen(process.env['PORT_WWW'] || 8080);
Все, спасибо за внимание. Вот здесь [23] была еще одна статья про dotcloud, mongodb и node. А еще год назад на хабре уже появлялась статья [24] с таким названием (к сожалению, я ее нашел уже после того, как написал свою)
Автор: beardog
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/node-js/10846
Ссылки в тексте:
[1] dotCloud: https://www.dotcloud.com/
[2] хостинга: https://www.reg.ru/?rlink=reflink-717
[3] heroku: http://www.heroku.com/pricing#2-0
[4] документация: http://docs.dotcloud.com/firststeps/platform-overview/
[5] CLI: http://docs.dotcloud.com/firststeps/install/
[6] установить его: http://www.linuxask.com/questions/how-to-install-easy-install-for-python-in-ubuntu
[7] здесь: https://github.com/atodorov/dotcloud-nodejs-hello-world
[8] примером: https://github.com/hacksparrow/ninja-store
[9] статьи: http://www.hacksparrow.com/express-js-tutorial.html
[10] слушать порт 8080: http://docs.dotcloud.com/services/nodejs/#listen-on-port-8080
[11] package.json: http://npmjs.org/doc/json.html
[12] npm: http://npmjs.org/doc/
[13] dependencies: http://npmjs.org/doc/json.html#dependencies
[14] application flavor: http://docs.dotcloud.com/guides/flavors/
[15] http://nstore-beardog.dotcloud.com/: http://nstore-beardog.dotcloud.com/
[16] командой: http://docs.dotcloud.com/guides/logs/#streaming-the-logs
[17] ssh-доступа: http://docs.dotcloud.com/guides/logs/#read-the-archives
[18] zlib: http://nodejs.org/api/zlib.html
[19] этом репозитории: https://github.com/dotcloud/node-on-dotcloud
[20] забрать исходники с github'а: http://docs.dotcloud.com/guides/git-hg/
[21] вот эту версию: https://github.com/afoong/node-on-dotcloud
[22] вот так: https://github.com/dotcloud/node-on-dotcloud/blob/master/hellonode/server.js
[23] Вот здесь: http://steveram.info/blog/2011/08/02/dotcloud-deploying-a-nodejsmongodb-app/
[24] статья: http://habrahabr.ru/post/125375/
Нажмите здесь для печати.