Osm
Diese Seite beschreibt, wie man die notwendige Software installiert, einrichtet und konfiguriert, um einen eigenen Kachelserver zu betreiben. [cite: 1] Diese Schritt-für-Schritt-Anleitungen wurden für Ubuntu Linux 24.04 (Noble Numbat) geschrieben und im April 2024 getestet. [cite: 2]
Der OSM-Kachelserver-Stack
Der OSM-Kachelserver-Stack ist eine Sammlung von Programmen und Bibliotheken, die zusammenarbeiten, um einen Kachelserver zu erstellen. [cite: 3] Wie so oft bei OpenStreetMap gibt es viele Möglichkeiten, dieses Ziel zu erreichen, und fast alle Komponenten haben Alternativen mit verschiedenen spezifischen Vor- und Nachteilen. [cite: 4] Dieses Tutorial beschreibt die Standardversion, die der auf den Haupt-Kachelservern von OpenStreetMap.org verwendeten Version ähnelt. [cite: 5] Sie besteht aus 5 Hauptkomponenten: mod_tile, renderd, mapnik, osm2pgsql und einer postgresql/postgis-Datenbank. [cite: 6]
- Mod_tile ist ein Apache-Modul, das zwischengespeicherte Kacheln bereitstellt und entscheidet, welche Kacheln neu gerendert werden müssen - entweder weil sie noch nicht zwischengespeichert sind oder weil sie veraltet sind. [cite: 7]
- Renderd bietet ein Prioritätswarteschlangensystem für verschiedene Arten von Anfragen, um die Last von Rendering-Anfragen zu verwalten und zu glätten. [cite: 8]
- Mapnik ist die Softwarebibliothek, die das eigentliche Rendering durchführt und von renderd verwendet wird. [cite: 9]
Dank der Arbeit der Debian- und Ubuntu-Maintainer, die die neuesten Versionen dieser Pakete in Ubuntu 24.04 integriert haben, sind diese Anweisungen etwas kürzer als einige frühere Versionen. [cite: 10] Diese Anweisungen wurden mit einem neu installierten Ubuntu 24.04-Server geschrieben und getestet. [cite: 11] Wenn Sie andere Versionen einiger Software bereits installiert haben (vielleicht haben Sie ein Upgrade von einer früheren Version durchgeführt oder PPAs zum Laden verwendet), müssen Sie möglicherweise einige Anpassungen vornehmen. [cite: 12] Um diese Komponenten zu erstellen, müssen zunächst verschiedene Abhängigkeiten installiert werden. [cite: 13] Diese Anleitung setzt voraus, dass Sie alles von einem Nicht-Root-Benutzer über "sudo" ausführen. Versuchen Sie nicht, alles unten als Root auszuführen; es wird nicht funktionieren. [cite: 14, 15]
sudo apt update
sudo apt upgrade
sudo apt install screen locate libapache2-mod-tile renderd git tar unzip wget bzip2 apache2
An diesem Punkt wurden einige neue Konten hinzugefügt. [cite: 15, 16] Sie können sie mit "tail /etc/passwd" sehen. "postgres" wird für die Verwaltung der Datenbanken verwendet, die wir zur Speicherung von Daten für das Rendering verwenden. [cite: 16, 17] "_renderd" wird für den renderd-Daemon verwendet, und wir müssen sicherstellen, dass viele der folgenden Befehle als dieser Benutzer ausgeführt werden. [cite: 17, 18]
sudo -u postgres -i
createuser _renderd
createdb -E UTF8 -O renderd gis
Während Sie noch als Benutzer "postgres" arbeiten, richten Sie PostGIS in der PostgreSQL-Datenbank ein:
psql
(Dadurch gelangen Sie zur Eingabeaufforderung "postgres=#")
\c gis
(Es antwortet: "Sie sind jetzt mit der Datenbank 'gis' als Benutzer 'postgres' verbunden.")
CREATE EXTENSION postgis;
(Es antwortet: CREATE EXTENSION)
CREATE EXTENSION hstore;
(Es antwortet: CREATE EXTENSION)
ALTER TABLE geometry_columns OWNER TO _renderd;
(Es antwortet: ALTER TABLE)
ALTER TABLE spatial_ref_sys OWNER TO _renderd;
(Es antwortet: ALTER TABLE)
exit
(Dadurch verlassen Sie psql und kehren zu dem Benutzer zurück, der Sie waren, bevor Sie oben "sudo -u postgres -i" ausgeführt haben) [cite: 19, 20, 21, 22]
Mapnik
Mapnik wurde oben installiert. [cite: 22, 23] Wir überprüfen, ob es korrekt installiert wurde, indem wir Folgendes ausführen:
python3
>>> import mapnik
>>>
Wenn Python mit der zweiten Chevron-Eingabeaufforderung >>> und ohne Fehler antwortet, wurde die Mapnik-Bibliothek von Python gefunden. [cite: 23, 24] Herzlichen Glückwunsch! Sie können Python mit diesem Befehl verlassen:
>>> quit()
Stylesheet-Konfiguration
Nachdem die gesamte erforderliche Software installiert ist, müssen Sie ein Stylesheet herunterladen und konfigurieren. [cite: 24, 25] Der Stil, den wir hier verwenden, ist der, der von der "Standard"-Karte auf der Openstreetmap.org-Website verwendet wird. [cite: 25, 26] Er wurde gewählt, weil er gut dokumentiert ist und überall auf der Welt funktionieren sollte (auch an Orten mit nicht-lateinischen Ortsnamen). [cite: 26, 27] Es gibt jedoch ein paar Nachteile - es ist ein großer Kompromiss, der global funktionieren soll, und es ist ziemlich kompliziert zu verstehen und zu ändern, falls Sie dies tun müssen. [cite: 27, 28] Die Homepage von "OpenStreetMap Carto" im Web ist https://github.com/gravitystorm/openstreetmap-carto/ und es hat seine eigene Installationsanleitung unter https://github.com/gravitystorm/openstreetmap-carto/INSTALL.md. [cite: 28]
Hier gehen wir davon aus, dass wir die Stylesheet-Details in einem Verzeichnis unter "src" unter dem Home-Verzeichnis des Nicht-Root-Benutzerkontos speichern, das Sie verwenden. [cite: 29, 30] Wir ändern den Zugriff so, dass der Benutzer "_renderd" unten darauf zugreifen kann. [cite: 30, 31]
mkdir ~/src
cd ~/src
git clone https://github.com/gravitystorm/openstreetmap-carto
cd openstreetmap-carto
git pull --all
git switch detach v5.9.0
Das "git switch" ist erforderlich, da dies die neueste Version ist, die Sie auf OpenStreetMap sehen können, aber OSM Carto ist dabei, auf ein anderes Datenbankformat umzusteigen. [cite: 31, 32] Siehe die Datei INSTALL.md von OSM Carto für die neuere Version. [cite: 32, 33]
Als Nächstes installieren wir eine geeignete Version des "carto"-Compilers. [cite: 33]
sudo npm install -g carto
carto -v
Das sollte mit einer Zahl antworten, die mindestens so hoch ist wie:
1.2.0
Dann konvertieren wir das Carto-Projekt in etwas, das Mapnik verstehen kann:
carto project.mml > mapnik.xml
Sie haben jetzt ein Mapnik-XML-Stylesheet unter /home/IhrBenutzerkonto/src/openstreetmap-carto/mapnik.xml. [cite: 33, 34]
Daten laden
Gehen Sie zu https://download.geofabrik.de/asia/azerbaijan.html und notieren Sie sich das Datum "Diese Datei wurde zuletzt geändert" (z. B. "2024-04-24T20:21:40Z"). [cite: 35, 36] Wir benötigen dies später, wenn wir die Datenbank mit den nachfolgenden Änderungen der Leute an OpenStreetMap aktualisieren wollen. [cite: 36, 37] Laden Sie es wie folgt herunter:
mkdir ~/data
cd ~/data
wget https://download.geofabrik.de/asia/azerbaijan-latest.osm.pbf
Als Nächstes müssen wir sicherstellen, dass der Benutzer "_renderd" auf das Stylesheet zugreifen kann. [cite: 37, 38] Dazu benötigt er Zugriff auf den Ort, an den Sie es heruntergeladen haben, und standardmäßig hat er keinen Zugriff auf Ihr Home-Verzeichnis. [cite: 38, 39] Wenn es sich unter "src" unter Ihrem Benutzerkonto befindet, funktioniert
chmod o+rx
Wenn Sie dies nicht tun möchten, können Sie es verschieben und die Verweise auf die Dateispeicherorte in den folgenden Befehlen ändern. [cite: 39, 40, 41] Der folgende Befehl fügt die zuvor heruntergeladenen OpenStreetMap-Daten in die Datenbank ein. Dieser Schritt ist sehr festplattenintensiv; das Importieren des gesamten Planeten kann je nach Hardware viele Stunden, Tage oder Wochen dauern. [cite: 41, 42, 43] Bei kleineren Auszügen ist die Importzeit entsprechend viel kürzer, und Sie müssen möglicherweise mit verschiedenen -C-Werten experimentieren, um sie an den verfügbaren Speicher Ihres Computers anzupassen. [cite: 43, 44] Beachten Sie, dass für diesen Prozess der Benutzer "_renderd" verwendet wird. [cite: 44, 45]
sudo -u _renderd osm2pgsql -d gis --create --slim -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 2500 --number-processes 1 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/azerbaijan-latest.osm.pbf
Es ist sinnvoll, ein wenig zu erklären, was diese Optionen bedeuten:
- -d gis
Die Datenbank, mit der gearbeitet werden soll ("gis" war früher der Standard; jetzt muss sie angegeben werden). [cite: 45, 46]
- --create
Lädt Daten in eine leere Datenbank, anstatt zu versuchen, an eine bestehende anzuhängen. [cite: 46, 47]
- --slim
osm2pgsql kann verschiedene Tabellenlayouts verwenden; "slim"-Tabellen funktionieren für das Rendering. [cite: 47]
- -G
Bestimmt, wie Multipolygone verarbeitet werden. [cite: 47, 48]
- --hstore
Ermöglicht die Verwendung von Tags, für die keine expliziten Datenbankspalten vorhanden sind, für das Rendering. [cite: 48, 49]
- --tag-transform-script
Definiert das Lua-Skript, das für die Tag-Verarbeitung verwendet wird. Dies ist eine einfache Möglichkeit, OSM-Tags zu verarbeiten, bevor der Stil selbst sie verarbeitet, wodurch die Stillogik potenziell viel einfacher wird. [cite: 49, 50]
- -C 2500
Weist osm2pgsql 2,5 GB Speicher für den Importprozess zu. [cite: 50, 51] Wenn Sie weniger Speicher haben, können Sie eine kleinere Zahl ausprobieren, und wenn der Importprozess aufgrund von Speichermangel abgebrochen wird, müssen Sie eine kleinere Zahl oder einen kleineren OSM-Auszug ausprobieren. [cite: 51, 52]
- --number-processes 1
Verwendet 1 CPU. [cite: 52, 53] Wenn Sie mehr Kerne zur Verfügung haben, können Sie mehr verwenden. [cite: 53]
- -S
Erstellt die Datenbankspalten in dieser Datei (diese sind tatsächlich unverändert von "openstreetmap-carto") [cite: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54]
Indizes erstellen
Seit Version v5.3.0 müssen einige zusätzliche Indizes manuell angewendet werden:
cd ~/src/openstreetmap-carto/
sudo -u _renderd psql -d gis -f indexes.sql
Es sollte 16 Mal mit "CREATE INDEX" antworten.
Datenbankfunktionen
In Version 5.9.0 von "OSM Carto" (veröffentlicht im Oktober 2024) müssen einige Funktionen manuell in die Datenbank geladen werden. Diese können jederzeit hinzugefügt / neu geladen werden mit:
cd ~/src/openstreetmap-carto/
sudo -u _renderd psql -d gis -f functions.sql
Shapefile-Download
Obwohl die meisten Daten, die zum Erstellen der Karte verwendet werden, direkt aus der oben heruntergeladenen OpenStreetMap-Datendatei stammen, werden einige Shapefiles für Dinge wie Ländergrenzen mit niedrigem Zoom immer noch benötigt. Um diese herunterzuladen und zu indizieren, verwenden Sie dasselbe Konto wie zuvor: [cite: 54, 55]
cd ~/src/openstreetmap-carto/
mkdir data
sudo chown _renderd data
sudo -u _renderd scripts/get-external-data.py
Dieser Prozess beinhaltet einen umfangreichen Download und kann einige Zeit dauern - auf dem Bildschirm wird nicht viel angezeigt, während er läuft. [cite: 55, 56] Einige Daten werden direkt in die Datenbank und einige in ein "data"-Verzeichnis unter "openstreetmap-carto" gespeichert. [cite: 56, 57] Dieser Teil des Prozesses kommt mit unerwarteten Situationen nicht gut zurecht. [cite: 57, 58, 59] Wenn Sie glauben, dass es ein Problem mit heruntergeladenen externen Daten gibt, löschen Sie das Verzeichnis "data" und erstellen Sie es mit dem richtigen Eigentümer neu. [cite: 59, 60] Wenn die Probleme hier weiterhin bestehen, fragen Sie bitte im OpenStreetMap-Forum nach. [cite: 60]
Schriftarten
In Version v5.6.0 und höher von Carto müssen Schriftarten manuell installiert werden:
cd ~/src/openstreetmap-carto/
scripts/get-fonts.sh
Möglicherweise wird ein Fehler beim Abrufen der letzten Schriftart ("Noto_Emoji") angezeigt. [cite: 60, 61] Dies ist ein bekannter Fehler, den Sie ignorieren können - es wird darauf gewartet, dass jemand entweder eine Pull-Anfrage akzeptiert oder einen anderen Lösungsvorschlag macht. [cite: 61, 62] Unser Testdatengebiet (Aserbaidschan) wurde sowohl ausgewählt, weil es ein kleines Gebiet war, als auch weil einige Ortsnamen in dieser Region Namen mit nicht-lateinischen Zeichen enthalten. [cite: 62, 63]
Einrichten Ihres Webbservers
renderd konfigurieren
Die Konfigurationsdatei für "renderd" unter Ubuntu 24.04 ist "/etc/renderd.conf". [cite: 63, 64] Bearbeiten Sie diese mit einem Texteditor wie nano:
sudo nano /etc/renderd.conf
Fügen Sie am Ende einen Abschnitt wie den folgenden hinzu:
[s20]
URI=/hot/
XML=/home/accountname/src/openstreetmap-carto/mapnik.xml
Der Speicherort der XML-Datei "/home/accountname/src/openstreetmap-carto/mapnik.xml" muss in den tatsächlichen Speicherort auf Ihrem System geändert werden. [cite: 64, 65, 66, 67] Sie können "[s20]" und "URI\=/hot/" auch ändern, wenn Sie möchten. [cite: 66, 67] Wenn Sie mehr als einen Satz von Kacheln von einem Server rendern möchten, können Sie dies tun - fügen Sie einfach einen weiteren Abschnitt wie "[s20]" mit einem anderen Namen hinzu, der auf einen anderen Kartenstil verweist. [cite: 67, 68] Wenn Sie auf eine andere Datenbank als die Standarddatenbank "gis" verweisen möchten, ist dies möglich, aber das würde den Rahmen dieses Dokuments sprengen. [cite: 68, 69] Wenn Sie nur etwa 2 GB Speicher haben, sollten Sie auch "num_threads" auf 2 reduzieren. "URI\=/hot/" wurde gewählt, damit die hier generierten Kacheln leichter anstelle der HOT-Kachelebene auf OpenStreetMap.org verwendet werden können. [cite: 69, 70] Sie können hier auch etwas anderes verwenden