dbrennand.caddy_docker

Rol de Ansible: dbrennand.caddy_docker

Ansible-Lint Molecule Ansible-Release

Rol de Ansible para desplegar Caddy en un contenedor Docker.

Requisitos

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:

  1. Ve a la página de perfil del panel de Cloudflare.

  2. A la izquierda selecciona API Tokens > Crear Token.

  3. Selecciona la plantilla de token de API llamada Editar zone DNS.

  4. Modifica el nombre del token a tu gusto.

  5. Bajo Permisos selecciona + Añadir más y agrega el permiso: Zona / Zona / Leer.

  6. Bajo Recursos de Zona incluye tu zona: Incluir / Zona específica / example.tld.

  7. Opcional - Configura el filtrado de dirección IP del cliente si lo deseas.

  8. 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

Acerca del proyecto

Deploy Caddy in a Docker container

Instalar
ansible-galaxy install dbrennand.caddy_docker
Licencia
mit
Descargas
2.7k
Propietario
Automating stuff @Dell