dbrennand.caddy_docker

Rola Ansible: dbrennand.caddy_docker

Ansible-Lint Molecule Ansible-Release

Rola Ansible do uruchamiania Caddy w kontenerze Docker.

Wymagania

Zmienne Roli

caddy_docker_state: present

Zarządzanie stanem zasobów wdrożonych przez tę rolę. Ustaw na absent, aby usunąć katalogi Caddy (dane i konfigurację), plik Caddyfile, sieć Docker, obraz i kontener.

caddy_docker_config_directory:
  path: ~/.config/caddy/
  # Opcjonalne
  # owner: właściciel
  # group: grupa
  # mode: 0755
caddy_docker_data_directory:
  path: ~/.local/share/caddy/
  # ...

Absolutna ścieżka do katalogów konfiguracyjnych i danych Caddy, które mają być utworzone. Podłączone do kontenera jako montaż wiązania.

caddy_docker_caddyfile: |-
  localhost
  respond "Witaj, świecie!"

Zawartość Caddyfile używana do konfiguracji Caddy.

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

Absolutna ścieżka do pliku Caddyfile, który ma być utworzony. Podłączone do kontenera jako montaż wiązania.

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

Repozytoria, nazwy i tagi obrazów kontenerów używane do wdrażania Caddy jako kontenera. Zmienna caddy_docker_builder_image jest używana tylko wtedy, gdy caddy_docker_plugins jest wypełnione.

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

Absolutna ścieżka do katalogu używanego jako kontekst budowy kontenera. Ta zmienna jest używana tylko wtedy, gdy caddy_docker_plugins jest wypełnione. Możesz chcieć nadpisać tę zmienną, jeśli używasz własnego szablonu dockerfile i chcesz dołączyć pliki podczas procesu budowy kontenera Caddy.

caddy_docker_builder_template: dockerfile.j2
# Użycie pluginu lookup
# caddy_docker_builder_template: "{{ lookup('template', 'templates/dockerfile.custom.j2') }}"

Szablon Dockerfile używany do budowy kontenera Caddy. Ta zmienna jest używana tylko wtedy, gdy caddy_docker_plugins jest wypełnione.

caddy_docker_builder_force: false

Czy wymusić odbudowę kontenera Caddy. Ta zmienna jest używana tylko wtedy, gdy caddy_docker_plugins jest wypełnione.

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

Lista wtyczek do uwzględnienia w kontenerze Caddy.

caddy_docker_networks:
  - name: caddy

Nazwy sieci Docker, które mają zostać utworzone i podłączone do kontenera Caddy.

caddy_docker_network_mode: default

Tryb sieci Docker do użycia dla kontenera Caddy. Zmienne caddy_docker_networks, caddy_docker_ports i caddy_docker_exposed_ports nie mają wpływu, gdy ta zmienna jest ustawiona na host.

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

Polecenie do uruchamiania kontenera Caddy. Możesz chcieć nadpisać to, gdy używasz wtyczek.

caddy_docker_restart_policy: unless-stopped

Polityka ponownego uruchamiania kontenera Caddy.

caddy_docker_ports:
  - 80:80
  - 443:443
  - "443:443/udp"
caddy_docker_exposed_ports: []
# Przykład
# caddy_docker_exposed_ports:
#   - 9000

Porty do wystawienia w kontenerze Caddy.

caddy_docker_etc_hosts: {}
# Przykład
# caddy_docker_etc_hosts:
#   host.docker.internal: host-gateway

Mapowania hostów do adresów IP, które mają zostać umieszczone w pliku /etc/hosts kontenera Caddy.

caddy_docker_extra_volumes: []
# Przykład
# caddy_docker_extra_volumes:
#   - /site:/srv

Dodatkowe woluminy do podłączenia do kontenera Caddy.

caddy_docker_environment_variables: {}
# Przykład
# caddy_docker_environment_variables:
#   DOMAIN: example.com

Zmienne środowiskowe do zastosowania w kontenerze Caddy.

Zależności

Brak.

Przykładowy Playbook

- name: dbrennand.caddy_docker
  hosts: all
  vars:
    pip_install_packages:
      - name: docker
  pre_tasks:
    - name: Aktualizacja pamięci podręcznej apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Przykład - Wyzwanie DNS-01 Cloudflare

Ten przykład używa modułu Cloudflare dla Caddy, aby uzyskać certyfikaty (w tym wildcardy) od Let's Encrypt dla domeny zarządzanej przez Cloudflare. Jest to przydatne, kiedy chcesz uzyskać certyfikaty bez otwierania portu 80 (HTTP) w Internecie.

Musisz wygenerować token API, aby Caddy mógł się autoryzować w API Cloudflare i utworzyć rekord TXT dla wyzwania DNS-01:

  1. Przejdź do strony profilu na panelu kontrolnym Cloudflare.

  2. Po lewej stronie wybierz API Tokens > Create Token.

  3. Wybierz szablon tokenu API nazwany Edit zone DNS.

  4. Zmień Nazwa tokenu na swoją.

  5. W sekcji Uprawnienia wybierz + Dodaj więcej i dodaj uprawnienie: Zone / Zone / Read.

  6. W sekcji Zasoby strefy dołącz swoją strefę: Include / Specific zone / example.tld.

  7. Opcjonalne - Skonfiguruj filtrowanie adresów IP klienta, jeśli to konieczne.

  8. Kliknij Kontynuuj do podsumowania > Utwórz token.

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

      # Wyzwanie 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: Aktualizacja pamięci podręcznej apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Przykład - Tailscale

Ten przykład używa artis3n/ansible-role-tailscale, aby zainstalować Tailscale i skonfigurować Caddy do uzyskania certyfikatu od Let's Encrypt dla Twojego węzła Tailscale. Musisz mieć włączone funkcje MagicDNS oraz Certyfikat HTTPS dla Twojego Tailnet.

- name: dbrennand.caddy_docker - Tailscale
  hosts: all
  vars:
    # zmienne roli geerlingguy.pip
    pip_install_packages:
      - name: docker
    # zmienne roli artis3n.tailscale
    tailscale_authkey: key
    # zmienne roli 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: Aktualizacja pamięci podręcznej apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - artis3n.tailscale
    - dbrennand.caddy_docker

Testy Molecule 🧪

Aby przetestować rolę, użyj molecule: molecule test

Licencja

Ten projekt jest licencjonowany na podstawie licencji MIT - zobacz LICENCJA szczegóły.

Autorzy i Współtwórcy

dbrennand - Autor

O projekcie

Deploy Caddy in a Docker container

Zainstaluj
ansible-galaxy install dbrennand.caddy_docker
Licencja
mit
Pobrania
2.7k
Właściciel
Automating stuff @Dell