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.
ansible-galaxy install yourlabs/yourlabs.compose