dbrennand.caddy_docker

Ansible Rolle: dbrennand.caddy_docker

Ansible-Lint Molecule Ansible-Release

Ansible Rolle zur Bereitstellung von Caddy in einem Docker-Container.

Anforderungen

Rollenspezifische Variablen

caddy_docker_state: present

Verwaltet den Zustand der von dieser Rolle bereitgestellten Ressourcen. Auf absent setzen, um die Caddy-Verzeichnisse (Daten und Konfiguration), die Caddyfile, Docker-Netzwerk(e), das Bild und den Container zu entfernen.

caddy_docker_config_directory:
  path: ~/.config/caddy/
  # Optional
  # owner: Eigentümer
  # group: Gruppe
  # mode: 0755
caddy_docker_data_directory:
  path: ~/.local/share/caddy/
  # ...

Absoluter Pfad zu den Caddy-Config- und Datenverzeichnissen, die erstellt werden sollen. Diese werden als Bind-Mounts am Container angehängt.

caddy_docker_caddyfile: |-
  localhost
  respond "Hallo, Welt!"

Inhalt der Caddyfile, die verwendet wird, um Caddy zu konfigurieren.

caddy_docker_caddyfile_file:
  path: ~/.config/Caddyfile
  # ...

Absoluter Pfad zur Caddyfile, die erstellt werden soll. Diese wird als Bind-Mount am Container angehängt.

caddy_docker_image: caddy:2.7.4-alpine
caddy_docker_builder_image: caddy:2.7.4-builder

Containerbild Repositories, Namen und Tags, die verwendet werden, um Caddy als Container bereitzustellen. Die Variable caddy_docker_builder_image wird nur verwendet, wenn caddy_docker_plugins befüllt ist.

caddy_docker_builder_directory:
  path: /tmp/caddy-builder/
  # ...

Absoluter Pfad für das Verzeichnis, das als Container-Baukontext verwendet wird. Diese Variable wird nur verwendet, wenn caddy_docker_plugins befüllt ist. Sie können diese Variable überschreiben, wenn Sie Ihre eigene Dockerfile-Vorlage mitbringen und Dateien während des Bauvorgangs des Caddy-Containers einfügen möchten.

caddy_docker_builder_template: dockerfile.j2
# Verwendung des Lookup-Plugins
# caddy_docker_builder_template: "{{ lookup('template', 'templates/dockerfile.custom.j2') }}"

Dockerfile-Vorlage, die verwendet wird, um den Caddy-Container zu bauen. Diese Variable wird nur verwendet, wenn caddy_docker_plugins befüllt ist.

caddy_docker_builder_force: false

Ob der Caddy-Container neu gebaut werden soll oder nicht. Diese Variable wird nur verwendet, wenn caddy_docker_plugins befüllt ist.

caddy_docker_plugins: []
# Beispiel
# caddy_docker_plugins:
#   - github.com/caddy-dns/cloudflare
#   - github.com/lucaslorentz/caddy-docker-proxy/v2

Liste der Plugins, die im Caddy-Container enthalten sein sollen.

caddy_docker_networks:
  - name: caddy

Namen der Docker-Netzwerke, die erstellt und am Caddy-Container angehängt werden sollen.

caddy_docker_network_mode: default

Docker-Netzwerkmodus, der für den Caddy-Container verwendet werden soll. Die Variablen caddy_docker_networks, caddy_docker_ports und caddy_docker_exposed_ports haben keinen Einfluss, wenn diese Variable auf host gesetzt ist.

caddy_docker_command: caddy run --config /etc/caddy/Caddyfile --adapter caddyfile

Befehl zum Starten des Caddy-Containers. Sie möchten dies möglicherweise überschreiben, wenn Sie Plugins verwenden.

caddy_docker_restart_policy: unless-stopped

Neustart-Richtlinie für den Caddy-Container.

caddy_docker_ports:
  - 80:80
  - 443:443
  - "443:443/udp"
caddy_docker_exposed_ports: []
# Beispiel
# caddy_docker_exposed_ports:
#   - 9000

