Как развернуть приложение Rails с помощью azk

Статья от azk

Вступление

azk - это легкий инструмент с открытым исходным кодом, который можно использовать для организации сред приложений.

Получали ли вы когда-нибудь приложение, работающее на вашей локальной рабочей станции, только чтобы обнаружить, что установка полностью отличается при развертывании его на рабочем сервере?

В этой статье представлен инструмент оркестровки azk, который в настоящее время реализован для these приложений, но применим ко многим другим. При развертывании приложения, готового к azk, вы можете запускать его локально * и * в рабочей среде с минимальными усилиями.

azk позволяет быстро и легко запускать не только приложение, но и все его зависимости, включая требуемую ОС, языки, платформы, базы данных и другие зависимости (трудоемкая, повторяющаяся, длинная и, следовательно, подверженная ошибкам задача), будь вы в вашей локальной среде или на сервере.

Цель этой статьи - показать, как azk работает как инструмент оркестровки, используя в качестве примера простое приложение Rails под названием Stringer.

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

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

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

Как это устроено

Во-первых, azk управляет средой приложения на вашем локальном компьютере. Как только приложение будет запущено локально, azk также автоматизирует его развертывание в Droplet.

Поскольку azk всегда запускает приложения из исходного кода, вы также можете поработать с приложением локально (если хотите), а затем развернуть или выполнить откат, опять же, без особых дополнительных действий.

azk изолирует среды с помощью containers, поэтому можно безопасно запускать приложения на локальном компьютере. Он работает как с новыми проектами, начатыми с нуля, так и с ранее существующим кодом.

Использование azk с пользовательскими приложениями

Используя текущий список applications, предварительно сконфигурированный для работы с azk в качестве примеров, с некоторой дополнительной работой вы можете настроить любой проект для работы с azk.

Для этого add a Azkfile к проекту.

Это простой файл манифеста, в котором перечислены элементы, необходимые для запуска приложения, и кратко изложены их взаимосвязи (ОС, языки, базы данных и т. Д.).

Преимущества добавления + Azkfile + в ваш проект включают в себя:

  • Используйте azk для автоматизации настройки среды для вашего проекта как локально, так и при развертывании

  • Другие люди, которые хотят развернуть ваше приложение, могут сделать это с помощью Azk

Создание + Azkfile + выходит за рамки данного руководства, но вы можете проверить документацию azk, чтобы узнать how для создания Azkfile и узнать, как http: // docs.azk.io/en/run-project-button/[add кнопку Run Project GitHub] в ваш код.

Предпосылки

Чтобы следовать этому руководству, вам понадобится локальный компьютер с любой из этих операционных систем (64-разрядной) для вашей локальной среды:

  • Mac OS X 10.6 (Snow Leopard) или более поздняя версия

  • Ubuntu 12.04, 14.04 или 15.10

  • Fedora 21 или 22

Вы также должны быть в состоянии сделать + git + коммиты.

  • На вашем локальном компьютере должен быть установлен Git. См. Https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-14-04[this серий об использовании Git] для инструкций Linux или посетите https: // git- scm.com/downloads[Git страница загрузки]

  • Убедитесь, что вы выполнили предложенные команды + git config --global user.email" [email protected] "+ и + git config --global user.name" Your Name "+ перед запуском учебного пособия; см. предыдущие ссылки для получения подробной информации о Git

Обратите внимание, что наличие активной капли не является обязательным требованием для этого урока. azk создаст его для вас, используя API DigitalOcean.

Пользователи Linux: установка Docker

Если вы используете Linux (Ubuntu или Fedora), вам необходимо установить Docker 1.8.1 или более позднюю версию в качестве программного обеспечения контейнера.

Один из способов установить Docker - запустить скрипт установки Docker. (В общем, * убедитесь, что вы понимаете, что делает скрипт, прежде чем запускать его *):

wget -nv  -O- -t 2 -T 10 | bash

Если вы хотите узнать больше об установке Docker в Linux, проверьте instructions, доступный в официальной документации, или https://www.digitalocean.com/community DigitalOcean. / tutorials / how-to-install-and-use-docker-Getting-Start [Статья по установке Docker].

Пользователи Mac OS X: установка VirtualBox

Вам понадобится VirtualBox 4.3.6 или более поздняя версия в качестве программного обеспечения контейнера.

Чтобы установить VirtualBox, download соответствующий пакет установки Virtualbox со страницы официальной загрузки.

Шаг 1 - Установка AzK локально

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

Если у вас уже установлена ​​более старая версия azk, вы можете использовать этот скрипт установки для обновления azk.

