# Agenten-Auftrag: Domain fit-fisch.de (öffentliche Fisch-Buchung)

**Ziel:** Die öffentlichen Fit-wie-ein-Fisch-Seiten unter `https://fit-fisch.de` erreichbar
machen. Admin und alle anderen Systeme bleiben unter
`https://dp-smartsolutions.de/ksbdueren/public`.

**Code-Stand:** ab Commit `c563b39` auf `main` (`FISCH_PUBLIC_URL`, Twig-Global,
Mail-/Sammellinks). Vorlage vHost: `config/apache/fit-fisch.de.conf.example`.

**Nicht Aufgabe des Agenten:** DNS bei Hetzner Konsole klicken (macht der Mensch).
Der Agent prüft nur, ob DNS schon passt, und macht Server/App.

---

## Voraussetzungen (vom Menschen / vor dem Agenten)

Bei Hetzner DNS für `fit-fisch.de` (Mail-Records unangetastet lassen):

| Typ | Name | Wert |
|-----|------|------|
| A | `@` | `142.132.206.12` |
| A | `www` | `142.132.206.12` |
| AAAA | `@` / `www` | **löschen**, solange kein passendes Server-IPv6 bekannt ist |

TTL 7200 ist ok. Propagation kann einige Minuten bis Stunden dauern.

---

## Was der Agent auf dem Server tun muss

Arbeitsverzeichnis / Repo: `/var/www/html/ksbdueren` (Magallanes: Live =
`current/public`). SSH typisch als `pohl` / root auf `webserver` / `142.132.206.12`.

### 1) DNS prüfen (nur lesen)

```bash
dig +short A fit-fisch.de
dig +short A www.fit-fisch.de
# erwartet: 142.132.206.12
```

Wenn noch die alte IP (`88.198.219.246`) kommt: **stopp**, Mensch auf DNS hinweisen,
keinen vHost-Cutover erzwingen.

### 2) Code auf aktuellen `main` bringen und deployen

```bash
cd /var/www/html/ksbdueren
git fetch origin
git status
# lokale Stolperer (manuelle Wartelisten-Reste) ggf. verwerfen, dann:
./scripts/deploy.sh
```

`scripts/deploy.sh` macht `git pull --ff-only origin main` + Magallanes. Danach muss
`current` den Commit mit `FISCH_PUBLIC_URL` enthalten (`c563b39` oder neuer).

### 3) Env setzen (nur öffentliche Fisch-URL)

In der **shared**-Env (Magallanes), typisch:

- `/var/www/html/ksbdueren/shared/.env` und/oder
- `/var/www/html/ksbdueren/shared/.env.local`

eintragen bzw. ergänzen:

```bash
FISCH_PUBLIC_URL=https://fit-fisch.de
```

**Nicht ändern:** `APP_URL` (bleibt die KSB-/Admin-Basis-URL).

Keine Secrets committen. Nach Env-Änderung Cache leeren (Schritt 5).

### 4) Apache-vHost + SSL

1. DocumentRoot ermitteln: zeigt Live auf Magallanes?

   ```bash
   readlink -f /var/www/html/ksbdueren/current/public
   ls -la /var/www/html/ksbdueren/public /var/www/html/ksbdueren/current/public 2>/dev/null | head
   ```

   DocumentRoot im vHost = **Live-`public`** (meist `…/ksbdueren/current/public`).

2. Site anlegen aus Vorlage `config/apache/fit-fisch.de.conf.example`
   (Pfad im Checkout bzw. in `current`), DocumentRoot anpassen, nach
   `/etc/apache2/sites-available/fit-fisch.de.conf` legen.

3. Zuerst **nur HTTP :80** (wie bei anderen Domains hier):

   ```bash
   a2ensite fit-fisch.de
   apache2ctl configtest
   systemctl reload apache2
   ```

4. Dann Certbot:

   ```bash
   certbot --apache -d fit-fisch.de -d www.fit-fisch.de
   ```

   Runbook-Details: `SSL_CERTBOT_ERNEUERUNG.md`. In `:443` ProxyPass nicht vergessen,
   falls irgendwann Proxies dazukommen — für reines Symfony-`public/` reicht DocumentRoot.

5. Optional (empfohlen): auf dieser Domain Admin sperren, z. B. in der SSL-Site:

   ```apache
   RedirectMatch 403 ^/admin
   ```

### 5) Cache leeren

```bash
cd /var/www/html/ksbdueren/current   # oder Repo-Root, je nach Layout
sudo -u www-data php bin/console cache:clear
# Ownership var/ wie üblich ftpuser:www-data, falls root den Cache geschrieben hat
```

### 6) Abnahme (gegenprüfen)

```bash
curl -sI https://fit-fisch.de/booking/fisch | head -5
curl -sL https://fit-fisch.de/booking/fisch | head -20
curl -sI https://fit-fisch.de/admin/fisch | head -10   # ideal: 403, wenn gesperrt
```

Erwartet:

- `https://fit-fisch.de/booking/fisch` → 200, Fisch-Landing
- Mail-Links / Admin-Anzeige Sammelanmeldung nutzen Host `fit-fisch.de`
  (Parameter: `php bin/console debug:container --parameter=app.fisch_public_url`)
- Admin weiter nur über `dp-smartsolutions.de/…/admin/fisch/…`

Kurztest Absender egal; ein Validierungs- oder Schul-Link im Admin kopieren und Host prüfen.

### 7) Doku fortschreiben

- `docs/TODO.md`: Punkt Domain `fit-fisch.de` abhaken
- `docs/journal/<heute>.md`: was gemacht (vHost, Env, Certbot, DocumentRoot)
- Keine Secrets in Git

---

## Explizit nicht tun

- `APP_URL` global auf `fit-fisch.de` setzen
- Hetzner-Mail-DNS (MX, SPF, SRV, autoconfig) ändern
- BZ-/Schwimm-/Event-Center-Templates mit Fisch vermischen
- Force-Push / destruktive Git-Befehle auf dem Server
- `.env` mit Secrets committen

---

## Kurz-Checkliste

- [ ] DNS A `@`/`www` → `142.132.206.12` (dig ok)
- [ ] `main` deployt (`./scripts/deploy.sh`)
- [ ] `FISCH_PUBLIC_URL=https://fit-fisch.de` in shared-Env
- [ ] Apache :80 Site + Certbot :443, DocumentRoot = Live-`public`
- [ ] Optional `/admin` auf fit-fisch.de gesperrt
- [ ] `cache:clear` als `www-data`
- [ ] curl-Abnahme + Parameter-Check
- [ ] TODO + Journal aktualisiert
