rd13_tile_server/.github/copilot-instructions.md
Conrad Schulz dcc47babf9 chore: add GitHub Copilot AI setup
- .github/copilot-instructions.md: projektspezifische Copilot-Instruktionen
- .vscode/: empfohlene Extensions & Editor-Settings
- prompts/: Docker, Debug, Code-Review Prompt-Templates
2026-05-30 16:00:15 +00:00

3.2 KiB
Raw Blame History

GitHub Copilot Project Instructions

Project

Selbst gehosteter Tile-Server (rd13) stellt Karten-Tiles (OSM Vektor + Satelliten-Raster) für interne Dienste bereit: MediaWiki (Kartographer), Nextcloud Maps und weitere Web-Apps.

Stack

  • Language: Shell (Bash/Fish), JSON, Nginx config
  • Infrastructure: Docker Compose, TileServer-GL (Node.js), nginx
  • Data: MBTiles / PMTiles (OpenMapTiles-Schema), Planetiler (Java)
  • Map styles: MapLibre GL / Mapbox GL JSON
  • Reverse Proxy: nginx mit CORS + Rate-Limiting

Architecture

  • Pattern: Single-purpose service (tile serving only)
  • tileserver Container: TileServer-GL rendert Tiles aus MBTiles-Dateien
  • nginx Container: CORS-Header, Rate-Limiting, Caching-Header, externer Endpunkt
  • Kartendaten liegen in data/ (nicht im Git, da mehrere GB)
  • Styles in data/styles/, Fonts in data/fonts/
  • Key constraints:
    • MBTiles/PMTiles nie ins Git committen (.gitignore)
    • Secrets immer via .env (.env selbst auch ignoriert)
    • CORS muss für alle Dienste im LAN offen sein (internes Netz)

Conventions

  • Branch naming: feat/<beschreibung>, fix/<beschreibung>
  • Commit format: Conventional Commits (feat|fix|chore|docs|refactor|ci)
  • File structure:
    config/        TileServer-GL config.json
    data/          MBTiles, Fonts, Sprites, Styles (nicht im Git)
    docs/          Integrations-Anleitungen (MediaWiki, Nextcloud, API)
    nginx/         nginx.conf, cors.conf
    prompts/       GitHub Copilot Prompt-Templates
    scripts/       Daten-Download, Deploy-Hilfen
    
  • Naming: snake_case für Dateien, kebab-case für Docker-Service-Namen

Engineering Process

Before starting any task

  1. docker compose config Syntax validieren
  2. docker compose logs tileserver laufende Fehler prüfen
  3. Impact analysis betrifft die Änderung CORS, Caching oder Endpunkt-URLs?
  4. Test strategy mit curl / Browser gegen lokalen Server testen

Definition of Done (DoD)

  • docker compose config fehlerfrei
  • Server startet ohne Fehler in den Logs
  • Tile-Endpunkt antwortet (curl http://localhost:PORT/health)
  • CORS-Header korrekt gesetzt (prüfen mit curl -I -H "Origin: ...")
  • Keine Secrets in docker-compose.yml oder Configs
  • .gitignore schützt MBTiles und .env
  • Commit message folgt Conventional Commits

Tile-Server spezifische Hinweise

  • Styles müssen auf http://localhost:8080 zeigen (intern) nginx setzt öffentliche URL
  • Zoom-Level 014 reichen für die meisten Anwendungsfälle (Dateigröße vs. Detail)
  • Planetiler benötigt min. 4 GB RAM für Deutschland, 8 GB für Europa
  • Satellitenkacheln: kostenfrei nur bis Zoom 10 (NASA GIBS oder maptiler.com)
  • TileJSON-Endpoints: /styles/{name}.json und /data/{name}.json

Security

  • Keine Secrets in config.json oder nginx.conf
  • nginx Rate-Limiting aktiv halten (100r/s, Burst 200)
  • Ports: nginx nach außen, tileserver nur intern (expose, nicht ports)
  • CORS auf * ist für internes LAN akzeptabel für public deployment einschränken

Non-Functional Requirements

  • Tile-Response: < 200ms für gecachte Tiles
  • Availability: best-effort (kein HA erforderlich)
  • Daten-Update-Zyklus: OSM monatlich (Planetiler-Re-Run), Satellit nach Bedarf