dbrennand.caddy_docker
Rol de Ansible: dbrennand.caddy_docker
Rol de Ansible para desplegar Caddy en un contenedor Docker.
Requisitos
Colección de Ansible
community.docker
:ansible-galaxy collection install community.docker
Variables del Rol
caddy_docker_state: present
Administra el estado de los recursos desplegados por este rol. Establecer en absent
para eliminar los directorios de Caddy (datos y configuración), el Caddyfile, la red Docker, la imagen y el contenedor.
caddy_docker_config_directory:
path: ~/.config/caddy/
# Opcional
# owner: propietario
# group: grupo
# mode: 0755
caddy_docker_data_directory:
path: ~/.local/share/caddy/
# ...
Ruta absoluta a los directorios de configuración y datos de Caddy que se van a crear. Se adjunta al contenedor como montajes de enlace.
caddy_docker_caddyfile: |-
localhost
respond "¡Hola, mundo!"
Contenido del Caddyfile utilizado para configurar Caddy.
caddy_docker_caddyfile_file:
path: ~/.config/Caddyfile
# ...
Ruta absoluta al Caddyfile que se va a crear. Se adjunta al contenedor como un montaje de enlace.
caddy_docker_image: caddy:2.7.4-alpine
caddy_docker_builder_image: caddy:2.7.4-builder
Repositorios de imágenes del contenedor, nombres y etiquetas utilizados para desplegar Caddy como un contenedor. La variable caddy_docker_builder_image
solo se usa cuando caddy_docker_plugins
tiene contenido.
caddy_docker_builder_directory:
path: /tmp/caddy-builder/
# ...
Ruta absoluta para el directorio utilizado como contexto de construcción del contenedor. Esta variable solo se usa cuando caddy_docker_plugins
tiene contenido. Puede que desee sobrescribir esta variable si trae su propia plantilla de Dockerfile y desea incluir archivos durante el proceso de construcción del contenedor de Caddy.
caddy_docker_builder_template: dockerfile.j2
# Usando el plugin de búsqueda
# caddy_docker_builder_template: "{{ lookup('template', 'templates/dockerfile.custom.j2') }}"
Plantilla de Dockerfile utilizada para construir el contenedor Caddy. Esta variable solo se utiliza cuando caddy_docker_plugins
tiene contenido.
caddy_docker_builder_force: false
Si forzar o no la reconstrucción del contenedor Caddy. Esta variable solo se usa cuando caddy_docker_plugins
tiene contenido.
caddy_docker_plugins: []
# Ejemplo
# caddy_docker_plugins:
# - github.com/caddy-dns/cloudflare
# - github.com/lucaslorentz/caddy-docker-proxy/v2
Lista de complementos para incluir en el contenedor de Caddy.
caddy_docker_networks:
- name: caddy
Nombres de las redes Docker que se van a crear y adjuntar al contenedor de Caddy.
caddy_docker_network_mode: default
Modo de red de Docker que se utilizará para el contenedor de Caddy. Las variables caddy_docker_networks
, caddy_docker_ports
y caddy_docker_exposed_ports
no tienen efecto cuando esta variable está configurada como host
.
caddy_docker_command: caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
Comando para iniciar el contenedor de Caddy. Puede que desee sobrescribir esto al usar complementos.
caddy_docker_restart_policy: unless-stopped
Política de reinicio para el contenedor de Caddy.
caddy_docker_ports:
- 80:80
- 443:443
- "443:443/udp"
caddy_docker_exposed_ports: []
# Ejemplo
# caddy_docker_exposed_ports:
# - 9000
Puertos a exponer en el contenedor de Caddy.
caddy_docker_etc_hosts: {}
# Ejemplo
# caddy_docker_etc_hosts:
# host.docker.internal: host-gateway
Mapas de host a IP que se colocarán en el archivo /etc/hosts
del contenedor de Caddy.
caddy_docker_extra_volumes: []
# Ejemplo
# caddy_docker_extra_volumes:
# - /site:/srv
Volúmenes adicionales a adjuntar al contenedor de Caddy.
caddy_docker_environment_variables: {}
# Ejemplo
# caddy_docker_environment_variables:
# DOMAIN: example.com
Variables de entorno para aplicar al contenedor de Caddy.
Dependencias
Ninguna.
Ejemplo de Playbook
- name: dbrennand.caddy_docker
hosts: all
vars:
pip_install_packages:
- name: docker
pre_tasks:
- name: Actualizar caché de apt
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- dbrennand.caddy_docker
Ejemplo - Desafío DNS-01 de Cloudflare
Este ejemplo utiliza el módulo de Cloudflare para Caddy para obtener certificados (incluidos los comodines) de Let's Encrypt para un dominio gestionado por Cloudflare. Esto es útil cuando desea obtener certificados sin abrir el puerto 80 (HTTP) a Internet.
Debes generar un token de API para que Caddy se autentique en la API de Cloudflare y crear un registro TXT para el desafío DNS-01:
A la izquierda selecciona API Tokens > Crear Token.
Selecciona la plantilla de token de API llamada Editar zone DNS.
Modifica el nombre del token a tu gusto.
Bajo Permisos selecciona + Añadir más y agrega el permiso:
Zona / Zona / Leer
.Bajo Recursos de Zona incluye tu zona:
Incluir / Zona específica / example.tld
.Opcional - Configura el filtrado de dirección IP del cliente si lo deseas.
Haz clic en Continuar al resumen > Crear Token.
- name: dbrennand.caddy_docker - Cloudflare
hosts: all
vars:
# Vars del rol geerlingguy.pip
pip_install_packages:
- name: docker
# Vars del rol dbrennand.caddy_docker
caddy_docker_caddyfile: |-
{
email {$ACME_EMAIL}
}
# Desafío DNS-01 de 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: Actualizar caché de apt
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- dbrennand.caddy_docker
Ejemplo - Tailscale
Este ejemplo utiliza artis3n/ansible-role-tailscale para instalar Tailscale y configurar Caddy para obtener un certificado de Let's Encrypt para tu nodo de Tailscale. Debes tener habilitadas las características de MagicDNS y Certificado HTTPS para tu Tailnet.
- name: dbrennand.caddy_docker - Tailscale
hosts: all
vars:
# Vars del rol geerlingguy.pip
pip_install_packages:
- name: docker
# Vars del rol artis3n.tailscale
tailscale_authkey: key
# Vars del rol 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: Actualizar caché de apt
ansible.builtin.apt:
update_cache: true
roles:
- geerlingguy.pip
- geerlingguy.docker
- artis3n.tailscale
- dbrennand.caddy_docker
Pruebas de Molecule 🧪
Para probar el rol, usa molecule: molecule test
Licencia
Este proyecto está licenciado bajo la Licencia MIT - consulta el LICENSE para más detalles.
Autores y colaboradores
dbrennand - Autor
ansible-galaxy install dbrennand.caddy_docker