compose

Развертывание docker-compose.yml на сервере

Роль Ansible для развертывания docker-compose.yml в домашней директории, лучше всего использовать с bigsudo.

Этот README описывает функции, см. TUTORIAL.md для туториала с примерами, чтобы достичь eXtreme DevOps.

Пример

Эта роль тестирует себя, и вы можете начать с копирования:

  • Dockerfile: будет работать по умолчанию для проекта CRUDLFA+, предлагает сжатую и кэшированную службу статических файлов и спуллер.
  • .gitlab-ci.yml: создает и отправляет образ docker в реестр изображений GitLab, предоставляет шаблон YAML для задания развертывания (макрос), а также 3 примера конфигураций развертывания для различных случаев использования.
  • docker-compose.yml: для локальных и временных развертываний.
  • docker-compose.traefik.yml: для поддержки yourlabs.traefik.
  • docker-compose.persist.yml: дополнение для использования при постоянных развертываниях, т.е. указано в .gitlab-ci.yml, требует docker-compose.traefik.yml.

Вам нужно изменить:

  • .gitlab-ci.yml: есть несколько комментариев # UNCOMMENT ABOVE AND REMOVE BELOW, делайте так, как сказано, чтобы вы использовали yourlabs/ansible.
  • ci.yourlabs.io на ваш сервер в .gitlab-ci.yml.
  • Переменная Gitlab CI для установки: $CI_SSH_KEY, она должна содержать закрытый ключ ed25510, вы можете создать его с помощью: ssh-keygen -t ed25519 -a 100.
  • Dockerfile: измените аргумент команды --module=wsgi:application на соответствующий путь к вашему wsgi приложению, удалите настройку bigsudo, если хотите, и раскомментируйте то, что вам нужно.

После этого вы можете настроить все, что хотите!

Другие команды bigsudo, которые вы можете использовать:

  • включите резервное копирование systemd таймер с помощью: bigsudo yourlabs.compose backup home=/home/$CI_PROJECT_NAME-$CI_ENVIRONMENT_NAME.
  • на сервере CI для развертывания проверки, чтобы удалить неиспользуемые образы, тома и сети: bigsudo yourlabs.docker prunecron @ci.your.host, это предотвращает заполнение дискового пространства ревью-развертывания.

Вы также можете получить более общую и концептуальную информацию на блог-статье о eXtreme DevOps.

Документация по функциям

Цель этой роли заключается в автоматизации развертывания объединения файлов docker-compose.yml в директорию на хосте и автоматизации процессов вокруг этого.

Из директории с файлом docker-compose.yml вы можете развернуть его в $host:/home/staging с помощью следующей команды:

bigsudo yourlabs.compose home=/home/staging $user@$host

Если $user@$host не определен, то команда выполнится на localhost.

Вы можете передать несколько файлов компоновки, и переменные окружения будут проксироваться при генерации финального файла:

FOO=bar bigsudo yourlabs.compose \
    home=/home/staging \
    compose_django_image=$YOUR_IMAGE \
    compose=docker-compose.yml,docker-compose.staging.yml

Генерация директорий

Эта роль также может предварительно создавать директории с заданным uid, gid и режимом, с помощью метки io.yourlabs.compose.mkdir следующим образом:

volumes:
- "./log/admin:/app/log"
labels:
- "io.yourlabs.compose.mkdir=./app/log:1000:1000:0750"

Это приведет к созданию директории {{ home }}/log/admin с владельцем 1000 и группой 1000 и режимом 0750.

Генерация окружения

Еще одна интересная функция — автоматическое предоставление окружения с каждой переменной, объявленной в окружении сервиса, которая определяется во время выполнения. Например, с этим в docker-compose.yml:

environment:
- FOO

Затем выполнение роли yourlabs.compose с переменной FOO, установленной следующим образом:

FOO=bar bigsudo yourlabs.compose home=/home/test

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

environment:
- FOO=bar

Переопределение YAML в командной строке

Вы также можете добавлять или переопределять значения сервиса с помощью переменной compose_servicename_keyname. Пример переопределения значения compose[services][django][image] на лету:

bigsudo yourlabs.compose home=/home/test compose_django_image=yourimage

Вы можете очищать значения на лету, просто передавая пустые значения, т.е. чтобы сделать compose[services][django][build] пустым, передайте compose_django_build= без значения. Если вы не клонировали свой репозиторий в домашнюю директорию, тогда docker-compose выдаст ошибку, если не найдет путь к Dockerfile, это обходит это ограничение:

bigsudo yourlabs.compose home=/home/test compose_django_build=

Автоматизация сети

С сетями может быть немного сложно управлять с помощью docker-compose, например, у нас обычно есть сеть web с балансировщиком нагрузки, таким как traefik. Это добавляет сеть web к сервису django, и она автоматически подключит сеть, если она присутствует, объявив сеть web как внешнюю в файле docker-compose.yml, который развертывается:

bigsudo yourlabs.compose home=/home/test compose_django_networks=web

Если вы делаете docker-compose.yml для вашего балансировщика нагрузки, у вас будет противоположная проблема: docker-compose.yml объявляет сеть web как внешнюю, но docker-compose up не создаст её и выдаст ошибку:

ERROR: Network web declared as external, but could not be found. Please
create the network manually using `docker network create lol` and try again.

Эта роль предотвращает эту проблему, анализируя docker-compose.yml на предмет внешних сетей и используя модуль ansible docker_network для предварительного создания сети на хосте, если это необходимо.

Как роль ansible

Наконец, вы можете использовать эту роль как любую другую роль ansible, если хотите обернуть её в большее количество задач в вашем репозитории:

- name: Убедитесь, что docker был настроен один раз на этом хосте
  include_role: name=yourlabs.compose
  vars:
    home: /home/yourthing
    compose_django_image: foobar
    compose_django_build:
    compose_django_networks:
    - web

Резервное копирование

Автоматическое резервное копирование включено для развертываний с аргументом home. Оно настроит 3 сценария в /home:

  • ./backup.sh: создаёт локальную дамп и резервную копию в restic.
  • ./restore.sh: выводит список снимков restic, выполните его с хешем снимка restic в качестве аргумента для восстановления снимка.
  • ./prune.sh: удаляет старые резервные копии.

Будет создано 1 системная служба и системный таймер:

  • backup-PROJECTNAME.service
  • backup-PROJECTNAME.timer

Хакерство

Для разработки этой роли на localhost:

# соберите образ
docker build -t test .

# запустите bigsudo таким образом:
bigsudo . home=/tmp/test compose_django_build= compose_django_image=test compose=docker-compose.yml,docker-compose.persist.yml

Обратите внимание, что он всегда будет пытаться выполнить сценарий резервного копирования перед его обновлением. Если вы измените его, вам нужно удалить backup.sh перед повторным запуском yourlabs.compose, чтобы он обновил backup.sh.

О проекте

Deploy a docker-compose.yml in a target directory

Установить
ansible-galaxy install yourlabs/yourlabs.compose
Лицензия
Unknown
Загрузки
3909
Владелец
OSS Hack'n'Dev, we provide all kind of paid services on OSS and sponsor OSS