3.4 KiB
3.4 KiB
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:
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
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 Navigationweight— Reihenfolge in der Navigation (niedriger = weiter links)
Mitgliederdaten aktualisieren
Die Datei data/members.json enthält die Mitgliederliste als JSON-Array:
[
{"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
cd /opt/hgv-website
docker build -t hgv-test . && docker run --rm -p 8080:80 hgv-test
# -> http://localhost:8080
Dockerfile
Multi-stage Build:
hugomods/hugo:latest— baut die Site mithugo --minifynginx: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:
[webhook]
ALLOWED_HOST_LIST = private
Netzwerk
Forgejo und Coolify sind beide im Docker-Netzwerk coolify und kommunizieren intern uber 10.0.1.5:8080.