dbrennand.caddy_docker

Ansible Role : dbrennand.caddy_docker

Ansible-Lint Molecule Ansible-Release

Rôle Ansible pour déployer Caddy dans un conteneur Docker.

Exigences

Variables du rôle

caddy_docker_state: present

Gérer l'état des ressources déployées par ce rôle. Mettre à absent pour supprimer les répertoires Caddy (données et configuration), Caddyfile, réseau(s) Docker, image et conteneur.

caddy_docker_config_directory:
  path: ~/.config/caddy/
  # Optionnel
  # owner: propriétaire
  # group: groupe
  # mode: 0755
caddy_docker_data_directory:
  path: ~/.local/share/caddy/
  # ...

Chemin absolu pour les répertoires de configuration et de données Caddy à créer. Attaché au conteneur en tant que montages de liaison.

caddy_docker_caddyfile: |-
  localhost
  respond "Bonjour, le monde!"

Contenu du Caddyfile utilisé pour configurer Caddy.

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

Chemin absolu vers le Caddyfile à créer. Attaché au conteneur en tant que montage de liaison.

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

Dépôts d'images de conteneur, noms et tags utilisés pour déployer Caddy en tant que conteneur. La variable caddy_docker_builder_image n'est utilisée que lorsque caddy_docker_plugins est renseigné.

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

Chemin absolu pour le répertoire utilisé comme contexte de construction du conteneur. Cette variable est seulement utilisée lorsque caddy_docker_plugins est renseigné. Vous pouvez vouloir remplacer cette variable si vous utilisez votre propre modèle de dockerfile et souhaitez inclure des fichiers pendant le processus de construction du conteneur Caddy.

caddy_docker_builder_template: dockerfile.j2
# Utilisation du plugin lookup
# caddy_docker_builder_template: "{{ lookup('template', 'templates/dockerfile.custom.j2') }}"

Modèle Dockerfile utilisé pour construire le conteneur Caddy. Cette variable est seulement utilisée lorsque caddy_docker_plugins est renseigné.

caddy_docker_builder_force: false

Pour forcer ou non la reconstruction du conteneur Caddy. Cette variable est seulement utilisée lorsque caddy_docker_plugins est renseigné.

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

Liste des plugins à inclure dans le conteneur Caddy.

caddy_docker_networks:
  - name: caddy

Noms des réseaux Docker à créer et à attacher au conteneur Caddy.

caddy_docker_network_mode: default

Mode de réseau Docker à utiliser pour le conteneur Caddy. Les variables caddy_docker_networks, caddy_docker_ports et caddy_docker_exposed_ports n'ont aucun effet lorsque cette variable est définie sur host.

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

Commande pour démarrer le conteneur Caddy. Vous pouvez vouloir remplacer cela lorsque vous utilisez des plugins.

caddy_docker_restart_policy: unless-stopped

Politique de redémarrage pour le conteneur Caddy.

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

Ports à exposer sur le conteneur Caddy.

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

Correspondances hôte à IP à placer dans le fichier /etc/hosts du conteneur Caddy.

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

Volumes supplémentaires à attacher au conteneur Caddy.

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

Variables d'environnement à appliquer au conteneur Caddy.

Dépendances

Aucune.

Exemple de Playbook

- name: dbrennand.caddy_docker
  hosts: all
  vars:
    pip_install_packages:
      - name: docker
  pre_tasks:
    - name: Mettre à jour le cache apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Exemple - Challenge DNS-01 Cloudflare

Cet exemple utilise le module Cloudflare pour Caddy pour obtenir des certificats (y compris des certificats wildcard) de Let's Encrypt pour un domaine géré par Cloudflare. Cela est utile lorsque vous souhaitez obtenir des certificats sans ouvrir le port 80 (HTTP) à Internet.

Vous devez générer un jeton API pour que Caddy s'authentifie à l'API Cloudflare et crée un enregistrement TXT pour le challenge DNS-01 :

  1. Allez sur la page de profil du tableau de bord Cloudflare.

  2. À gauche, sélectionnez Jetons API > Créer un jeton.

  3. Sélectionnez le modèle de jeton API nommé Modifier zone DNS.

  4. Modifiez le Nom du jeton à votre convenance.

  5. Dans Permissions, sélectionnez + Ajouter plus et ajoutez la permission : Zone / Zone / Lecture.

  6. Dans Ressources de la zone, incluez votre zone : Inclure / Zone spécifique / example.tld.

  7. Optionnel - Configurez la filtrage par adresse IP du client si souhaité.

  8. Cliquez sur Continuer vers le résumé > Créer le jeton.

- name: dbrennand.caddy_docker - Cloudflare
  hosts: all
  vars:
    # Variables du rôle geerlingguy.pip
    pip_install_packages:
      - name: docker
    # Variables du rôle 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: Mettre à jour le cache apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Exemple - Tailscale

Cet exemple utilise artis3n/ansible-role-tailscale pour installer Tailscale et configurer Caddy afin d'obtenir un certificat de Let's Encrypt pour votre nœud Tailscale. Vous devez avoir les fonctionnalités MagicDNS et Certificat HTTPS activées pour votre Tailnet.

- name: dbrennand.caddy_docker - Tailscale
  hosts: all
  vars:
    # Variables du rôle geerlingguy.pip
    pip_install_packages:
      - name: docker
    # Variables du rôle artis3n.tailscale
    tailscale_authkey: key
    # Variables du rôle 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: Mettre à jour le cache apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - artis3n.tailscale
    - dbrennand.caddy_docker

Tests Molecule 🧪

Pour tester le rôle, utilisez molecul: molecule test

Licence

Ce projet est sous licence MIT - voir le LICENSE pour les détails.

Auteurs & Contributeurs

dbrennand - Auteur

À propos du projet

Deploy Caddy in a Docker container

Installer
ansible-galaxy install dbrennand.caddy_docker
Licence
mit
Téléchargements
2.7k
Propriétaire
Automating stuff @Dell