diff --git a/README.md b/README.md index d2a4a64..669efa6 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,12 @@ Browser ── HTTPS ──→ Caddy ── HTTP ──→ Hugo (live-reload) hugo_docker/ ├── docker-compose.yml # Hugo + Caddy Stack ├── Caddyfile # TLS + Reverse-Proxy +├── scp_copy.py # SCP-Transfer + SSH Docker-Restart mit Health-Check ├── content/ # ← .md-Dateien hier ablegen (Host-Mount) ├── crt/ # Self-signed Zertifikate ├── site/ # Hugo-Config, Layouts, CSS │ ├── hugo.toml -│ ├── entrypoint.sh # Auto-Frontmatter + Hugo-Server +│ ├── entrypoint.sh # Auto-Frontmatter + Besitzer-Fix (chown) + Hugo-Server │ ├── assets/css/main.css # Modernes CSS (oklch, dark mode, grid) │ └── layouts/ # HTML-Templates ├── ansible/ @@ -73,6 +74,24 @@ EOF docker compose restart hugo # nur bei komplett neuen Dateien ``` +## SCP-Sync (`scp_copy.py`) + +Skript zum Synchronisieren lokaler `.md`-Dateien auf den Ziel-Host und +Neustarten des Hugo-Containers via SSH: + +```bash +cd hugo_docker +python3 scp_copy.py +``` + +**Ablauf:** +1. SCP kopiert alle `.md`-Dateien aus `scr/` nach `dest` +2. `docker compose restart hugo` wird via SSH auf dem Ziel-Host ausgeführt +3. Health-Check pollt `curl https://localhost:5443/` bis Hugo `200` antwortet (max 15 s) + +**Alle Pfade sind dynamisch aus `dest` abgeleitet** — `compose_file` wird aus dem +`content/`-Pfad berechnet (`content/` → `docker-compose.yml`). Keine hartkodierten Pfade. + ## Frontmatter Der Entrypoint (`site/entrypoint.sh`) fügt **automatisch** fehlendes YAML-Frontmatter @@ -90,6 +109,20 @@ date: "2026-09-08" Mit dem Entrypoint kannst du **beliebige** .md-Dateien in `content/` werfen. +### Permission-Handling + +Der Hugo-Container läuft als `root` (notwendig für den Build-Lock). +Der Entrypoint gibt den Besitz modifizierter `.md`-Dateien per `chown` an den +Host-User zurück — gesteuert über `HOST_UID`/`HOST_GID` in `docker-compose.yml`: + +```yaml +environment: + HOST_UID: "1000" + HOST_GID: "1000" +``` + +Kein `sudo chown`-Gefrickel mehr — SCP-Overwrites klappen nach jedem Restart. + ## Deployment (Ansible) Auf entfernten Host ausrollen: @@ -166,4 +199,6 @@ Modernes Theme in `site/assets/css/main.css`: | Browser zeigt Zertifikatswarnung | CA in NSS-Store importieren (s.o.) | | Caddy startet nicht | `docker compose logs caddy` – TLS-Zertifikate prüfen unter `crt/` | | Zertifikatsfehler "no SAN" | Zertifikate mit `selfsign_ca.py` neu generieren (SAN ist jetzt enthalten) | -| Molecule-Test schlägt fehl | `ansible_remote_tmp: /tmp/.ansible` in molecule.yml prüfen | \ No newline at end of file +| Molecule-Test schlägt fehl | `ansible_remote_tmp: /tmp/.ansible` in molecule.yml prüfen | +| 502 Bad Gateway nach Deploy | `ssh "docker compose -f ~/.docker/hugo/docker-compose.yml logs hugo"` | +| Permission denied bei SCP | HOST_UID/HOST_GID in docker-compose.yml prüfen, ggf. `chown` manuell ausführen | \ No newline at end of file