Ports, die im Caddy-Container freigegeben werden sollen.

caddy_docker_etc_hosts: {}
# Beispiel
# caddy_docker_etc_hosts:
#   host.docker.internal: host-gateway

Host-zu-IP-Zuordnungen, die in die /etc/hosts-Datei des Caddy-Containers eingefügt werden sollen.

caddy_docker_extra_volumes: []
# Beispiel
# caddy_docker_extra_volumes:
#   - /site:/srv

Zusätzliche Volumes, die am Caddy-Container angehängt werden sollen.

caddy_docker_environment_variables: {}
# Beispiel
# caddy_docker_environment_variables:
#   DOMAIN: example.com

Umgebungsvariablen, die auf den Caddy-Container angewendet werden sollen.

Abhängigkeiten

Keine.

Beispiel Playbook

- name: dbrennand.caddy_docker
  hosts: all
  vars:
    pip_install_packages:
      - name: docker
  pre_tasks:
    - name: apt-Cache aktualisieren
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Beispiel - Cloudflare DNS-01 Herausforderung

Dieses Beispiel verwendet das Cloudflare-Modul für Caddy, um Zertifikate (einschließlich Wildcards) von Let's Encrypt für eine von Cloudflare verwaltete Domain zu erhalten. Dies ist nützlich, wenn Sie Zertifikate erhalten möchten, ohne Port 80 (HTTP) ins Internet zu öffnen.

Sie müssen ein API-Token generieren, damit Caddy sich beim Cloudflare API authentifizieren kann und einen TXT-Eintrag für die DNS-01-Herausforderung erstellt:

  1. Gehen Sie zur Cloudflare-Dashboard-Profilseite.

  2. Wählen Sie links API-Token > Token erstellen.

  3. Wählen Sie die API-Token-Vorlage „Bearbeiten der Zonendaten“.

  4. Ändern Sie den Tokennamen nach Ihren Wünschen.

  5. Unter Berechtigungen wählen Sie + Weitere hinzufügen und fügen Sie die Berechtigung hinzu: Zone / Zone / Lesen.

  6. Unter Zonenressourcen fügen Sie Ihre Zone hinzu: Einbeziehen / Bestimmte Zone / example.tld.

  7. Optional - Konfigurieren Sie die Client-IP-Adressfilterung, falls gewünscht.

  8. Klicken Sie auf Fortfahren zur Zusammenfassung > Token erstellen.

- name: dbrennand.caddy_docker - Cloudflare
  hosts: all
  vars:
    # Variablen der Rolle geerlingguy.pip
    pip_install_packages:
      - name: docker
    # Variablen der Rolle dbrennand.caddy_docker
    caddy_docker_caddyfile: |-
      {
              email {$ACME_EMAIL}
      }

      # Cloudflare DNS-01 Herausforderung
      (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-Cache aktualisieren
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Beispiel - Tailscale

Dieses Beispiel verwendet artis3n/ansible-role-tailscale, um Tailscale zu installieren und Caddy zu konfigurieren, um ein Zertifikat von Let's Encrypt für Ihren Tailscale-Knoten zu erhalten. Sie müssen die Funktionen MagicDNS und HTTPS-Zertifikat für Ihr Tailnet aktivieren.

- name: dbrennand.caddy_docker - Tailscale
  hosts: all
  vars:
    # Variablen der Rolle geerlingguy.pip
    pip_install_packages:
      - name: docker
    # Variablen der Rolle artis3n.tailscale
    tailscale_authkey: key
    # Variablen der Rolle 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-Cache aktualisieren
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - artis3n.tailscale
    - dbrennand.caddy_docker

Molekül-Tests 🧪

Um die Rolle zu testen, verwenden Sie Molecule: molecule test

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert - siehe die LICENSE für weitere Details.

Autoren & Mitwirkende

dbrennand - Autor

Über das Projekt

Deploy Caddy in a Docker container

Installieren
ansible-galaxy install dbrennand.caddy_docker
GitHub Repository
Lizenz
mit
Downloads
2.7k
Besitzer
Automating stuff @Dell