Как я уже говорил ранее , превратить Linux-машину в сервер Heroku очень просто. Но, прежде чем создавать платный аккаунт на Amazon или Digital Ocean, приятно просто поиграть с ним локально. Мы сделаем это, запустив Dokku на виртуальной машине. Сначала мы настроим среду разработки и проведем локальное развертывание, чтобы увидеть некоторые реальные возможности.
Для работы Dokku локально не требуется сложная среда. Все, что вам нужно, это Git
и Vagrant
.
Подготовка окружающей среды
Ваша коробка должна содержать несколько вещей: Git (учетная запись GitHub), VirtualBox и Vagrant. Если у вас не установлен Vagrant, сделайте это сейчас. Имеет смысл сохранять такое программное обеспечение на своем компьютере.
Здесь вы можете найти некоторые инструкции о том, как это сделать.
Клонирование Докку
Вы должны локально клонировать репо Dokku. В папке вашей разработки запустите:
> git clone [email protected]:progrium/dokku.git > cd dokku
Репозиторий Dokku уже содержит файл Vagrant со всеми необходимыми данными конфигурации.
Локальная сеть
Просто для удобства мы сопоставим 10.0.0.2
IP-адрес (тот, которому назначен компьютер Vagrant) с dokku.me
DNS-именем, которое будет удобно для тестирования.
› 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 [email protected] "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-simple
Express.js, которое обслуживает один HTML-файл с NODE_ENV
переменной.
Итак, вам нужно настроить удаленный репозиторий для отправки:
> git remote add local-deploy [email protected]: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 [email protected] No repository field. npm WARN package.json [email protected] No readme data. npm WARN package.json [email protected] No repository field. ... =====> Application deployed: http://node-simple.dokku.me To [email protected]:node-simple dd05aae..ac5b6da master -> master
Настройка среды
Каждое приложение требует среды. Обычной практикой является установка хотя бы NODE_ENV
переменной для приложений Node.js. Для этого вам нужно создать ENV
файл внутри /home/git/node-simple
папки.
› ssh [email protected] "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 в облаке.