initial commit

This commit is contained in:
TheOnlyMace
2026-06-18 23:45:08 +02:00
commit 3ebdc96381
104 changed files with 4778 additions and 0 deletions

95
README.md Normal file
View File

@@ -0,0 +1,95 @@
# HexaWetter Selfhosted Wetterportal
HexaWetter ist ein vollständiges Self-Hosting-Wetterportal mit Forecast, DWD-Beobachtungen, interaktiver Radar-Karte (WMS + Zeitleiste), Warnungen, Geocoding und lokalem Radar-Rendering.
## Features
- **Dashboard**: Aktuelles Wetter, DWD-Station, 48h-Stundenansicht, 7-Tage-Forecast
- **Radar-Karte**: Leaflet + OpenStreetMap + DWD WMS (Niederschlagsradar, Warnungen)
- **Radar-Animation**: Zeitleiste (60120 Min., 5-Min-Schritte), Play/Pause, Vor/Zurück
- **Warnungen**: DWD-Warnungen mit Standortfilter (Landkreis-Matching)
- **Ortssuche**: PLZ/Ort via Nominatim-Proxy, GPS, Favoriten
- **Lokales Radar**: Worker lädt Rohdaten, Renderer erzeugt PNG-Overlays
- **Infrastruktur**: PostgreSQL + TimescaleDB + PostGIS, Redis-Cache, Healthchecks
## Admin-Bereich
```bash
pip install bcrypt
python scripts/hash_admin_password.py 'dein-sicheres-passwort'
```
Die ausgegebenen Werte in `.env` eintragen, dann Stack neu starten.
Admin-UI: `http://localhost:8080/admin.html`
Sicherheit:
- bcrypt-Passwort-Hash (niemals Klartext in `.env` committen)
- JWT mit `ADMIN_JWT_SECRET` (min. 32 Zeichen)
- Rate-Limiting auf Login (5 Versuche / 5 Min.)
- Token nur in `sessionStorage` (nicht localStorage)
- Security-Headers auf allen API-Antworten
```bash
cp .env.example .env
docker compose up -d --build
```
Web-UI: `http://localhost:8080` · API: `http://localhost:8081/api/health`
## Architektur
| Service | Rolle |
|---------|-------|
| `frontend` | Nginx + statisches UI |
| `api` | FastAPI-Backend |
| `postgres` | TimescaleDB + PostGIS (Cache, Radar-Metadaten) |
| `redis` | Kurzzeit-Cache |
| `radar-worker` | DWD OpenData Download |
| `radar-renderer` | HDF5 → PNG aus Rohdaten |
## API-Endpunkte (Auswahl)
| Endpoint | Beschreibung |
|----------|--------------|
| `GET /api/health` | Status inkl. Quellen-Healthchecks |
| `GET /api/forecast` | 7-Tage-Forecast |
| `GET /api/observations` | DWD-Beobachtung (Bright Sky) |
| `GET /api/warnings` | DWD-Warnungen (standortbezogen) |
| `GET /api/geocode/search` | Ortssuche |
| `GET /api/radar/wms/times` | WMS-Zeitschritte für Animation |
| `GET /api/radar/rendered` | Lokal gerenderte Radar-Frames |
## Selfhosted Forecast (optional)
```bash
docker compose -f docker-compose.yml -f docker-compose.selfhosted.yml --profile selfhosted up -d
```
Siehe `docs/NEXT_STEPS.md` für Hardware-Empfehlungen zu Open-Meteo und Bright Sky.
## Konfiguration
Wichtige `.env`-Variablen:
- `OPEN_METEO_BASE_URL`, `BRIGHTSKY_BASE_URL` Forecast/Beobachtungen
- `DWD_WMS_URL`, `DWD_RADAR_BASE_URL` Radar-Karte und Rohdaten
- `POSTGRES_PASSWORD`, `RADAR_RETENTION_HOURS`
- `CACHE_TTL_*`, `RATE_LIMIT_PER_MINUTE`
## Backup
- PostgreSQL: `docker exec hexawetter-postgres pg_dump -U hexawetter hexawetter > backup.sql`
- Radar-Rohdaten: `./data/raw/radar/`
- Gerenderte Frames: `./data/processed/radar/`
## Entwicklung
```bash
cd api && pip install -r requirements.txt && uvicorn app.main:app --reload --port 8081
```
## Lizenz / Attribution
Datenbasis: Deutscher Wetterdienst (DWD), Open Data. Kartenbasis: OpenStreetMap. Keine amtliche Wetterberatung.