Гид по технологиям

Развёртывание приложений с Dokku на собственном сервере

• 9 min read • DevOps • Обновлено 18 Nov 2025
Dokku на собственном сервере — установка и деплой
Dokku на собственном сервере — установка и деплой

Быстрые ссылки

  • Начало работы
  • Настройка Dokku
  • Развёртывание приложений
  • Привязка доменов к приложению
  • Включение HTTPS (SSL)
  • Обновление приложения
  • Управление ветками
  • Дополнительный функционал (плагины)
  • Резюме и рекомендации

Логотип Dokku

Что такое Dokku

Dokku — это небольшая реализация PaaS (Platform-as-a-Service), которую вы можете самостоятельно хостить. Докку использует Docker для запуска контейнеров и стандартный Git-поток для развертывания: достаточно выполнить git push, и платформа автоматически соберёт образ и запустит приложение.

Кратко о преимуществах:

  • Низкая стоимость владения по сравнению с коммерческими PaaS и управляемыми кластерами.
  • Простой Git-процесс: знакомая цепочка действий для разработчиков.
  • Расширяемость через плагины: базы данных, сертификаты, бэкапы.
  • Работает на виртуальной машине в облаке или на физическом сервере.

Определение: buildpack — инструмент, который обнаруживает стек приложения (Node, Python, Ruby и т.д.) и формирует окружение для запуска.

Начало работы

Вы можете установить Dokku несколькими способами. Если у вас есть чистая Linux-система (обычно Ubuntu), проще всего — официальный bootstrap-скрипт. Он скачивает и устанавливает Dokku и зависимости, включая Docker.

Запустите:

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

Bootstrap-скрипт превратит чистую систему в готовый сервер Dokku. Установка включает Docker и другие компоненты и может занять несколько минут в зависимости от скорости сети.

Примечание: на некоторых минимальных образах облачных провайдеров может потребоваться предварительная установка curl или wget.

Если вы предпочитаете контейнерный вариант, запустите Dokku в Docker-контейнере. Это удобно, когда Docker уже установлен и вы хотите изолировать Dokku от хоста:

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 на имя хоста или IP, по которому вы будете обращаться к серверу. В примере порты 80 и 443 проброшены на 8080 и 8443 хоста, а порт 3022 используется для Git+SSH.

Важно: при запуске в Docker веб-инсталлятор Dokku недоступен. Все настройки придётся делать через CLI внутри контейнера.

Настройка Dokku

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

Скопируйте и вставьте публичный SSH-ключ в поле Public Key. После этого Dokku примет SSH-подключения с этим ключом. Дополнительные ключи можно добавить позже через CLI.

Скриншот веб-инсталлятора Dokku

Если у вас есть домен, укажите его в настройках hostname. Dokku умеет автоматически назначать каждому приложению поддомен вида app.hostname. Если домена нет, отключите «Use virtualhost naming» в веб-интерфейсе, и Dokku будет отдавать приложения по разным портам.

Добавление SSH-ключа в контейнерном варианте:

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

После установки hostname и добавления ключа веб-интерфейс выполнять администрирование не будет. Управление происходит через Git и dokku CLI.

Важно: храните приватные SSH-ключи безопасно. Доступ к Dokku через SSH даёт полный контроль над развёртываемыми приложениями.

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

Развёртывание в Dokku начинается с git push. Докку автоматически определит язык и стек с помощью buildpacks (Cloud Native или Herokuish) и создаст образ Docker.

Если в проекте есть Dockerfile, можно использовать прямую сборку docker build. Это удобно для нестандартных стеков, но чаще достаточно buildpack’ов.

Пример простого развертывания React-приложения:

mkdir my-app
cd my-app
npx create-react-app .
git init
git add .
git commit -m "initial"
git remote add dokku dokku@example.com:my-app
git push dokku master

Пояснения:

  • dokku@example.com — замените на ваш сервер (IP или hostname).
  • my-app после двоеточия — имя приложения на Dokku; создавать проект вручную не обязательно.
  • push ветки master запустит сборку.

После успешного пуша Dokku использует buildpack, создаёт Docker-образ и запускает контейнер. При использовании Dockerfile процесс похож, но управляется командами Docker.

