# 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`.