hgv-website/README.md

141 lines
3.4 KiB
Markdown

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