Поиск по сайту:

Как разместить собственную платформу как услугу (PaaS) с помощью Dokku


Dokku — это реализация платформы как услуги (PaaS), которую вы можете самостоятельно разместить на собственном оборудовании. Dokku использует Docker для автоматического развертывания вашего кода, когда вы git push с терминала.

Настройка сервера Dokku позволяет быстро развертывать новые приложения, используя знакомый рабочий процесс Git. Стоимость хостинга может быть намного ниже, чем у коммерческих решений PaaS и управляемых предложений Kubernetes. Как только ваш сервер Dokku запущен и запущен, запуск нового приложения займет всего несколько минут.

Начиная

Dokku поддерживает несколько способов установки. При установке на «голое железо» используйте официальный загрузочный скрипт для загрузки последней версии.

wget https://raw.githubusercontent.com/dokku/dokku/v0.24.7/bootstrap.sh
sudo DOKKU_TAG=v0.24.7 bash bootstrap.sh

Сценарий начальной загрузки превратит новую установку Linux в функционирующий сервер Dokku. Программные зависимости, включая Docker, будут загружены и установлены автоматически. Процесс может занять до 10 минут, в зависимости от вашего интернет-соединения.

Вы можете запустить Dokku как контейнер Docker. Это идеально, когда вы используете среду, в которой Docker уже доступен.

docker run 
    --env DOKKU_HOSTNAME=example.com 
    --name doku
    -p 3022:22 
    -p 8080:80 
    -p 8443:443 
    -v /var/lib/dokku:/mnt/dokku 
    -v /var/run/docker.sock:/var/run/docker.sock 
    dokku/dokku:0.24.7

Замените example.com именем хоста, которое вы будете использовать для доступа к серверу. В этом примере порты 80 и 443 будут привязаны к портам вашего хоста 8080 и 8443 соответственно. Порт 3022 на вашем хосте будет сопоставлен с портом 22 внутри контейнера. Этот порт используется для соединений Git+SSH.

Том создается в /mnt/dokku. Здесь будут храниться данные приложения Dokku. Сокет Docker хоста также монтируется в контейнер, чтобы Dokku мог взаимодействовать с демоном Docker для создания новых контейнеров.

Настройка Докку

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

Скопируйте и вставьте ключ SSH в поле «Открытый ключ». Dokku будет принимать любые SSH-соединения, сделанные с помощью этого ключа. Вы можете добавить другие ключи позже, используя интерфейс командной строки Dokku.

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

Когда имя хоста настроено, Dokku может автоматически обслуживать ваши приложения, используя отдельные поддомены. Если у вас нет доступного домена, снимите флажок «Использовать имя виртуального хоста». Вместо этого Dokku будет обслуживать каждое из ваших приложений на выделенном порту.

Если вы установили Dokku с помощью Docker, веб-установка не поддерживается. Вы можете добавить имя хоста при создании контейнера, установив переменную среды DOKKU_HOSTNAME. Чтобы добавить ключи SSH, вам нужно подключиться к контейнеру и использовать интерфейс командной строки Dokku:

docker exec -it dokku dokku ssh-keys add my-key < /path/to/key

После того, как вы установили имя хоста и добавили ключ SSH, Dokku должен быть готов к использованию. Дальнейшее администрирование невозможно с помощью веб-интерфейса. Вы взаимодействуете с Dokku с помощью команд Git и интерфейса командной строки.

Развертывание приложений

Теперь вы готовы запустить свое первое приложение! Развертывание Dokku начинается с git push. Dokku использует пакеты сборки (Cloud Native или Herokuish) для определения языка программирования вашего приложения и автоматического создания сборки.

Dokku также поддерживает запуск docker build напрямую, если ваш проект содержит Dockerfile. Эту функцию можно использовать только тогда, когда сборщики на основе пакетов сборки недоступны для вашего проекта. Вы можете получить больше информации о прямых сборках Docker в документации Dokku.

