Foto von Egor Myznik auf Unsplash

Einen eigenen OpenStreetMap Tileserver betreiben

OpenStreetMap (OSM) ist eine freie und editierbare Karte der Welt, die von einer großen Community erstellt und gepflegt wird. Während viele von uns die Standard-OSM-Karten über verschiedene Dienste nutzen, gibt es Situationen, in denen es sinnvoll sein kann, einen eigenen Tileserver zu betreiben. Wir erklären, warum das nützlich sein kann, welche technischen Herausforderungen dabei auftreten, und bieten ein praktisches Beispiel, wie der eigene Tileserver mit Docker betrieben werden kann.

Warum sollte man einen eigenen Tileserver betreiben?

  1. Keine Zugriffslimits: Die meisten öffentlich verfügbaren Tileserver haben ein Limit, wie viele Zugriffe gleichzeitig oder in einem gewissen Zeitraum zulässig sind.

  2. Personalisierung: Mit einem eigenen Server kann man das Kartenmaterial nach den eigenen, spezifischen Anforderungen angepasst werden.

  3. Performance: Lokale Server können schneller auf Anfragen reagieren, vor allem wenn sie geografisch näher beim Nutzer sind.

  4. Datenschutz: Sensible Daten oder spezifische Kartendetails bleiben unter eigener Kontrolle und verlassen nicht das Netzwerk. Unter DSGVO Aspekten wird kein Drittdienst eingesetzt.

Hardwareanforderungen

Das Betreiben eines eigenen Tileservers erfordert signifikante Ressourcen:

  • RAM: Für das Rendern und schnelles Laden der Tiles sollte der Server über eine große Menge an Arbeitsspeicher verfügen. Mindestens 16 GB RAM sind empfohlen, für größere Datensätze sollten es 32 GB oder mehr sein. Hauptherausforderung ist der Import der Daten. Dies kann mehrere Stunden oder Tage dauern, je nachdem, welche Detailtiefe an Daten und welchen geografischen Umfang man importieren möchten. Ggf. empfiehlt es sich, weil die Anwendung nur einen bestimmten Teil eines Landes anzeigt, nur dieses Land zu importieren.

  • Festplatte: SSDs sind aufgrund ihrer schnellen Lese- und Schreibgeschwindigkeiten zu bevorzugen, idealerweise Enterprise NVMe. Die benötigte Speicherkapazität hängt stark von der Größe des Kartenausschnitts ab. Für ein Land wie Deutschland könnten mehrere hundert GB erforderlich sein.

  • CPU: Mehrere Kerne sind vorteilhaft, da der Import- und Rendering-Prozess stark parallelisiert werden kann.

Tools

Die Verwendung des Docker Images overv/openstreetmap-tile-server ist eine populäre Wahl, da es viele der benötigten Komponenten und Konfigurationen bereits mitbringt.

Beispiel

Im folgenden Beispiel verwenden wir docker-compose für das Setup eines Tilesservers, der die Karte von Deutschland rendert. Der Prozess zum Einrichten des Servers besteht aus zwei Hauptdiensten: einem für das Rendern und einem für den Import der Daten.

services:

  tiles:
    restart: unless-stopped
    container_name: tiles
    image: overv/openstreetmap-tile-server
    volumes:
      - ./data/:/data/database/
      - ./tiles/:/data/tiles/
    ports:
      - "127.0.0.1:8080:80"
    environment:
      THREADS: 2
      ALLOW_CORS: "enabled"
    command: "run"
    shm_size: 64m

  tiles-import:
    container_name: tiles-import
    image: overv/openstreetmap-tile-server
    volumes:
      - ./pbf/germany-latest.osm.pbf:/data/region.osm.pbf
      - ./data/:/data/database/
      - ./tiles/:/data/tiles/
    environment:
      THREADS: 10
      ALLOW_CORS: "enabled"
    command: "import"
  • tiles: Dieser Service ist für das Hosting und Rendern der Tiles zuständig. Er ist so konfiguriert, dass er nur auf Anfragen von localhost hört, was die Sicherheit erhöht.

  • tiles-import: Dieser Service ist für den Import der OSM-Daten zuständig. Hier haben wir germany-latest.osm.pbf als Datenquelle spezifiziert, was bedeutet, dass der Server die neuesten verfügbaren Daten für Deutschland importiert.

Ein docker compose up tiles-import startet den Import. Dies kann mehrere Stunden oder sogar Tage dauern.

Wenn der Import fertig ist, kann ein docker compose up -d tiles ausgeführt werden, um den Tileserver zu starten. Der Kartendienst ist dann unter http://127.0.0.1:8080/ aufzurufen und zeigt eine beispielhafte Implementierung mit Leaflet dar.

Es kann - je nach Hardwareausstattung des Servers - ein paar Sekunden pro Tile und der jeweiligen Zoomstufe dauern, um es zu rendern. Danach ist das Tile aber zwischengespeichert und wird sehr schnell ausgeliefert.