Dokploy - самый удобный вариант деплоя проектов
Cодержание
1. Dokploy
Краткий обзор вариантов развертывания
2. Установка
3. Обзор настроек Dokploy
Привязка домена в Dokploy
Привязка Github в Dokploy
Добавление SSH ключей
Добавление уведомлений
4. Развертывание проектов
Развертывание статичного сайта
Развертывание сервиса из Dockerfile
Развертывание сервиса из Docker-образа
Развертывание сервиса из compose.yml файла
Развертывание БД
5. Настройка сервиса
Привязка домена к сервису
Настройка авто-развертывания
Объединяем сервис
6. Заключение
1. Dokploy
Dokploy - это как заявляет сам автор стабильное и простое в использовании решение для развертывания, предназначенное для упрощения процесса управления приложениями. Оно позиционируется как бесплатная самостоятельная альтернатива таким платформам, как Heroku, Vercel и Netlify, использующей надежность Docker и гибкость Traefik.
Dokploy позволяет очень удобно деплоить ваши проекты без траты времени на настройку VPS. Есть возможность хранить одновременно несколько проектов на одном VPS. Так же просто и быстро реализовывать авто-деплой приложения на VPS. Упрощает администрирование хостинга. Повышает удобство мониторинга нагрузки как на весь хостинг, на каждый проект и на каждый сервис. Так что единственное, что вам нужно будет сделать в терминале, это установить сам Dokploy.
Подробнее о проекте вы можете почитать на сайте или в документации
Краткий обзор вариантов развертывания
Dokploy предоставляет следующие варианты для добавления сервисов в проекте:
- Application - базовый вариант развертывания с гибкими настройками
- Есть различные источники кода, такие как:
- Github - позволяет прямо в Dokploy выбирать репозитории для развертывания см. Привязка Github в Dokploy. Привязка Github в Dokploy.
- Docker - позволяет развертывать сервис из Docker-образа см. Развертывание сервиса из Docker-образа.
- Git - позволяет развертывать сервис указав ссылку на репозиторий.
- Drop - позволяет развертывать сервис вручную загрузив исходный код архивом.
- И типы сборки сервиса:
- Dockerfile - использованием Dockerfile для сборки см. Развертывание сервиса из Dockerfile.
- Nixpacks - автоматически собирает окружение приложения на основе его структуры и зависимостей.
- Heroku Buildpacks - предоставляет автоматическую настройку окружения и зависимостей приложения.
- Paketo Buildpacks - предназначен для создания OCI (Open Container Initiative) образов, оптимизированных для контейнеризированных приложений.
- Static - используется для развертывания статических сайтов.
- Database - в пару кликов позволяет поднять базу данных.
- Compose - позволяет развертывать сервисы из compose.yml файлов.
- Template - содержит список шаблон с открытым исходным кодом для развертывания в своем проекте см. весь список шаблонов.
2. Установка
Установка происходит одной командой которая указана сразу на главной странице.
curl -sSL https://dokploy.com/install.sh | sh
Так же есть возможность ручной установки с кастомной настройкой. Ссылка на раздел в документации.
Мы вводим её и ожидаем некоторое время. После установки в терминале будет выведена ссылка на создание пользователя, формата:
http://<IP-вашего-VPS>:3000
Затем переходим по ссылке и вводим запрашиваемые данные. После чего мы попадаем на dashboard.
3. Обзор настроек Dokploy
Dokploy позволяет удобно настраивать VPS под ваши нужды, не заставляя вас на долго увязнуть в терминале. Он позволяет в несколько кликов привязать домен к VPS и получить бесплатны SSL. Так же позволяет легко привязать свой Github для доступа к репозиториям. Давайте рассмотрим некоторые из возможных настроек Dokploy.
Привязка домена в Dokploy
- Настраиваем DNS например на Cloudflare. Добавляя вот такую запись.
- Указав dashboard в поле name. Мы делаем запись в DNS которая будет направлять запросы с указанием домен dashboard.test.com на IP который вы указали в соответствующем поле.
- Если вы не знаете свой IP вы можете узнать его если перейдете в dashboard в раздел Settings, откроете раздел Server и спуститесь в конце страницы.
- Далее мы добавляем домен в самом Dokploy. Для этого заходим в Settings->Server. И добавляем наши данные:
Теперь ваш домен привязан и выдан SSL сертификат с помощью Letsencrypt. Dokploy dashboard будет доступен по указанному под-домену. А основной домен можно легко привязать к вашему проекту.
Привязка Github в Dokploy
- Деплоить проект из непубличного репозитория.
- Удобно выбирать репозитории для деплоя сразу при создании сервиса.
Для этого просто переходим в Settings->Server.
Добавление SSH ключей
Добавление SSH ключей это альтернатива прошлому пункту с привязкой GH. Их различие в том, что добавление ключа позволяет просто клонировать приватные репозитории по ссылке. Публичные репозитории можно клонировать и без него.
Для добавления SSH ключа нам нужно:
- Перейти в Settings->SSH Keys.
- Генерируем ключ в Dokploy или вручную и добавляем его.
- Затем
Public Key
добавляем в профиле GH. Перейдя в Настройки профиля -> пункт SSH and GPG keys.
Добавление уведомлений
Уведомления это очень удобная функция в Dokploy для автоматическое отслеживание состояния развертывания проекта. Самое удобное, что уже реализована интеграция с различными платформами для получения уведомлений. Можно выбрать триггеры после которых вы хотите получать уведомления например: при развертывании, при сбое сборки и тд.
Список интегрированных платформ для получения уведомлений:
Для того чтобы настроить эту функцию, нам нужно
- Перейти в Settings -> Notification.
- Выбрать платформу на которую вы хотите получать уведомления.
- Заполнить запрашиваемые данные для вашей платформы и выбрать триггеры.
4. Развертывание проектов
Деплой так же как и настройка не требует особых усилий. Сейчас мы разберем возможности Dokploy в развертывании проектов. Посмотрим как развертывать статичные сайты, как подминать базы данных и тому подобное.
Развертывание статичного сайта
Структура проекта для примера: > shrek-website/ > │ > ├── index.html > ├── characters.html > ├── gallery.html > ├── styles.css > └── images/ > ├── shrek.jpg > ├── donkey.jpg > ├── fiona.jpg > └── dragon.jpg
Первый наш пример будет описывать развертывание самого простого статичного сайта.
- Мы создаем новый проект нажав на кнопку
Create Projec
- Далее переходим в проект и нажимаем кнопку
Create Service
и выбираем пунктApplication
в выпадающем меню. - Выбираем удобный вам источник кода. Если у вас публичный репозиторий то просто укажите ссылку на него. А если он приватный то вам пригодится настройка привязки Github или добавление SSH ключей из прошлого раздела.
- Если вы привязали GH то просто выберете репозиторий из списка
- Если вы добавляли SSH ключ то вставьте SSH ссылку типа
git@github.com:username/repositories_name.git
которую можно скопировать на станице репозитория и выберите SSH ключ. - В поле
Branch
выберите с какой ветки вы хотите брать код. А полеBuild Path
оставьте не тронутым если у вас файлindex.html
расположен там же как в примере в корне репозитория. - Теперь выбираем тип сборки. В этом примере будем использовать тип
Static
, но так же можно использоватьNixpacks
- Сохраняем всё и нажимаем кнопку
Deploy
и ждём пока в разделеDeployments
не появится записи с статусомDone
Информацию о настройке сервисов смотрите в разделе 5. Настройка сервисов , там вы узнаете как привязать домен или настроить авто-развертывания.
Развертывание сервиса из Dockerfile
В данном примере мы рассмотрим как деплоить сервис из написанного нами Dockerfile. Например проект из прошлого примера развился до нового уровня и для сайта потребовалось написать back-end.
Структура проекта теперь выглядит так: > shrek-website/ > │ > ├── front-end > │ ├── index.html > │ ├── characters.html > │ ├── gallery.html > │ ├── styles.css > │ ├──Dockerfile > │ └── images/ > │ ├── shrek.jpg > │ ├── donkey.jpg > │ ├── fiona.jpg > │ └── dragon.jpg > │ > ├── back-end > │ ├── main.py > │ ├── requirements.txt > │ └── Dockerfile > │ > └── docker-compose.yml
Если front-end мы можем и не трогать, просто изменив `Build Path` в настройках сервиса c /
на /front-end
и всё. То back-end нам нужно развертывать из Dockerfile где прописана инструкция сборки образа. Для этого мы:
- Создаем новый сервис в приложении.
- Так же выбираем
Application
из выпадающего меню. - Выбираем из списка или указываем ссылку на репозиторий.
- В
Build Path
указываем путь к папке в которой лежит Dockerfile. Для проекта из примере это будет/back-end
- В
Build Type
выбираем Dockerfile. - В поле Docker File вводим путь
./Dockerfile
- Поле
Docker Context Path
или оставляем пустым или вводим путь к папке с Dockerfile. - Сохраняем настройки и развертываем.
Информацию о настройке сервисов смотрите в разделе 5. Настройка сервисов , там вы узнаете о настройках авто-развертывания.
Развертывание сервиса из Docker-образа
Так же мы можем собирать образы нашего проекта локально, затем отправлять их на Docker Hub и потом деплоить. Этот вариант может быть удобнее так как в этом случае развертывание занимает меньше времени в сравнение с развертыванием из Dockerfile. Всё потому, что мы проводим процесс сборки образа локально, при деплое нам остается всего лишь запустить его. Вот как это происходит:
- Локально собираем образ нашего проекта и отправляем его на Docker Hub:
- Собираем образ командой:
docker build -t image-name:tag .
- Указываем
.
в конце команды если запускаем её из директории в которой хранится Dockerfile. Если нет то переходим в нужную директорию или прописываем путь к ней. - Создаем тег для образа командой:
- Отправляем образ на Docker Hub командой:
- Создаем новый сервис в приложении.
- Так же выбираем
Application
из выпадающего меню. - В поле
Docker Image
указываем образ в таком формате: - Затем указываем данные от Docker Hub.
- В разделе
Build Type
вы можете выбрать любой вариант.
Информацию о настройке сервисов смотрите в разделе 5. Настройка сервисов , там вы узнаете о настройках авто-развертывания.
Развертывание сервиса из compose.yml файла
Так же есть возможность развертывать сервисы используя `compose`. Это позволяет более гибко настраивать конфигурацию контейнера в compose.yml файлах. Например у вас одна конфигурация под продакшен, другая под тестирования и ещё одна под разработку. Для того чтобы развернуть сервис нужно:
- Создаем новый сервис в приложении.
- И тут уже выбираем не
Application
, аCompose
из выпадающего меню. - В разделе выбора источника кода, можно как выбрать из списка или указать ссылку на репозиторий, так и вставить в ручную нужную конфигурацию выбрав
Raw
. - Если вы не используете уже готовый Docker-образ, то выбираем ветку и указываем путь к
.yml
.
При использовании compose
сервис не сможет обращаться к другим сервисам в проекте, например к БД по Internal Host
см. Развертывание БД. Для этого нам нужно добавить dokploy-network
в конфигурации контейнера см. Раздел 5. Настройка сервисов - Объединяем сервисы.
Развертывание БД
Одно из самых удобных в Dokploy это поднятие базы данных. Это делается в пару кликов:
- Создаем новый сервис в приложении.
- И тут выбираем
Database
из выпадающего меню. - Выбираем нужную БД.
- Заполняем обязательные поля. В поле
Docker image
мы можем указать определенную версию образа БД.
После создания база данных будет доступна только внутри проекта из сервисов обращаясь к ней с помощью её Internal Connection URL
. Если вам нужно получать к ней внешний доступ , то просто укажите External Port
и появится External Host URL
по которой вы сможете получить к ней доступ. Так же смотрите Раздел 5. Настройка сервисов - Объединяем сервисы.
5. Настройка сервиса
Привязка домена к сервису
Плюсов использования Dokploy является не только возможность быстро и легко привязывать домены и выдавать на них SSL, а так же генерировать бесплатные домены с помощью Traefik. Для того чтобы привязать или сгенерировать домен для сервиса, нам нужно:
- Открыть нужный нам сервис, перейти в раздел
Domains
- Нажать кнопку
Add Domain
- Затем или ввести свой домен в поле
Host
или нажать на кнопку генерации домена. - В поле
Path
мы вводи путь, например если мы хотим чтобы сервис отвечал по запросу наshrek.com/api
- Указываем порт который слушает сервис
- И если нам нужен HTTPS включаем его и выбираем или Letsencrypt(выдает бесплатные сертификаты) или добавленный вручную сертификат.
Подождите некоторое время после добавления домена и/или сертификата, применение изменений может занять некоторое время.
Настройка авто-развертывания
Так же очень удобная вещь которая так же настраивается в пару кликов. Авто развертывание можно настроить с такими платформами как GitHub, GitLab, Bitbucket, Gitea, DockerHub. Давайте рассмотрим парочку из них.
GitHub
- Перейти в нужный сервис, в раздел
Deployments
- Скопировать
Webhook URL
- Зайти в Github. Репозиторий -> Settings -> Webhooks и нажать кнопку
Add webhook
- В поле
Payload URL
вводимWebhook URL
- Значение в поле
Content type
меняем наapplication/json
- Можете оставить обновление сервиса после push ивента или выбрать нужные вам триггеры
DockerHub
Авто-развертывание после обновления образа можно настроить только с собственным образом
- Перейти в нужный сервис, в раздел
Deployments
- Скопировать
Webhook URL
- Перейти на страницу образа на Docker Hub нажать кнопку
Manage Repository
- Перейти в раздел
Webhooks
- Указать
Webhook URL
в полеWebhook URL
Теперь, после обновления кода в репозитории или обновления образа, сервис также будет обновляться. Единственный минус заключается в том, что если вы обновили код, не относящийся к коду сервиса, он всё равно будет обновлён.
Объединяем сервис
В случаях, когда служба развернута из файла compose.yml
, она находится в своей собственной сети и не видит другие службы. Однако Dokploy позволяет решить эту проблему, используя dokploy-network
. Для этого нам нужно добавить использование networks
в конфигурацию сервиса следующим образом:
networks: dokploy-network: external: true
6. Заключение
Спасибо всем за внимание и уделённое время. Буду рад, если смогу сократить кому-то количество часов, потраченных на рутинные процессы или поиск информации. Это моя первая серьёзная попытка писать технические статьи, так что буду благодарен за обратную связь, если вы заметите ошибки или неточности в написанном мной материале. Всех жду в моём Телеграмм канале.