Кроме того, ознакомьтесь с package инструкциями по установке для поддерживаемых операционных систем.

Установка azk в Linux

Если вы используете Linux (Ubuntu или Fedora), выполните эту команду в терминале, чтобы установить azk, используя скрипт проекта. Мы рекомендуем * проверить любой скрипт перед его запуском * в вашей системе:

wget -nv http://azk.io/install.sh -O- -t 2 -T 10 | bash

После завершения установки выйдите из системы, а затем снова войдите в систему, чтобы все изменения вступили в силу.

Причина, по которой вам нужно выйти из системы, заключается в том, что в процессе установки ваш пользователь будет добавлен в группу * docker *. Это обязательный шаг, чтобы мы могли использовать Docker, не будучи пользователем * root *. Вы должны выйти из текущего сеанса, чтобы это вступило в силу.

Если вы хотите узнать больше о Docker group, вы можете проверить официальную документацию Docker.

Установка azk в Mac OS X

Запустите эту команду в терминале, чтобы установить azk, используя скрипт проекта. Мы рекомендуем * проверить любой скрипт перед его запуском * в вашей системе:

curl -sSL http://www.azk.io/install.sh | bash

Шаг 2 - Проверка установки azk

После завершения установки azk выполните команду ниже, чтобы проверить, был ли процесс установки успешным:

azk version

Эта команда проверяет установленную версию azk. Если он возвращает номер версии (например, + azk 0.17.0 + или более поздняя версия), мы можем идти дальше, и вы можете перейти к следующему шагу.

Поздравляем с установкой azk для вашей локальной среды!

Если нет, прочитайте один из разделов по устранению неполадок ниже для помощи.

  • Устранение неполадок при установке azk для Linux *

Давайте проверим установленную версию Docker, запустив:

docker version

Вам понадобится версия 1.8.1 или новее.

Однако, если вы получаете сообщение об ошибке, это означает, что у вас еще не установлен Docker. В этом случае follow конкретная инструкция по установке для вашей ОС из документации Docker.

После того, как вы подтвердите, что установлена ​​правильная версия Docker, запустите эту команду от имени * sudo user *, чтобы убедиться, что ваш пользователь входит в группу * docker *:

id -Gn

Если ваш список групп включает * docker *, это означает, что он правильно настроен. В противном случае, если среди них нет слова * docker *, выполните эту команду, чтобы добавить пользователя в группу:

sudo usermod -aG docker

Затем выйдите и войдите снова.

Проверьте команду + id -Gn + еще раз, чтобы убедиться, что она возвращает список групп с * docker * среди них.

Если этих инструкций недостаточно для правильной работы Docker (например, вы все еще не можете успешно выполнить команду + docker version +), пожалуйста, refer к инструкциям по установке Docker.

  • Устранение неполадок при установке azk для Mac OS X *

Убедитесь, что у вас установлен VirtualBox:

which VBoxManage

Если при этом возвращается путь к файлу (например, + / usr / local / bin / VBoxManage +), мы можем продолжить. В противном случае, если он возвращает сообщение «not found», это означает, что у вас не установлен VirtualBox.

В этом случае download и установите установочный пакет VirtualBox со своего официального веб-сайта.

(Необязательно) Шаг 3 - Изучение демонстрационного приложения, Stringer

Мы выбрали Stringer в качестве демонстрационного приложения для этого руководства, поскольку это простое приложение, которое уже настроено для работы с azk.

Это приложение Rails с четко определенным сценарием использования: простой читатель RSS.

(Необязательно) Шаг 4. Настройка пользовательского приложения для использования azk

В то время как основной целью этого руководства является показать, как работает azk для приложения, в котором уже есть детали среды, прописанные для azk, в долгосрочной перспективе этот инструмент наиболее полезен, когда его можно использовать для развертывания любого приложения.

Итак, посмотрите, как this разветвленная версия Stringer сравнивается с the основной репозиторий Stringer.

Версия azk имеет только два дополнения к оригинальной версии Stringer:

  • + Azkfile +, который предоставляет информацию об окружении для azk

  • Кнопка azk * Run Project *

Вы можете узнать больше о том, как заставить azk работать с другими приложениями, из документации azk на Azkfile и http://docs.azk.io/en/run-project. Кнопка / [Кнопка запуска проекта].

Далее мы посмотрим, как на GitHub выглядит приложение, дружественное к азкам.

(Необязательно) Шаг 5. Использование кнопки запуска проекта azk на GitHub

