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.

Repository

git clone ssh://git@git.hexahost.dev:8006/smueller/HexaWetter.git
cd HexaWetter

Features

  • Dashboard: Aktuelles Wetter, DWD-Station, 48h-Stundenansicht, 7-Tage-Forecast
  • Radar-Karte: Leaflet + OpenStreetMap + DWD WMS (Niederschlagsradar, Warnungen)
  • Regenvorhersage-Karte: Open-Meteo-Modell als Kartenoverlay (624 h, stündlich)
  • 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

pip install bcrypt
python scripts/setup_secrets.py 'dein-sicheres-passwort'

Die ausgegebenen Werte in .env eintragen, dann Stack neu starten.

Admin-UI: http://localhost:8080/admin.html

Sicherheit:

  • API-Key (API_KEY) für alle /api/*-Endpunkte (Nginx setzt den Header automatisch)
  • 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
  • API-Port nur auf 127.0.0.1 gebunden (kein direkter externer Zugriff)
  • Schreibende Endpunkte (Radar-Sync, Cache leeren, Einstellungen) nur im Admin-Bereich
cp .env.example .env
docker compose up -d --build

Web-UI: http://localhost:8080 · API (lokal): http://127.0.0.1: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/forecast/precipitation-map Regenvorhersage-Gitternetz für Karte
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/admin/radar/files Lokale Radar-Rohdaten (Admin)
GET /api/admin/radar/rendered Gerenderte Radar-Frames (Admin)

Selfhosted Forecast (optional)

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

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.

Description
No description provided
Readme 65 MiB
Languages
Python 51.3%
JavaScript 25.9%
HTML 11.1%
CSS 11%
Dockerfile 0.7%