2026-06-03 10:10:42 +00:00
# PROJECT_CONTEXT – rd13_tile_server
2026-06-12 09:24:45 +00:00
**Letzte Aktualisierung:** 2026-06-12 – Architektur-Entscheidung: Martin + tileserver-gl für Vektor + Raster. ADR-001 dokumentiert. PNG-Rendering für Kartographer nun planbar.
2026-06-03 10:10:42 +00:00
---
## Projektziel
2026-06-12 09:24:45 +00:00
Selbst gehosteter Tile Server für MediaWiki (Kartographer), Nextcloud, Home Assistant.
**Stack:** Martin (Vektor-API) + tileserver-gl (Raster PNG für Clients).
Tile-Updates manuell 2– 4× /Jahr; Styles anpassbar.
2026-06-03 10:10:42 +00:00
---
2026-06-12 09:24:45 +00:00
## Stack (Architektur ADR-001)
2026-06-03 10:10:42 +00:00
2026-06-12 09:24:45 +00:00
- **Vektor-API:** `ghcr.io/maplibre/martin:latest` (Port 9982 extern → 3000 intern)
- **Raster-Renderer:** `ghcr.io/maptiler/tileserver-gl` (NEU – Port 8080 lokal, via NPM zu `/osm-intl` )
- **Proxy:** NPM (Nginx Proxy Manager) extern – SSL-Termination, Rate Limiting
- **Daten:** `/data/` – osm.mbtiles (Vektor), fonts/, styles/ (Rendering-Definitionen)
2026-06-03 10:10:42 +00:00
- **Git Remote:** `ssh://git@192.168.178.6:2222/cschulz/rd13_tile_server.git`
---
2026-06-12 09:24:45 +00:00
## Architektur-Decision: Martin + tileserver-gl
**Rationale:** [siehe ADR-001 ](../../docs/adr/001-martin-tileserver-gl-stack.md )
| 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)
---
2026-06-03 10:10:42 +00:00
## Aktueller Zustand
### Laufende Services
2026-06-10 07:43:22 +00:00
- Martin-Container: **laeuft** und ist **healthy**
- WebUI: **aktiviert** ueber `--webui enable-for-all`
2026-06-03 10:10:42 +00:00
### Vorhandene Daten in `/data/`
| Datei/Ordner | Status |
|---|---|
2026-06-10 07:43:22 +00:00
| `osm.mbtiles` | ✅ wird von Martin erkannt (Source `osm` ) |
2026-06-03 10:10:42 +00:00
| `fonts/` | ✅ installiert |
| `styles/` | ✅ vorhanden |
| `satellite.mbtiles` | ❌ noch nicht heruntergeladen |
### Git-Stand
- Branch: `main`
2026-06-10 07:44:21 +00:00
- Letzter Commit: `0a5f6cd` - WebUI aktiviert und MediaWiki-Integration vorbereitet
- Noch offen (lokal): `docs/mediawiki-config.php`
2026-06-03 10:10:42 +00:00
---
2026-06-12 09:24:45 +00:00
## Nächste Schritte (Sprint 2026-06-19)
2026-06-03 10:10:42 +00:00
2026-06-12 09:24:45 +00:00
**Ziel:** Kartographer rendert PNG statt PBF-Vektor
2026-06-03 10:10:42 +00:00
2026-06-12 09:24:45 +00:00
1. **docker-compose.yml erweitern**
- tileserver-gl Service hinzufügen (ghcr.io/maptiler/tileserver-gl)
- Mount `/data/styles/` , `/data/fonts/` , `/data/sprites/`
- Port: 8080 lokal (nur intern, nicht exposed)
2026-06-03 10:10:42 +00:00
2026-06-12 09:24:45 +00:00
2. **Style osm-intl vorbereiten**
- Baseline MapLibre GL Style (JSON) in `/data/styles/osm-intl.json`
- Quelle: Martin PBF unter `http://martin:3000/osm`
- Fonts: `/fonts/` , Sprites: `/sprites/`
3. **NPM Proxy-Routing konfigurieren**
- `/osm-intl/{z}/{x}/{y}.png` → http://tileserver-gl:8080/...
- `/osm-intl/{z}/{x}/{y}@2x.png` → http://tileserver-gl:8080/...@2x
- Cache-Headers: `max-age=86400`
4. **MediaWiki LocalSettings testen**
- mapframe sollte jetzt PNG-Karten zeigen statt Fehler
- Probe: https://tiles.rd13server.de/osm-intl/0/0/0.png
5. **REQ-002 Rate Limiting** (aus REQUIREMENTS.md)
- NPM Advanced Config: limit_req_zone, limit_conn_zone, 429 status
2026-06-03 10:10:42 +00:00
---
2026-06-12 09:24:45 +00:00
## Offene Aufgaben
2026-06-03 10:10:42 +00:00
## 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
- [x] Git-Repo initialisiert und auf Forgejo gepusht
- [x] Migration TileServer-GL → Martin
- [x] nginx-Sidecar entfernt (NPM extern)
- [x] Port auf 9982 geändert
- [x] copilot-instructions auf aktuelles Template aktualisiert
- [x] download-data.sh + download-satellite.py erstellt
- [x] History-System (post-commit Hook + _session.md Konvention) in rd13_copilot_setup implementiert
- [x] Docs für MediaWiki, Nextcloud, Home Assistant erstellt
- [x] Planet-MBTiles Download gestartet (OpenFreeMap, 94 GB)
2026-06-10 07:43:22 +00:00
- [x] Martin WebUI aktiviert (`--webui enable-for-all` )
- [x] Endpunkte verifiziert (`/health` , `/catalog` , Root 200)
- [x] MediaWiki-Kartographer Doku in `docs/mediawiki-config.php` erweitert
2026-06-10 08:00:27 +00:00
- [x] MediaWiki-Repo auf Martin umgestellt und committed
- [x] Rate-Limiting-Anforderungen in `docs/requirements/REQUIREMENTS.md` aufgenommen
2026-06-03 10:10:42 +00:00
---
## Offene Aufgaben
2026-06-12 09:24:45 +00:00
- [ ] **Raster-Rendering für Kartographer** (Sprint 2026-06-19)
- [ ] tileserver-gl in docker-compose.yml
- [ ] Style osm-intl.json vorbereiten
- [ ] NPM Routing /osm-intl/{z}/{x}/{y}.png
- [ ] MediaWiki testen
- [ ] **REQ-002 Rate Limiting** – NPM Advanced Config für `tiles.rd13server.de`
2026-06-10 08:30:08 +00:00
- [ ] NPM Proxy-Host für `tiles.rd13server.de` anlegen (manuell im NPM UI)
2026-06-10 08:00:27 +00:00
- [ ] fail2ban optional konfigurieren (REQ-002 Schicht 3)
- [ ] Satellit-Download (optional, REQ-005)
2026-06-10 07:43:22 +00:00
- [ ] Martin mit Satellit-Daten testen