diff --git a/README.md b/README.md new file mode 100644 index 0000000..e994ea3 --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +# HGV Website — Heimat- und Gartenverein Brunkgarten + +Hugo Static Site mit automatischem Deploy via Forgejo + Coolify. + +## Architektur + +``` +/opt/hgv-website/ Lokales Arbeitsverzeichnis + | + | git push + v +Forgejo (git.brunk-garten.de) + | + | Webhook (Push-Event) + v +Coolify (Build + Deploy) + | + | Docker: Hugo build -> Nginx serve + v +https://hgv.brunk-garten.de/ +``` + +## Projektstruktur + +``` +├── config.toml # Hugo-Konfiguration +├── Dockerfile # Multi-stage Build (Hugo -> Nginx) +├── content/ +│ ├── _index.md # Startseite +│ ├── verein/ +│ │ └── _index.md # Vereinsinfo +│ └── mitglieder/ +│ └── _index.md # Mitgliederliste (layout: members) +├── data/ +│ └── members.json # Mitgliederdaten (dynamisch via n8n) +├── layouts/ +│ ├── _default/ +│ │ ├── baseof.html # Basis-Template +│ │ ├── single.html # Einzelseiten +│ │ └── list.html # Listenseiten +│ ├── index.html # Homepage +│ └── mitglieder/ +│ └── members.html # Mitgliederliste-Template +└── static/ + └── css/ + └── style.css +``` + +## Content bearbeiten + +Markdown-Dateien unter `content/` bearbeiten, committen und pushen: + +```bash +cd /opt/hgv-website +# Datei bearbeiten... +git add -A && git commit -m "Beschreibung" && git push +``` + +Nach dem Push baut Coolify die Seite automatisch neu (ca. 30 Sekunden). + +### Neue Seite anlegen + +```bash +mkdir -p content/neuer-bereich +cat > content/neuer-bereich/_index.md << 'EOF' +--- +title: "Seitentitel" +menu: "main" +weight: 3 +--- + +Inhalt in Markdown. +EOF +``` + +- `menu: "main"` — Seite erscheint in der Navigation +- `weight` — Reihenfolge in der Navigation (niedriger = weiter links) + +### Mitgliederdaten aktualisieren + +Die Datei `data/members.json` enthält die Mitgliederliste als JSON-Array: + +```json +[ + {"name": "Max Mustermann", "rolle": "Vorsitzender", "seit": "2020"}, + {"name": "Erika Muster", "rolle": "Stellvertreterin", "seit": "2021"} +] +``` + +Diese Datei kann manuell oder automatisch via n8n aktualisiert werden. + +## Build + +### Lokal testen + +```bash +cd /opt/hgv-website +docker build -t hgv-test . && docker run --rm -p 8080:80 hgv-test +# -> http://localhost:8080 +``` + +### Dockerfile + +Multi-stage Build: +1. `hugomods/hugo:latest` — baut die Site mit `hugo --minify` +2. `nginx:alpine` — served die statischen Dateien aus `/public` + +## Infrastruktur + +### Forgejo + +- URL: `https://git.brunk-garten.de` +- Repo: `DanielBrunk/hgv-website` +- Branch: `main` +- SSH-Port: `22222` + +### Coolify + +- Application: "HGV Website" (UUID: `r4ccogg8k4sks0c8w4wk4o84`) +- Build Pack: Dockerfile +- Domain: `hgv.brunk-garten.de` + +### Webhook (Auto-Deploy) + +Forgejo sendet bei jedem Push an `main` einen Webhook an Coolify: + +- **Typ**: Forgejo +- **URL**: `http://10.0.1.5:8080/webhooks/source/gitea/events/manual` +- **Authentifizierung**: HMAC SHA256 mit Gitea Webhook Secret (in Coolify gesetzt) +- **Events**: Push + +Damit Forgejo Webhooks an Docker-interne IPs senden kann, ist in der Forgejo-Config (`/data/gitea/conf/app.ini`) folgendes gesetzt: + +```ini +[webhook] +ALLOWED_HOST_LIST = private +``` + +### Netzwerk + +Forgejo und Coolify sind beide im Docker-Netzwerk `coolify` und kommunizieren intern uber `10.0.1.5:8080`.