docker_webapps
blauwe_lucht.docker_webapps
Роль Ansible для запуска нескольких веб-приложений на HTTPS на одном Docker хосте, подписанных самоподписанными сертификатами или сертификатами от Let's Encrypt.
Эта роль создает контейнер обратного прокси, работающий на nginx, и настраивает его для пересылки запросов к зарегистрированным веб-приложениям. По запросу каждое веб-приложение получит сертификат Let's Encrypt, чтобы его можно было достичь по HTTPS. Эти сертификаты будут автоматически обновляться через контейнер certbot. Если Let's Encrypt не используется, будут создаваться самоподписанные сертификаты для HTTPS.
Т текущее состояние
Alpha. Используйте эту роль только для тестирования. Тесты molecule еще не написаны.
Требования
Узел должен уже иметь запущенный Docker. Это можно сделать, например, с помощью роли geerlingguy.docker.
Переменные роли
docker_webapps
Конфигурация веб-приложений для запуска. Пример:
docker_webapps:
- name: samtris
docker_image: blauwelucht/samtris:v2.0
port: 8080
volumes:
- /var/log:/var/log
name
Имя службы Docker Compose, которая будет сгенерирована, а также имя поддомена, на который будет слушать обратный прокси.
docker_image
Образ, который будет использоваться для размещения веб-приложения. Рекомендуется использовать тег, так как эта роль не будет проверять обновленные образы Docker.
port
Порт в контейнере, на котором слушает веб-приложение.
volumes
Томами можно пренебречь, они будут скопированы дословно в сгенерированный файл docker-compose.yml.
docker_webapps_use_lets_encrypt
Установите use_lets_encrypt в true только тогда, когда Docker хост доступен из интернета. Это необходимо для Let's Encrypt, чтобы подтвердить запрос на сертификат. Когда use_lets_encrypt равен false, будет использоваться самоподписанный сертификат.
docker_webapps_domain_name
Доменное имя, частью которого являются все поддомены.
docker_webapps_email_address
docker_webapps_organization_name
docker_webapps_country_name
Адрес электронной почты, организация и страна, использованные для запроса как самоподписанных, так и сертификатов Let's Encrypt.
docker_webapps_docker_compose_project
Имя проекта для Docker Compose. Нужно изменять только в том случае, если уже есть проект Docker Compose с тем же именем.
docker_webapps_reverse_proxy_container_name
Имя контейнера обратного прокси. Нужно изменять только в том случае, если уже есть контейнер с таким именем.
docker_webapps_certbot_renew_container_name
Имя контейнера certbot для обновления сертификатов. Нужно изменять только в том случае, если уже есть контейнер с таким именем.
docker_webapps_certbot_staging_param
При тестировании установите docker_webapps_certbot_staging_param в "--staging", чтобы не достичь лимитов Let's Encrypt.
Зависимости
Нет
Пример плейбука
- hosts: servers
roles:
- name: blauwe_lucht/docker_webapps
vars:
docker_webapps:
- name: samtris
docker_image: blauwelucht/samtris:v2.0
port: 8080
docker_webapps_use_lets_encrypt: true
docker_webapps_domain_name: example.com
docker_webapps_email_address: [email protected]
docker_webapps_organization_name: ACME
docker_webapps_country_name: NL
Примечания
- Убедитесь, что FQDN
<site.domain>
разрешается на ваш сервер. FQDN используется обратным прокси для маршрутизации запросов к правильному веб-приложению. - Для каждого веб-приложения nginx слушает, на дополнительное имя сайта зарегистрировано, чтобы можно было тестировать ваши Ansible
скрипты на тестовом сервере:
<site>-tst.<domain>
. - Лучший способ управлять обновлениями контейнеров веб-приложений — использовать теги в именах образов. При обновлении тега в переменной конфигурации docker_webapps обновление будет зафиксировано, и новые образы будут загружены и использованы для замены существующего контейнера.
- Чтобы удалить/обновить сертификат Let's Encrypt, выполните
certbot delete --cert-name <fqdn>
в контейнере certbot, иначе некоторый исторический след останется, и вы получите новые сертификаты с префиксом -0001, которые не будут найдены nginx. ВАЖНО: удаляйте/обновляйте только один сертификат за раз, иначе nginx не сможет запуститься, потому что у одного из сайтов отсутствует SSL сертификат, в то время как конфигурация все еще его указывает. (Я еще не нашел способа это исправить). - Если не использовать сертификаты Let's Encrypt, веб-приложения все равно могут быть доступны по HTTPS, но вы получите предупреждение в вашем браузере о том, что сертификат самоподписан. Эти предупреждения для таких веб-приложений можно смело игнорировать.
Лицензия
BSD
Информация об авторе
Эта роль была создана в 2020 году компанией Blauwe Lucht.
Role to run multiple webapps on https on a single Docker host, signed with self-signed or Let's Encrypt certificates.
ansible-galaxy install blauwe-lucht/ansible-role-docker-webapps