Использование сборочных пакетов означает, что Dokku накладывает несколько ограничений на то, как создается ваш проект. Если вы используете популярный язык и платформу, вы должны иметь возможность git push создать свое развертывание. Вот пример базового приложения React:

mkdir my-app
cd my-app
npx create-react-app .

git remote add dokku dokku@example.com:my-app
git push dokku master

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

После того, как пульт был настроен, вы готовы отправить на него код. В примере команда отправляет ветку master в Dokku. Dokku возьмет ваш проект, автоматически определит подходящий пакет сборки, создаст образ Docker и развернет ваше приложение.

Присоединение доменов приложений

Dokku развертывает ваше приложение на поддомене вашего имени хоста. Вы можете прикрепить собственный домен с помощью интерфейса командной строки Dokku. Сначала убедитесь, что вы настроили соответствующие записи DNS.

dokku domains:add my-app example.com

Посещение example.com теперь будет обслуживать ваше развертывание my-app.

Добавление SSL

Dokku позволяет легко включить SSL для ваших приложений. Вы можете добавить плагин, который интегрирует Dokku с Let’s Encrypt. После установки плагина вы можете получить SSL-сертификаты с помощью одной команды.

Сначала установите плагин:

dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git

Затем настройте плагин Let’s Encrypt, указав свой адрес электронной почты. Let’s Encrypt будет использовать этот адрес для отправки вам любых предупреждений, касающихся ваших сертификатов.

dokku config:set --global no-restart DOKKU_LETSENCRYPT_EMAIL=me@example.com

Вы должны добавить задание cron Let’s Encrypt, чтобы убедиться, что Dokku может автоматически обновлять ваши сертификаты:

dokku letsencrypt:cron-job --add

Наконец, включите Let’s Encrypt для своего приложения:

dokku letsencrypt my-app

Плагин Let’s Encrypt получит сертификат для доменов, подключенных к вашему приложению. Сертификат будет автоматически продлен до истечения срока его действия.

Обновление вашего приложения

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

Когда Dokku получает новый push, он использует свои сборки для создания обновленного контейнера Docker. Текущий запущенный контейнер будет заменен новым после завершения сборки. Обновления выполняются без простоев и полностью автоматизированы.

Продолжительность процесса сборки зависит от размера вашего приложения и технологий, которые оно использует. Dokku ждет еще 10 секунд после завершения сборки, прежде чем трафик будет направлен на новые контейнеры. Это дает возможность завершиться любым скриптам начальной загрузки.

Dokku можно легко интегрировать в системы непрерывной интеграции (CI). Последним этапом конвейера непрерывной интеграции может быть git push dokku для обновления вашего активного развертывания.

Управление филиалами

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

dokku git:set --global deploy-branch dokku-deploy

dokku git:set my-app deploy-branch production

В этой конфигурации Dokku по умолчанию будет развертываться из ветки dokku-deploy. Вместо этого развертывание приложения my-app будет выполняться из production.

Добавление дополнительной функциональности

Dokku — это гораздо больше, чем базовое развертывание, на котором мы сосредоточились. Распределение по умолчанию намеренно оптимизировано. Официальные и общественные плагины могут использоваться для предоставления услуг, таких как базы данных и аутентификация. Это позволяет вам использовать Dokku для бэкендов с отслеживанием состояния, а также для ваших статических интерфейсов.

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

Вот как вы можете добавить базу данных MySQL в приложение:

dokku plugin:install https://github.com/dokku/dokku-mysql.git

dokku mysql:create demo-db

dokku mysql:link demo-db my-app

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

Заключение

Docker — это решение PaaS, которое позволяет вам размещать собственную платформу приложений. Как только Dokku запущен и запущен, запустить новое приложение так же просто, как git push.

Dokku выгодно отличается от таких сервисов, как Heroku, Amazon Elastic Beanstalk и Google Firebase. Он поддерживает большое количество технологий разработки и означает, что вы не привязаны к конкретному облачному провайдеру. Вы можете запустить Dokku на дешевой облачной виртуальной машине или оставить ее на собственном физическом оборудовании.