caddy_docker
Ansible Роль: dbrennand.caddy_docker
Ansible роль для развёртывания Caddy в контейнере Docker.
Требования
community.docker
коллектор Ansible:ansible-galaxy collection install community.docker
Переменные роли
caddy_docker_state: present
Управляет состоянием ресурсов, развернутых этой ролью. Установите absent
, чтобы удалить директории Caddy (данные и конфигурация), Caddyfile, Docker сети, изображение и контейнер.
caddy_docker_config_directory:
path: ~/.config/caddy/
# Опционально
# owner: владелец
# group: группа
# mode: 0755
caddy_docker_data_directory:
path: ~/.local/share/caddy/
# ...
Абсолютный путь к директориям конфигурации и данных Caddy для создания. Присоединяются к контейнеру как привязанные тома.
caddy_docker_caddyfile: |-
localhost
respond "Hello, world!"
Содержимое Caddyfile, используемое для конфигурации Caddy.
caddy_docker_caddyfile_file:
path: ~/.config/Caddyfile
# ...
Абсолютный путь к Caddyfile для создания. Присоединяется к контейнеру как привязанный том.
caddy_docker_image: caddy:2.7.4-alpine
caddy_docker_builder_image: caddy:2.7.4-builder
Репозитории изображений контейнеров, имена и метки, используемые для развёртывания Caddy как контейнера. Переменная caddy_docker_builder_image
используется только в случае заполнения caddy_docker_plugins
.
caddy_docker_builder_directory:
path: /tmp/caddy-builder/
# ...
Абсолютный путь для директории, используемой как контекст сборки контейнера. Эта переменная используется только в случае заполнения caddy_docker_plugins
. Вы можете переопределить эту переменную, если используете свой шаблон Dockerfile и хотите включить файлы во время процесса сборки контейнера Caddy.
caddy_docker_builder_template: dockerfile.j2
# Используя плагин lookup
# caddy_docker_builder_template: "{{ lookup('template', 'templates/dockerfile.custom.j2') }}"
Шаблон Dockerfile, используемый для сборки контейнера Caddy. Эта переменная используется только в случае заполнения caddy_docker_plugins
.
caddy_docker_builder_force: false
Значение, указывающее, нужно ли принудительно перестроить контейнер Caddy. Эта переменная используется только в случае заполнения caddy_docker_plugins
.
caddy_docker_plugins: []
# Пример
# caddy_docker_plugins:
# - github.com/caddy-dns/cloudflare
# - github.com/lucaslorentz/caddy-docker-proxy/v2
Список плагинов, которые необходимо включить в контейнер Caddy.
caddy_docker_networks:
- name: caddy
Названия Docker сетей, которые будут созданы и подключены к контейнеру Caddy.
caddy_docker_network_mode: default
Режим сети Docker, который будет использоваться для контейнера Caddy. Переменные caddy_docker_networks
, caddy_docker_ports
и caddy_docker_exposed_ports
не влияют, когда эта переменная установлена в host
.
caddy_docker_command: caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
Команда для запуска контейнера Caddy. Вы можете переопределить это значение, если используете плагины.
caddy_docker_restart_policy: unless-stopped
Политика перезагрузки для контейнера Caddy.
caddy_docker_ports:
- 80:80
- 443:443
- "443:443/udp"
caddy_docker_exposed_ports: []
# Пример
# caddy_docker_exposed_ports:
# - 9000
Порты, которые нужно открыть в контейнере Caddy.
caddy_docker_etc_hosts: {}
# Пример
# caddy_docker_etc_hosts:
# host.docker.internal: host-gateway
Сопоставления хоста с IP, которые нужно добавить в файл /etc/hosts
контейнера Caddy.
caddy_docker_extra_volumes: []
# Пример
# caddy_docker_extra_volumes:
# - /site:/srv
Дополнительные тома, которые нужно подключить к контейнеру Caddy.
caddy_docker_environment_variables: {}
# Пример
# caddy_docker_environment_variables:
# DOMAIN: example.com
Переменные окружения, которые нужно применить к контейнеру Caddy.
Зависимости
Нет.
Пример плейбука
- name: dbrennand.caddy_docker
hosts: all
vars:
pip_install_packages:
- name: docker
pre_tasks:
- name: Обновить кэш apt
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- dbrennand.caddy_docker
Пример - Challenge DNS-01 Cloudflare
Этот пример использует модуль Cloudflare для Caddy для получения сертификатов (включая wildcard) от Let's Encrypt для домена, управляемого Cloudflare. Это полезно, когда вы хотите получить сертификаты, не открывая порт 80 (HTTP) для интернета.
Вам необходимо сгенерировать токен API для Caddy для аутентификации в API Cloudflare и создать TXT-запись для Challenge DNS-01:
Перейдите на страницу профиля панели управления Cloudflare.
В левой части выберите API Tokens > Create Token.
Выберите шаблон токена API под названием Edit zone DNS.
Измените Token name на ваше усмотрение.
В разделе Permissions выберите + Add more и добавьте разрешение:
Zone / Zone / Read
.В разделе Zone Resources включите вашу зону:
Include / Specific zone / example.tld
.Опционально - Настройте фильтрацию IP-адресов клиентов, если необходимо.
Нажмите Continue to summary > Create Token.
- name: dbrennand.caddy_docker - Cloudflare
hosts: all
vars:
# переменные роли geerlingguy.pip
pip_install_packages:
- name: docker
# переменные роли dbrennand.caddy_docker
caddy_docker_caddyfile: |-
{
email {$ACME_EMAIL}
}
# Challenge DNS-01 Cloudflare
(cloudflare) {
tls {
dns cloudflare {$CLOUDFLARE_API_TOKEN}
}
}
service.{$DOMAIN} {
import cloudflare
reverse_proxy container:port
}
caddy_docker_plugins:
- github.com/caddy-dns/cloudflare
caddy_docker_environment_variables:
DOMAIN: domain.tld
ACME_EMAIL: [email protected]
CLOUDFLARE_API_TOKEN: token
pre_tasks:
- name: Обновить кэш apt
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- dbrennand.caddy_docker
Пример - Tailscale
Этот пример использует artis3n/ansible-role-tailscale для установки Tailscale и конфигурации Caddy, чтобы получить сертификат от Let's Encrypt для вашего узла Tailscale. Вы должны иметь включенными функции MagicDNS и HTTPS Certificate для вашей сети Tailnet.
- name: dbrennand.caddy_docker - Tailscale
hosts: all
vars:
# переменные роли geerlingguy.pip
pip_install_packages:
- name: docker
# переменные роли artis3n.tailscale
tailscale_authkey: key
# переменные роли dbrennand.caddy_docker
caddy_docker_caddyfile: |-
{
email {$ACME_EMAIL}
}
# Tailscale
(tailscale) {
tls {
get_certificate tailscale
}
}
node.{$TAILNET} {
import tailscale
reverse_proxy container:port
}
caddy_docker_extra_volumes:
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
caddy_docker_environment_variables:
ACME_EMAIL: [email protected]
TAILNET: domain-alias.ts.net
pre_tasks:
- name: Обновить кэш apt
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- artis3n.tailscale
- dbrennand.caddy_docker
Тесты Molecule 🧪
Чтобы протестировать роль, используйте molecule: molecule test
Лицензия
Этот проект лицензирован под лицензией MIT - смотрите LICENSE для деталей.
Авторы и участники
dbrennand - Автор
ansible-galaxy install dbrennand/ansible-role-caddy-docker