Если вы самостоятельно размещаете свой веб-сайт и хотите автоматизировать его развертывание, вам может помочь это краткое руководство. В нем мы расскажем, как запускать сервисы Docker в кластере Docker Swarm и управлять ими с помощью Portainer. Кроме того, мы используем веб-перехватчик gihub для автоматического запуска развертывания при каждом обновлении репозитория.
Если у вас не запущен сервис Portainer, вы можете настроить его и подключиться к кластеру Docker Swarm. Я использую бизнес-версию Portainer с бесплатной подпиской на 3 узла. Вы можете бесплатно использовать бизнес-версию Portainer, если у вас 3 или менее узлов, или можете использовать версию для сообщества. Вы можете запросить лицензионный ключ, как это сделать описано тут.
Подход, который мы собираемся использовать, предполагает следующую последовательность действий.
- Мы настроим стек Docker в Portainer с помощью репозитория GitHub для запуска наших веб-сервисов
- Portainer предоставит URL-адрес веб-перехватчика, который мы сможем использовать для повторного развёртывания приложений с GitHub
- Мы создадим в GitHub событие веб-хука для действий при коммите и укажем URL-адрес веб-хука Portainer
- Когда мы отправляем изменения на Github, Github вызывает веб-хук Portainer, чтобы сообщить об изменениях, а Portainer загружает репозиторий с Github и выполняет повторное развёртывание
Ниже приведены подробные инструкции по реализации этого процесса. Сначала создайте стек в Portainer, указав репозиторий на Github. Репозиторий может быть частным или публичным. Для частного репозитория необходимо настроить аутентификацию.

На скриншоте выше видно, что при создании стека с использованием репозитория Git включена аутентификация. Также в конце скриншота можно заметить опцию обновления GitOps. Ниже приведены возможные варианты действий при включенном переключателе.

Есть два возможных варианта автоматического развёртывания. Первый — это вариант с извлечением, при котором Portainer будет проверять репозиторий с заданным интервалом на наличие изменений и развёртывать код при его изменении. Я выбрал веб-хук, который предоставляет ссылку для запуска при необходимости повторного развёртывания кода. Мы будем использовать эту ссылку в событиях Github для вызова при коммите.
Большинство полей на скриншотах не требуют пояснений, поэтому я не буду вдаваться в подробности, но вы можете задать мне любые вопросы в комментариях.
Теперь мы войдём в Github, чтобы настроить события. Выберите репозиторий и в меню слева выберите «Вебхуки», затем нажмите «Добавить вебхук». В поле «URL полезной нагрузки» введите URL, скопированный из Portainer. В разделе «События для уведомления» можно выбрать только события «Отправка», так как вы хотите выполнять повторное развёртывание только при отправке данных в репозиторий. Также можно настроить развёртывание для других событий Git.

После настройки всё готово к работе. Когда вы отправите что-то в этот репозиторий, Github вызовет ваш веб-хук из Portainer, и тот автоматически развернёт ваш код.
Если у вас есть вопросы, задавайте их в комментариях.
Перевод инструкции.