chore(demo-gymburgdorf): finish ACME, LDAP, DMZ routing for live inventory

- ACME via DNS-01 against internal NS (172.16.9.169) with TCP-only +
  disableANSChecks so the DMZ traefik can issue LE certs without
  reaching public NS IPs.
- Migrate single-domain vars to `*_domains` lists (authentik, nextcloud,
  collabora, garage_s3) so public + *.int.* SANs share one cert and
  server-to-server traffic stays in the LAN.
- Wire `traefik_dmz_exposed_services` per backend host (application,
  storage) with explicit `backend_host` overrides pointing at internal
  FQDNs — DMZ traefik now validates upstream certs against SAN names.
- Nextcloud notify_push setup on internal FQDN to avoid DMZ hairpin;
  collabora WOPI / authentik LDAP outpost wired to *.int.* equivalents.
This commit is contained in:
Simon Bärlocher 2026-05-20 23:26:18 +02:00
parent 82f0db8fe3
commit c67e9aac43
No known key found for this signature in database
GPG key ID: 63DE20495932047A
13 changed files with 552 additions and 170 deletions

View file

@ -1,14 +1,61 @@
# reference-ansible
Ansible-Setup für Demo-Deployments (`demo-gymburgdorf`,
`demo-mbazürich`, `demo-phbern`) und lokale Vagrant-Tests. Rollen
kommen aus der Collection
[`digitalboard.core`](https://git.digitalboard.ch/Digitalboard/digitalboard.core)
(via [requirements.yml](requirements.yml)).
> Architektur, Variablen-Hierarchie, Service-Topologie und der
> Walkthrough zum Aufsetzen neuer Mandanten: siehe
> **[ARCHITECTURE.md](ARCHITECTURE.md)**.
### Secrets
Secrets are managed using [OpenBao](https://bao.digitalboard.ch).
The bao CLI needs to be installed. e.g `sudo pacman -S openbao python-hvac`
## Voraussetzungen
- `ansible` (Core ≥ 2.15)
- `bao` CLI ([OpenBao](https://openbao.org/)) — z. B.
`sudo pacman -S openbao python-hvac` (Arch) oder Homebrew
- `python-hvac` (für `community.hashi_vault` Lookups)
## Setup
```bash
make install # installiert digitalboard.core + community.hashi_vault nach ./collections/
```
## Secrets (OpenBao)
Vor jedem Deploy in **derselben Shell** authentisieren:
Authenticate and export token before running playbooks:
```bash
export BAO_ADDR=https://bao.digitalboard.ch
bao login -method=oidc -path=Digitalboard
export VAULT_TOKEN=$(bao print token)
```
```
> ⚠️ `make bao` allein reicht **nicht** — jedes `make`-Target läuft in
> einer neuen Shell, der dort gesetzte `VAULT_TOKEN` lebt nur während
> `make bao` selbst. Entweder die drei Befehle oben manuell im Shell
> ausführen oder `make bao deploy_site_demo_gymburgdorf` als **einen**
> Aufruf chainen.
## Deploy
```bash
make ping_demo # Smoke-Test gegen alle Demo-Inventories
make deploy_site_demo_gymburgdorf # einzelnes Demo-Site
make deploy_site_demo # alle drei Demo-Sites
```
Auf macOS setzt das [Makefile](Makefile) zusätzlich
`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES` — ohne diese Env-Var
crashen Ansible-Forks beim ersten `community.hashi_vault`-Lookup.
## Inventories
| Inventory | Zweck |
|---|---|
| [`inventories/demo-gymburgdorf/`](inventories/demo-gymburgdorf/) | Demo-Mandant — als Vorlage für neue Mandanten empfohlen, siehe [ARCHITECTURE.md § 10](ARCHITECTURE.md#10-walkthrough-neuen-demo-mandanten-anlegen) |
| [`inventories/demo-mbazürich/`](inventories/demo-mbazürich/) | Demo-Mandant |
| [`inventories/demo-phbern/`](inventories/demo-phbern/) | Demo-Mandant |
| [`inventories/vagrant/`](inventories/vagrant/) | lokale Test-VMs; **inkompatible Gruppen-Topologie** zu den Demo-Inventories |