rd13_tile_server/docs/history/summary/PROJECT_CONTEXT.md

4.7 KiB
Raw Blame History

PROJECT_CONTEXT rd13_tile_server

Letzte Aktualisierung: 2026-06-13 Satellit-Download läuft stabil: chunk-basiert (max 500 Futures, ~37MB RAM), restart:on-failure, .part-Datei. Martin gestoppt bis Fertigstellung.


Projektziel

Selbst gehosteter Tile Server für MediaWiki (Kartographer), Nextcloud, Home Assistant. Stack: Martin (Vektor-API) + tileserver-gl (Raster PNG) + Caddy (Reverse Proxy). Tile-Updates manuell 24×/Jahr; Styles anpassbar.


Stack (Architektur ADR-001)

  • Vektor-API: ghcr.io/maplibre/martin:latest (Port 9982 → /osm/{z}/{x}/{y})
  • Raster-Renderer: maptiler/tileserver-gl (Port 9983 → /styles/osm-intl/{z}/{x}/{y}.png)
  • Style: OSM Bright GL (128 Layer, Wanderwege, POIs, vollständige Weltkarte)
  • Proxy: Caddy (rd13_system_proxy) SSL, Routing /styles/ → 9983, rest → 9982
  • Konfiguration: config/tileserver.json, config/styles/osm-intl.json
  • Daten: data/osm.mbtiles (95 GB, Planet z014), data/sprites/, data/fonts/
  • Satellit: docker-compose.download.ymldata/satellite.mbtiles (~38 GB, z011, noch nicht gestartet)
  • Git Remote: ssh://git@192.168.178.6:2222/cschulz/rd13_tile_server.git

Architektur-Decision: Martin + tileserver-gl

Rationale: siehe ADR-001

Komponente Rolle Input Output
Martin Vektor-Tile-API osm.mbtiles /osm/{z}/{x}/{y}.pbf
tileserver-gl Raster-Renderer Martin PBF + Styles /osm-intl/{z}/{x}/{y}.png
NPM Proxy + Rate Limit Requests HTTPS mit Cache-Headers

Kartographer-URL bleibt gleich:

  • $wgKartographerMapServer = 'https://tiles.rd13server.de'
  • Style osm-intl (Raster)

Aktueller Zustand

Laufende Services

  • Martin-Container: laeuft und ist healthy
  • WebUI: aktiviert ueber --webui enable-for-all

Vorhandene Daten in /data/

Datei/Ordner Status
osm.mbtiles wird von Martin erkannt (Source osm)
fonts/ installiert
styles/ vorhanden
satellite.mbtiles noch nicht heruntergeladen

Git-Stand

  • Branch: main
  • Letzter Commit: 46ac204 tileserver-gl operational, config in config/

Aktueller Zustand (2026-06-13) VOLLSTÄNDIG IN BETRIEB

Endpunkt Status Antwort
https://tiles.rd13server.de/styles/osm-intl/{z}/{x}/{y}.png 200 PNG 256×256
https://tiles.rd13server.de/osm/{z}/{x}/{y} (PBF) 200 application/x-protobuf
https://tiles.rd13server.de/health 200 OK
rd13_tileserver Container healthy Port 9983
rd13_martin Container healthy Port 9982
Caddy Proxy (rd13_system_proxy) aktiv server: Caddy

MediaWiki Kartographer Config:

  • $wgKartographerMapServer = 'https://tiles.rd13server.de/styles'
  • $wgKartographerDfltStyle = 'osm-intl'
  • → Request-URL: https://tiles.rd13server.de/styles/osm-intl/{z}/{x}/{y}.png

Nächste Schritte

Offene Aufgaben

Bekannte Fallstricke

  • data/tmp/ und data/sources/ werden von Docker als root erstellt → sudo rm -rf nötig
  • Planetiler braucht sehr viel Disk (87 GB sources + 264 GB tmp + ~70 GB output = ~420 GB) → Nicht mehr nötig, wir nutzen OpenFreeMap MBTiles direkt
  • Fish Shell unterstützt kein heredoc << 'EOF' → Python open().write() oder tee verwenden
  • Download von OpenFreeMap: wget --continue für Resume-Support bei Abbruch

Erledigte Aufgaben

  • Git-Repo initialisiert und auf Forgejo gepusht
  • Martin WebUI aktiviert (--webui enable-for-all)
  • Endpunkte verifiziert (/health, /catalog, Root 200)
  • MediaWiki-Kartographer Doku + LocalSettings konfiguriert
  • ADR-001: Martin + tileserver-gl Stack-Entscheidung dokumentiert
  • tileserver-gl Service in docker-compose.yml (Port 9983, maptiler/tileserver-gl)
  • config/tileserver.json Service-Konfiguration (MBTiles + Styles + Fonts)
  • config/styles/osm-intl.json MapLibre GL Style für Raster-Rendering
  • Caddy-Routing: /styles/osm-intl/* → Port 9983, rest → Port 9982
  • End-to-End verifiziert: PNG-Tiles 200 bei Zoom 0/5/10/14

Offene Aufgaben

  • MediaWiki in Browser testen mapframe/maplink auf einer Wiki-Seite
  • REQ-002 Rate Limiting Caddy-seitig absichern (rd13_system_proxy)
  • REQ-002 Rate Limiting NPM Advanced Config für tiles.rd13server.de
  • NPM Proxy-Host für tiles.rd13server.de anlegen (manuell im NPM UI)
  • fail2ban optional konfigurieren (REQ-002 Schicht 3)
  • Satellit-Download (optional, REQ-005)
  • Martin mit Satellit-Daten testen