Совет: в репозитории держите Procfile, если приложение требует конкретной команды запуска. Это даёт точный контроль над процессом запуска.

Привязка доменов к приложению

Чтобы прикрепить домен к приложению, настройте DNS (A или CNAME) и затем выполните команду:

dokku domains:add my-app example.com

После этого example.com будет обслуживать приложение my-app. Если вы используете поддомены, Dokku может автоматически выдавать сертификаты для выбранных доменов.

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

Включение HTTPS (SSL)

Dokku поддерживает автоматическое получение сертификатов Let’s Encrypt через плагин dokku-letsencrypt.

Установка плагина:

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

Настройка email для оповещений:

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

Добавьте cron-задачу для автоматического продления сертификатов:

dokku letsencrypt:cron-job --add

И активируйте Let’s Encrypt для приложения:

dokku letsencrypt my-app

Плагин запросит сертификат, установит его и настроит автоматическое продление. Если домены меняются, повторно выполните dokku letsencrypt для обновления сертификата.

Важно: чтобы Let’s Encrypt заработал, DNS записи должны быть настроены и указывать на ваш сервер.

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

Рабочий цикл обновления остаётся простым: внесите изменения, закоммитьте и выполните git push на ваш dokku-remote. Dokku соберёт новый образ, и заменит текущий контейнер без длительного простоя.

Некоторые нюансы:

  • Время сборки зависит от размера кода и зависимостей.
  • Dokku ждёт примерно 10 секунд после завершения сборки, прежде чем направить трафик на новые контейнеры. Это даёт возможность инициализирующим скриптам завершиться.
  • Для автоматизированных пайплайнов CI/CD финальной командой может быть git push dokku.

Критерии приёмки обновления:

  • Новая версия собирается без ошибок.
  • Приложение успешно принимает соединения на тестовом маршруте.
  • Показатели здоровья (если используются) соответствуют ожиданиям.

Управление ветками

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

dokku git:set --global deploy-branch dokku-deploy
dokku git:set my-app deploy-branch production

После настройки Dokku будет принимать пуши с указанной ветки по умолчанию.

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

Дополнительный функционал — плагины и сервисы

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

Пример добавления MySQL:

dokku plugin:install https://github.com/dokku/dokku-mysql.git
dokku mysql:create demo-db
dokku mysql:link demo-db my-app

Linking устанавливает переменные окружения внутри контейнера приложения (например, DATABASE_URL). Это упрощает доступ к базе без ручной конфигурации строки подключения.

Примеры популярных плагинов:

  • dokku-mysql — MySQL/MariaDB
  • dokku-postgres — PostgreSQL
  • dokku-redis — Redis
  • dokku-letsencrypt — автоматическое SSL

Совет по бэкапам: используйте возможности плагина для экспорта дампов базы или настраивайте регулярное резервное копирование на отдельное хранилище.

Безопасность и соответствие

Рекомендации по безопасности:

  • Держите SSH-ключи под контролем и используйте доступ на уровне ключей.
  • Обновляйте Dokku и Docker до актуальных версий.
  • Отключайте ненужные плагины и сервисы.
  • Разграничивайте доступ: для команды DevOps используйте отдельные ключи.

GDPR и приватность: если ваше приложение обрабатывает персональные данные, убедитесь, что домен, бэкапы и плагины соответствуют требованиям хранения и передачи данных. Dokku сам по себе не добавляет дополнительных механизмов согласия пользователей; это — ответственность приложения.

Когда Dokku не подходит (ограничения)

Контрпримеры и ситуации, где Dokku может оказаться неудобен:

  • Очень крупные микросервисные ландшафты с сотнями сервисов: управляемый Kubernetes даёт больше оркестрации и автоматизации.
  • Сложные требования к сетевой политике и мультивендорной сетевой интеграции.
  • Необходимость сильной изоляции хостов для безопасности на уровне ядра.

Альтернативы:

  • Heroku — если нужен сервис без администрирования инфраструктуры.
  • Управляемый Kubernetes (EKS/GKE/AKS) — для крупных и сложных систем.
  • Docker Compose / Nomad — для простых локальных сценариев и маленьких кластеров.