Частью лучших практик azk для проектов GitHub является то, чтобы было очень очевидно, как запустить этот проект с помощью azk. Таким образом, вместо того, чтобы просто показывать команду azk в середине файла readme проекта, проекты, использующие azk, могут использовать кнопку * Run Project *, чтобы визуально изолировать команду azk.

Стрингер использует эту кнопку.

Посетите раздел Running Localally разветвленной версии Azk Stringer.

Нажмите кнопку * Run Project *.

изображение: https: //assets.digitalocean.com/articles/ask/UGWmrZM.png [кнопка «Выполнить проект» в проекте Stringer]

Когда вы в первый раз нажмете кнопку * Run Project *, вы увидите краткое объяснение того, что происходит. Когда вы будете готовы двигаться дальше, просто нажмите * OK, DISMISS * в нижней части объяснения.

изображение: https: //assets.digitalocean.com/articles/ask/LqWwheV.png ['Что такое азк?' сообщение]

Затем вы попадете на страницу с командой azk для проекта Stringer:

azk start -o run-project/stringer

image: https: //assets.digitalocean.com/articles/ask/tmDRhbw.png [Команда для запуска приложения Stringer с помощью azk: azk start -o run-project / stringer]

Вы всегда можете щелкнуть ссылку «Что это?» В правом верхнем углу, чтобы снова увидеть объяснение.

В центре экрана находится командное окно с тремя вкладками: * curl *, * wget * и * azk *. Поскольку у нас уже установлен azk, мы можем использовать * azk *.

Это команда, которую мы будем использовать на следующем шаге, чтобы фактически запустить Stringer.

Шаг 6 - Запуск Stringer локально

В этом разделе мы будем использовать azk для запуска Stringer на нашей локальной рабочей станции.

На нашем локальном компьютере убедитесь, что мы находимся в нашем домашнем каталоге (если вы выбираете другую папку для установки, просто не забудьте адаптировать более поздние команды к выбранному вами каталогу):

cd ~

Выполните эту команду на своей локальной рабочей станции, чтобы запустить Stringer:

azk start -o run-project/stringer

Поскольку вы впервые запускаете azk, вам будет предложено принять условия его использования. Должно быть выведено сообщение, подобное следующему:

? =========================================================================
 Thank you for using azk! Welcome!
 Before we start, we need to ask: do you accept our Terms of Use?
 http://docs.azk.io/en/terms-of-use
=========================================================================
(Y/n)

Нажмите либо + Y +, если вы согласны, либо + N + в противном случае. Затем нажмите + ENTER +, чтобы сообщить свой ответ. Если вы не согласны, вы не сможете использовать азк.

Наконец, azk автоматически загрузит исходный код Stringer, а также прикрепленный Azkfile, чтобы запустить этот код в полностью безопасной и изолированной среде на вашем локальном компьютере.

Далее вас спросят, хотите ли вы запустить azk agent:

Выход

? The agent is not running, would you like to start it? ()

Agent - это компонент azk, который конфигурирует Docker (в Linux) или виртуальную машину VirtualBox (в Mac OS X).

Нажмите + ENTER +, чтобы ответить “Да” (опция по умолчанию).

При первом запуске агента azk запустит его настройку.

Установка делает многое за кулисами, включая создание файла + / etc / resolver / dev.azk.io +, который содержит конфигурацию DNS для разрешения адресов, заканчивающихся суффиксом + dev.azk.io +.

azk использует этот суффикс при запуске приложений, чтобы применить к ним понятные человеку адреса, вместо того чтобы требовать от нас вручную настраивать адреса + http: // localhost: PORT_NUMBER +. Это также позволяет избежать конфликтов портов в разных приложениях.

(По сути, это то же самое, что редактировать файл + / etc / hosts + для локального перенаправления доменного имени.)

Если вы получили сообщение, подобное следующему:

Выход

? Enter the vm ip: (192.168.50.4)

Вы можете ввести любой локальный IP-адрес, на котором вы хотите запустить приложение. По умолчанию должно быть хорошо для большинства случаев. Чтобы принять его, просто нажмите + ENTER.

Чтобы завершить настройку агента azk, вас попросят ввести пароль * sudo * (для пользователей Mac OS X это пароль администратора).

Теперь азк начнется. Вы увидите, как azk загружает элементы, перечисленные в файле Azkfile (в форме изображений Docker).

Эти изображения могут занять несколько минут для первой загрузки (около 10 минут или меньше).

Как только azk завершит установку, ваш браузер по умолчанию автоматически загрузит начальный экран Stringer, запущенный на вашем локальном компьютере.

изображение: https: //assets.digitalocean.com/articles/ask/D6Tf6GF.png [Stringer запущен и работает]

изображение: https: //assets.digitalocean.com/articles/ask/ARJCeDT.png [Доступ к приложению Stringer]

Как видите, он использует локальный DNS, поэтому приложение отображается в + http: // stringer.dev.azk.io +. Вы также можете получить доступ к приложению вручную, перейдя в + http: // stringer.dev.azk.io +.

Если вы хотите установить пароль и начать использовать приложение, вы можете, но это не обязательно для этого урока. Мы просто хотели увидеть, что azk может запускать Stringer локально.

Теперь, когда на локальном компьютере запущен Stringer, мы можем развернуть его с компьютера на Droplet.

Шаг 7 - Получение токена API DigitalOcean

Прежде чем мы сможем развернуть Droplet из azk, нам нужен токен API. Токен дает azk разрешение на развертывание нового сервера DigitalOcean в вашей учетной записи.

При первом запуске azk из этой среды с этим токеном будет развернута новая капля Ubuntu 14.04 объемом 1 ГБ. Последующие развертывания из той же локальной среды будут использовать одну и ту же каплю.

Следуйте инструкциям из How To Generate. раздел «Персональный токен доступа» в связанном руководстве. Сгенерированный токен должен иметь * права на чтение и запись *.

Скопируйте 64 шестнадцатеричных символа вашего токена, как в примере ниже:

Пример API-токена

a17d6a72566200ad1a8f4e090209fe1841d77d7c85223f769e8c5de47475a726

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

Для получения инструкций ниже не забудьте заменить токен с примером на настоящий.

Перейдите в папку Stringer:

cd ~/stringer

Сохраните свой токен личного доступа в файле, который вы называете + .env +. Для этого запустите эту команду для создания файла (не забудьте заменить токен):

echo "DEPLOY_API_TOKEN=" >> .env

Содержимое файла + .env + должно выглядеть так:

env
DEPLOY_API_TOKEN=

(Необязательно) Шаг 8 - Изучение ключей SSH

Вам не нужно ничего делать, чтобы настроить ключ SSH для azk, но полезно знать, как его использует azk.

azk использует ключ SSH для доступа к капле. Если у вас уже есть ключ SSH, azk будет использовать его.

Чтобы узнать, есть ли у вас SSH-ключ на вашем компьютере, запустите:

ls ~/.ssh/*.pub

Если он возвращает сообщение «not found», на вашем компьютере нет ключей SSH.

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

azk создаст свой ключ в собственном зарезервированном хранилище и не будет вносить никаких изменений в ваш каталог + ~ / .ssh +.

Если вы хотите проверить сгенерированный открытый ключ, вы можете запустить следующую команду после первого развертывания приложения:

azk deploy shell -c "cat /azk/deploy/.config/ssh/*.pub"

Чтобы узнать больше о ключах SSH в целом, https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys—​2 ознакомьтесь с этим руководством по ключам SSH].

Шаг 9 - Развертывание с помощью azk

По умолчанию azk создаст 1 ГБ DigitalOcean Droplet под управлением Ubuntu 14.04 для развертывания вашего приложения.

Сначала перейдите в каталог Stringer (или вашего приложения):

cd ~/stringer

Затем, чтобы начать развертывание, просто запустите:

azk deploy

Команда + azk deploy + - это команда, которую вы будете запускать чаще всего при использовании azk для управления вашим приложением.

Первое развертывание может занять некоторое время (около 10 минут), поскольку azk выполняет всю работу.

В частности, азк должен:

  • Загрузить элементы поддержки (образ Docker для развертывания)

  • Создать и настроить Droplet

  • Загрузите исходный код приложения в Droplet

  • Запустите приложение

Каждое новое развертывание этого приложения с вашего компьютера будет происходить намного быстрее (около 30 секунд или меньше), поскольку более длинные шаги уже будут выполнены.

Если ваш SSH-ключ защищен паролем, он потребуется несколько раз в процессе развертывания. Просто введите свой пароль ключа SSH и нажимайте + ENTER каждый раз, когда появляется сообщение, как показано ниже:

Выход

Enter passphrase for ~/.ssh/id_rsa:

Выходные данные терминала покажут немало действий, предпринимаемых в * удаленной * системе, и заканчиваются сообщением об успешном развертывании «+ Приложение успешно развернуто по адресу http: // +».

изображение: https: //assets.digitalocean.com/articles/ask/448PDqn.png [Stringer был успешно развернут]

Посетите + http: // +, чтобы просмотреть приложение, размещенное на вашем сервере.

изображение: https: //assets.digitalocean.com/articles/ask/peQgdYG.png [Доступ к стрингеру, работающему в капле]

Теперь вы можете изменять код приложения на своем компьютере, тестировать его локально и развертывать изменения в своей капле с помощью команды + azk deploy +.

Шаг 10 - Модификация Стрингера

Чтобы показать, насколько просто использовать azk для разработки приложений, для настройки или для управления версиями, давайте внесем простое изменение в страницу регистрации Stringer и повторно развернем приложение.

Убедитесь, что вы находитесь в каталоге Stringer:

cd ~/stringer

Давайте отредактируем файл + app / views / first_run / password.erb +, который является страницей, содержащей текст для этой первой страницы регистрации.

Используйте + nano + или ваш любимый текстовый редактор:

nano ~/stringer/app/views/first_run/password.erb

Здесь мы добавляем дополнительную строку с надписью «Это легко с азк!»:

приложение / просмотров / first_run / password.erb

<div class="setup" id="password-setup">
 <h1><%= t('first_run.password.title') %> <span class="orange"><%= t('first_run.password.anti_social') %></span>.</h1>
 <h2><%= t('first_run.password.subtitle') %></h2>

 <hr />
 . . .
</div>

Сохраните и выйдите из текстового редактора. Если вы используете nano, нажмите + CTRL + O + для сохранения и + CTRL + X + для выхода.

Поскольку Stringer по умолчанию настроен на работу в производственном режиме, обновления вашего браузера недостаточно, чтобы изменения вступили в силу. Перезапустите приложение из azk:

azk restart stringer -o

Новая вкладка браузера должна открыться с новой версией Stringer. Прямо под текстом по умолчанию * Существует только один пользователь: вы. *, Теперь он должен сказать * С азк! Это тоже просто!

Шаг 11 - Повторное использование Стрингера

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

git add app/views/first_run/password.erb
git commit .

Вам будет показан текстовый редактор (скорее всего, nano или vim).

Введите сообщение коммита, например + Это легко с azk +.

Это сообщение о фиксации будет использоваться для маркировки версий вашего приложения в azk, поэтому выберите ту, которая будет пробуждать вашу память, если вам понадобится откатиться позже.

Сохраните и закройте сообщение фиксации.

Чтобы развернуть изменения и обновить приложение, работающее на Droplet, выполните:

azk deploy

Как только это будет сделано, получите доступ к IP-адресу вашего Droplet из браузера (например, + HTTP: // +). Вы должны увидеть новую строку * Здесь легко с азком! *

изображение: https: //assets.digitalocean.com/articles/ask/tOmAsIH.png [Новая версия Stringer, работающая на Droplet]

Это новое развертывание создаст новую версию приложения на Droplet. Все версии приложения сохраняются, поэтому вы можете откатиться к предыдущей и затем снова перейти вперед.

Шаг 12 - откат к предыдущей версии

Чтобы отобразить все доступные версии нашего приложения в Droplet, выполните эту команду локально:

azk deploy versions

Это должно привести к следующему списку:

Выход

⇲ Retrieving deployed versions...

 ➜ v2              It is easy with azk
   v1              Merge branch 'master' of https://github.com/swanson/stringer

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

azk deploy rollback

Аргумент ++ - это номер версии, показанный выводом команды + azk deploy version +. Если вы запускаете команду без аргумента (например, + azk deploy rollback +), приложение будет откатано до версии, предшествующей текущей.

Чтобы убедиться, что откат завершен, просто обновите вкладку браузера, в которой отображается версия сервера.

Теперь вы должны увидеть приложение без нашего пользовательского текста, как это было в исходном развертывании.

Если вы хотите снова перейти вперед, вы можете выбрать самую новую версию:

azk deploy rollback

Метки для этих версий взяты из сообщений + git commit + на предыдущем шаге.

Заключение

В этом руководстве мы использовали простое приложение Rails, чтобы продемонстрировать, как azk автоматизирует задачи настройки среды нашего приложения. Это облегчает развертывание одного и того же приложения в нескольких средах.

Если вам нравится процесс развертывания azk, рассмотрите возможность его использования для вашего собственного проекта или добавления + Azkfile + к развилке другого проекта с открытым исходным кодом. Узнайте о creating Azkfile здесь и о том, как add кнопку Run Project GitHub Вот.

Или вы можете проверить эту demonstration gallery других приложений, которые уже выполнили работу для работы с azk.

Помимо + rollback + и + версии +, azk поддерживает другие вспомогательные подкоманды, которые позволяют нам выполнять некоторые дополнительные действия (например, получить доступ к оболочке Droplet через SSH).

Related