- Move Simon's architecture documentation into architecture/ (setup, variables, topology, dns, deploy, security, operations plus index and glossary). All cross-repo references point at https://git.digitalboard.ch/Digitalboard/{reference-ansible,dns-zones} via absolute URLs so the docs remain navigable from any context. - Rewrite README.md as a documentation hub: introduction, platform Mermaid overview, comparison of the three repos (docs / digitalboard.core / reference-ansible) and a full table of contents covering architecture, contributing, infrastructure, keycloak, ms-entra and troubleshooting. Addresses the open items from the WKS PoC review (2026-05-26): docs README begrüssungstext + Übersichtsgrafik + Verlinkung der beiden anderen Repos, sowie das Verschieben der Architektur-Doku.
2.8 KiB
Deploy flow and Traefik modes
← Back to Architecture index
6. Deploy flow
Sequence taken from playbooks/site.yml:
sequenceDiagram
participant U as User
participant A as ansible-playbook
participant V as OpenBao
participant H as Hosts
U->>U: bao login + export VAULT_TOKEN
U->>A: make deploy_site_demo_gymburgdorf
A->>A: load vars: role defaults → group_vars/all → group_vars/<groups> → host_vars/<host>
A->>V: community.hashi_vault lookups<br/>(acme-tsig, service secrets)
V-->>A: secret values
A->>H: Play 1 — base (all hosts)
A->>H: Play 2 — traefik (all hosts: dmz on reverseproxy, backend elsewhere)
A->>H: Play 3 — httpbin
A->>H: Play 4 — 389ds
A->>H: Play 5 — keycloak
A->>H: Play 6 — garage (storage)
A->>H: Play 7 — collabora (application)
A->>H: Play 8 — authentik (application)
A->>H: Play 9 — authentik_outpost_ldap (application)
A->>H: Play 10 — nextcloud (application)
A->>H: Play 11 — drawio (application)
A->>H: Play 12 — send
A->>H: Play 13 — opnform
A->>H: Play 14 — homarr
A->>H: Play 15 — bookstack
A->>H: Play 16 — opencloud
Plays without matching group members (httpbin_servers,
ds389_servers, keycloak_servers, send_servers,
opnform_servers, homarr_servers, bookstack_servers,
opencloud_servers in this inventory) run as no-ops.
Role-name spelling traps: the LDAP role is
389ds(notds389); the forms role isopnform(notopenforms/openform). Inventory groups must match the names used in playbooks/site.yml exactly —ds389_servers,opnform_servers.
--diff is enabled in the target → per-task changes are visible.
7. Traefik modes (DMZ vs Backend)
traefik_mode: dmz — public-facing reverse proxy on reverseproxy:
- File provider with
services.ymlfor static routing. - No Docker socket mounted, no local containers.
- Routes to
backend_hostaddresses on other machines. - Backends are declared via
traefik_dmz_exposed_services(a list inhost_vars/reverseproxy/). Selective backend selection is also possible viatraefik_backend_servers_to_proxy.
traefik_mode: backend — application/storage:
- Mounts
/var/run/docker.sock. - Docker provider: auto-discovery via container labels
(
traefik.enable=true). - Services are exposed locally; the DMZ Traefik routes external traffic to them in plaintext HTTP (see security.md).
Both modes support ACME via RFC2136 DNS challenge or self-signed
(traefik_cert_mode: acme | selfsigned).