Статьи

Играя с Докку на Вагранте

Как я уже говорил ранее , превратить Linux-машину в сервер Heroku очень просто. Но, прежде чем создавать платный аккаунт на Amazon или Digital Ocean, приятно просто поиграть с ним локально. Мы сделаем это, запустив Dokku на виртуальной машине. Сначала мы настроим среду разработки и проведем локальное развертывание, чтобы увидеть некоторые реальные возможности.

Для работы Dokku локально не требуется сложная среда. Все, что вам нужно, это Gitи Vagrant.

Подготовка окружающей среды

Ваша коробка должна содержать несколько вещей: Git (учетная запись GitHub), VirtualBox и Vagrant. Если у вас не установлен Vagrant, сделайте это сейчас. Имеет смысл сохранять такое программное обеспечение на своем компьютере.

Здесь вы можете найти некоторые инструкции о том, как это сделать.

Клонирование Докку

Вы должны локально клонировать репо Dokku. В папке вашей разработки запустите:

> git clone git@github.com:progrium/dokku.git
> cd dokku

Репозиторий Dokku уже содержит файл Vagrant со всеми необходимыми данными конфигурации.

Локальная сеть

Просто для удобства мы сопоставим 10.0.0.2IP-адрес (тот, которому назначен компьютер Vagrant) с dokku.meDNS-именем, которое будет удобно для тестирования.

› sudo nano /private/etc/hosts

Поместите последние две строки, как показано в моем примере:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
10.0.0.2        dokku.me
10.0.0.2        node-simple.dokku.me

Запустите виртуальную машину

В dokkuпапке вы должны запустить:

> vagrant up

Он начнет готовить новую виртуальную среду для вас:

 vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 80 => 8080 (adapter 1)
[default] Running any VM customizations...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.

У меня была проблема с этим шагом несколько раз, поэтому, если ваша машина не может быть загружена, попробуйте запустить vagrant reload, что должно помочь.

Для запуска виртуальной машины, установки на нее Git и установки Docker и Dokku потребуется около 20 минут. Как только это будет сделано, можно получить доступ к машине с помощью ssh.

Последнее, что вам нужно сделать, это загрузить свой sshключ на сервер Dokku, чтобы вы могли git pushтам кодировать.

> cat ~/.ssh/id_rsa.pub | ssh root@dokku.me "sudo gitreceive upload-key alexanderbeletsky"

Вы можете использовать пароль root Vagrant по умолчанию, который является «vagrant».

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

> vagrant ssh

Затем проверьте версию Docker:

> docker -v
Docker version 0.6.1, build 5105263

Экземпляр готов к развертыванию.

Развернуть в Докку

Если вы все еще там, вы можете просто выйти из sshсеанса Vagrant и зайти в свою папку с Node.js. Я буду использовать очень простое приложение под названием Node-simpleExpress.js, которое обслуживает один HTML-файл с NODE_ENVпеременной.

Итак, вам нужно настроить удаленный репозиторий для отправки:

> git remote add local-deploy git@dokku.me:node-simple

Вот и все. Вы готовы к первому развертыванию, просто отправьте код на компьютер с помощью Dokku:

git push local-deploy master
› git push local-deploy master --force
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 289 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
-----> Building node-simple ...
       Node.js app detected
-----> Resolving engine versions
       Using Node.js version: 0.8.25
       Using npm version: 1.2.30
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
       npm WARN package.json application-name@0.0.5 No repository field.
       npm WARN package.json application-name@0.0.5 No readme data.
       npm WARN package.json send@0.1.0 No repository field.
       ...
=====> Application deployed:
       http://node-simple.dokku.me

To git@dokku.me:node-simple
   dd05aae..ac5b6da  master -> master

Настройка среды

Каждое приложение требует среды. Обычной практикой является установка хотя бы NODE_ENVпеременной для приложений Node.js. Для этого вам нужно создать ENVфайл внутри /home/git/node-simpleпапки.

› ssh root@dokku.me "echo export NODE_ENV="development" > /home/git/node-simple/ENV"

Теперь давайте package.jsonповторно развернем приложение, изменим версию и снова вставим код.

› git push local-deploy master

Теперь приложение готово для доступа.

Доступ к приложению

Откройте Chrome и нажмите http://node-simple.dokku.me, и вы увидите этот ответ:

Вы можете поиграть с ним немного больше, просто изменив некоторый код конечных точек Node.js и повторно разместив его. Каждый раз новый экземпляр Docker запускается и обслуживается http://node-simple.dokku.me. Опыт развертывания подобен тому, который вы бы имели с Heroku.

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

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