caddy_docker

Ansible Роль: dbrennand.caddy_docker

Ansible-Lint Molecule Ansible-Release

Ansible роль для развёртывания Caddy в контейнере Docker.

Требования

Переменные роли

caddy_docker_state: present

Управляет состоянием ресурсов, развернутых этой ролью. Установите absent, чтобы удалить директории Caddy (данные и конфигурация), Caddyfile, Docker сети, изображение и контейнер.

caddy_docker_config_directory:
  path: ~/.config/caddy/
  # Опционально
  # owner: владелец
  # group: группа
  # mode: 0755
caddy_docker_data_directory:
  path: ~/.local/share/caddy/
  # ...

Абсолютный путь к директориям конфигурации и данных Caddy для создания. Присоединяются к контейнеру как привязанные тома.

caddy_docker_caddyfile: |-
  localhost
  respond "Hello, world!"

Содержимое Caddyfile, используемое для конфигурации Caddy.

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

Абсолютный путь к Caddyfile для создания. Присоединяется к контейнеру как привязанный том.

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

Репозитории изображений контейнеров, имена и метки, используемые для развёртывания Caddy как контейнера. Переменная caddy_docker_builder_image используется только в случае заполнения caddy_docker_plugins.

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

Абсолютный путь для директории, используемой как контекст сборки контейнера. Эта переменная используется только в случае заполнения caddy_docker_plugins. Вы можете переопределить эту переменную, если используете свой шаблон Dockerfile и хотите включить файлы во время процесса сборки контейнера Caddy.

caddy_docker_builder_template: dockerfile.j2
# Используя плагин lookup
# caddy_docker_builder_template: "{{ lookup('template', 'templates/dockerfile.custom.j2') }}"

Шаблон Dockerfile, используемый для сборки контейнера Caddy. Эта переменная используется только в случае заполнения caddy_docker_plugins.

caddy_docker_builder_force: false

Значение, указывающее, нужно ли принудительно перестроить контейнер Caddy. Эта переменная используется только в случае заполнения caddy_docker_plugins.

caddy_docker_plugins: []
# Пример
# caddy_docker_plugins:
#   - github.com/caddy-dns/cloudflare
#   - github.com/lucaslorentz/caddy-docker-proxy/v2

Список плагинов, которые необходимо включить в контейнер Caddy.

caddy_docker_networks:
  - name: caddy

Названия Docker сетей, которые будут созданы и подключены к контейнеру Caddy.

caddy_docker_network_mode: default

Режим сети Docker, который будет использоваться для контейнера Caddy. Переменные caddy_docker_networks, caddy_docker_ports и caddy_docker_exposed_ports не влияют, когда эта переменная установлена в host.

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

Команда для запуска контейнера Caddy. Вы можете переопределить это значение, если используете плагины.

caddy_docker_restart_policy: unless-stopped

Политика перезагрузки для контейнера Caddy.

caddy_docker_ports:
  - 80:80
  - 443:443
  - "443:443/udp"
caddy_docker_exposed_ports: []
# Пример
# caddy_docker_exposed_ports:
#   - 9000

Порты, которые нужно открыть в контейнере Caddy.

caddy_docker_etc_hosts: {}
# Пример
# caddy_docker_etc_hosts:
#   host.docker.internal: host-gateway

Сопоставления хоста с IP, которые нужно добавить в файл /etc/hosts контейнера Caddy.

caddy_docker_extra_volumes: []
# Пример
# caddy_docker_extra_volumes:
#   - /site:/srv

Дополнительные тома, которые нужно подключить к контейнеру Caddy.

caddy_docker_environment_variables: {}
# Пример
# caddy_docker_environment_variables:
#   DOMAIN: example.com

Переменные окружения, которые нужно применить к контейнеру Caddy.

Зависимости

Нет.

Пример плейбука

- name: dbrennand.caddy_docker
  hosts: all
  vars:
    pip_install_packages:
      - name: docker
  pre_tasks:
    - name: Обновить кэш apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Пример - Challenge DNS-01 Cloudflare

Этот пример использует модуль Cloudflare для Caddy для получения сертификатов (включая wildcard) от Let's Encrypt для домена, управляемого Cloudflare. Это полезно, когда вы хотите получить сертификаты, не открывая порт 80 (HTTP) для интернета.

Вам необходимо сгенерировать токен API для Caddy для аутентификации в API Cloudflare и создать TXT-запись для Challenge DNS-01:

  1. Перейдите на страницу профиля панели управления Cloudflare.

  2. В левой части выберите API Tokens > Create Token.

  3. Выберите шаблон токена API под названием Edit zone DNS.

  4. Измените Token name на ваше усмотрение.

  5. В разделе Permissions выберите + Add more и добавьте разрешение: Zone / Zone / Read.

  6. В разделе Zone Resources включите вашу зону: Include / Specific zone / example.tld.

  7. Опционально - Настройте фильтрацию IP-адресов клиентов, если необходимо.

  8. Нажмите Continue to summary > Create Token.

- name: dbrennand.caddy_docker - Cloudflare
  hosts: all
  vars:
    # переменные роли geerlingguy.pip
    pip_install_packages:
      - name: docker
    # переменные роли 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: Обновить кэш apt
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - dbrennand.caddy_docker

Пример - Tailscale

Этот пример использует artis3n/ansible-role-tailscale для установки Tailscale и конфигурации Caddy, чтобы получить сертификат от Let's Encrypt для вашего узла Tailscale. Вы должны иметь включенными функции MagicDNS и HTTPS Certificate для вашей сети Tailnet.

- name: dbrennand.caddy_docker - Tailscale
  hosts: all
  vars:
    # переменные роли geerlingguy.pip
    pip_install_packages:
      - name: docker
    # переменные роли artis3n.tailscale
    tailscale_authkey: key
    # переменные роли 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
      ansible.builtin.apt:
        update_cache: true
  roles:
    - geerlingguy.pip
    - geerlingguy.docker
    - artis3n.tailscale
    - dbrennand.caddy_docker

Тесты Molecule 🧪

Чтобы протестировать роль, используйте molecule: molecule test

Лицензия

Этот проект лицензирован под лицензией MIT - смотрите LICENSE для деталей.

Авторы и участники

dbrennand - Автор

О проекте

Deploy Caddy in a Docker container

Установить
ansible-galaxy install dbrennand/ansible-role-caddy-docker
Лицензия
mit
Загрузки
1487
Владелец
Automating stuff @Dell