Ментальные модели и практические эвристики

  • Treat Dokku как «управляемый хостинг»: вы отвечаете за машину, Dokku — за деплой.
  • Если вы хотите полный контроль над сетью и масштабированием — подумайте о Kubernetes.
  • Для быстрого прототипирования и малых продакшенов Dokku часто даёт оптимальный баланс времени и затрат.

Роль — чеклисты

Роль: разработчик

  • Убедиться, что приложение запускается локально.
  • Добавить Procfile при необходимости.
  • Настроить dokku remote и выполнить git push.

Роль: DevOps

  • Развернуть сервер Dokku и настроить hostname.
  • Настроить SSH-ключи и бэкапы.
  • Установить плагины (DB, SSL).
  • Настроить мониторинг и логирование.

Роль: администратор безопасности

  • Проверить права доступа к SSH.
  • Контролировать версии Docker и Dokku.
  • Настроить брандмауэр и правила входящего трафика.

SOP: пример рабочего плейбука для деплоя

  1. Выполнить полный прогон тестов в CI.
  2. Собрать артефакты и подготовить ветку deploy-branch.
  3. Git push в докку-remote: git push dokku deploy-branch:master
  4. Проверить статус сборки в логах Dokku: dokku logs –tail my-app
  5. Проверить работоспособность через health endpoint.
  6. Если требуется откат, выполнить dokku ps:stop/ps:start с предыдущим образом или деплоить тег с предыдущей версии.

Критерии приёмки:

  • CI зелёный.
  • Логи сборки без ошибок.
  • Эндпоинт состояния возвращает успешный код.

Миграция с других платформ и советы

  • С Heroku: большинство приложений легко переносится. Procfile и buildpacks часто совместимы. Проверьте конфигурацию переменных окружения.
  • C Docker Compose: можно масштабировать сервисы в отдельные приложения Dokku и использовать плагины для общих сервисов (DB, Redis).

Советы по миграции:

  • Проверяйте переменные окружения и секреты.
  • Экспортируйте дампы баз и корректно восстановите на стороне Dokku-плагина.
  • Тестируйте откат до того, как отправлять трафик от реального домена.

Отладка и частые ошибки

  • Приложение не запускается: проверьте Procfile и логи (dokku logs my-app).
  • Ошибки сборки: проверьте buildpack detection и зависимости в package manager.
  • SSL не выдаётся: проверьте DNS и доступность HTTP на порту 80 для валидации Let’s Encrypt.

Полезные команды:

dokku apps:list
dokku logs --tail my-app
dokku ps:report my-app

Примеры конфигураций CI с Dokku (шаблон)

Минимальный шаг деплоя из GitHub Actions или другой CI-системы:

  • Настроить SSH-ключ в CI и добавить публичную часть в Dokku.
  • В CI выполнить git remote add dokku dokku@your-host:your-app и git push dokku HEAD:master.

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

Сравнение с альтернативами — краткая матрица

  • Простота: Dokku > Kubernetes > Управляемый PaaS (Heroku)
  • Контроль над инфраструктурой: Kubernetes > Dokku > Heroku
  • Стоимость владения: Dokku и VPS обычно дешевле Heroku для долгоживущих приложений
  • Масштабируемость: Kubernetes лучше подходит для крупных распределённых систем

Риски и смягчение

  • Риск: потеря данных при неправильной настройке базы. Смягчение: регулярные бэкапы и тестовые восстановления.
  • Риск: взлом SSH-ключа. Смягчение: ротация ключей, ограничение доступа по IP, аудит.

Заключение

Dokku — надёжный инструмент для тех, кто хочет получить преимущества PaaS, не отдавая контроль облачному провайдеру. Он прост в установке, легко интегрируется с привычным Git-процессом и расширяется через плагины. Для многих стартапов и небольших команд Dokku даёт баланс между удобством и контролем.

Короткая проверочная памятка:

  • Установили Dokku на сервер и задали hostname.
  • Добавили SSH-ключи.
  • Настроили домены и Let’s Encrypt.
  • Развернули приложение через git push.

Если вам нужно масштабирование уровнем выше — рассмотрите переход на Kubernetes. Для быстрых MVP и небольших продакшенов Dokku остаётся практичным выбором.


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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро