digitalboard.core/roles/garage/defaults/main.yml
Simon Bärlocher 0733d5710f
feat(garage,authentik): console multi-domain + standalone proxy outpost
Two related additions for gating a cross-host service (garage WebUI on a
storage host) behind authentik without breaking on TLS or X-Forwarded-Host:

garage role:
- Add garage_webui_domains (list), mirroring garage_s3_domains. The
  console router now accepts every entry, so a DMZ reverseproxy can use a
  backend_host whose cert SAN matches an internal *.int.* name instead of
  connecting by IP (which fails acme cert verification). Defaults to the
  single garage_webui_domain so existing inventories are unaffected.

authentik_outpost_proxy role (new):
- Standalone proxy (ForwardAuth) outpost, modelled on authentik_outpost_ldap.
  Co-locate it with the protected service so the ForwardAuth subrequest
  reaches authentik over the local docker network. The embedded outpost
  only works for services on the authentik host: a cross-host subrequest
  routed through an extra reverse-proxy hop arrives with a polluted
  X-Forwarded-Host (port/comma-appended), which the outpost no longer
  matches against the provider's external_host (404).
2026-06-05 14:22:36 +02:00

83 lines
No EOL
3.1 KiB
YAML

#SPDX-License-Identifier: MIT-0
---
# defaults file for garage
# Base directory configuration (inherited from base role or defined here)
docker_compose_base_dir: /etc/docker/compose
docker_volume_base_dir: /srv/data
# Garage-specific configuration
garage_service_name: garage
garage_docker_compose_dir: "{{ docker_compose_base_dir }}/{{ garage_service_name }}"
garage_docker_volume_dir: "{{ docker_volume_base_dir }}/{{ garage_service_name }}"
# Garage service configuration
garage_image: "dxflrs/garage:v2.1.0"
# FQDNs the garage S3 router accepts. The first entry is the canonical
# domain; garage.toml derives the virtual-hosted-style S3 root_domain
# from it as ".s3.<first-entry>"; further entries cover internal
# *.int.* names.
garage_s3_domains:
- "storage.local.test"
garage_web_domain: "web.storage.local.test"
# Canonical WebUI console hostname (first entry of garage_webui_domains).
garage_webui_domain: "console.storage.local.test"
# FQDNs the WebUI console router accepts. The first entry is the canonical
# public domain; further entries cover internal *.int.* names so a DMZ
# reverseproxy can use a backend_host whose cert SAN matches (same pattern
# as garage_s3_domains). Defaults to just the canonical domain so existing
# inventories that only set garage_webui_domain keep working unchanged.
garage_webui_domains:
- "{{ garage_webui_domain }}"
# Garage WebUI configuration
garage_webui_enabled: true
garage_webui_image: "khairul169/garage-webui:latest"
garage_webui_port: 3909
# WebUI basic auth credentials (plaintext, will be hashed automatically).
# Ignored when garage_webui_authentik_forward_auth is true — in that case
# authentik handles authentication via the ForwardAuth middleware below.
garage_webui_username: "admin"
garage_webui_password: "admin"
# Optional Authentik ForwardAuth in front of the WebUI. When true:
# - the AUTH_USER_PASS env-var is dropped from the container so htpasswd
# isn't enforced; authentik is the only gate.
# - traefik attaches a ForwardAuth middleware pointing at the URL below.
# Leave false to keep classic htpasswd protection.
garage_webui_authentik_forward_auth: false
garage_webui_authentik_forward_auth_url: ""
# Garage ports
garage_s3_api_port: 3900
garage_s3_web_port: 3902
garage_admin_port: 3903
garage_rpc_port: 3901
# Garage configuration
garage_replication_factor: 1
garage_compression_level: 1
garage_db_engine: "lmdb"
garage_s3_region: "us-east-1"
garage_rpc_secret: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
garage_admin_token: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
garage_metrics_token: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
# Traefik configuration
garage_traefik_network: "proxy"
garage_internal_network: "internal"
garage_use_ssl: true
# Optional: Garage cluster bootstrap configuration
garage_bootstrap_enabled: false
garage_bootstrap_zone: "dc1"
garage_bootstrap_capacity: "1G"
# Optional: S3 keys to create
# Example:
# garage_s3_keys:
# - name: "my-key"
# buckets:
# - name: "my-bucket"
# permissions: ["read", "write"]
garage_s3_keys: []