Tegola ist ein Open-Source-Vektorkachelserver für OpenStreetMap . Zuvor haben wir den Prozess zum Einrichten des OSM-Kachelservers mit mapnik und mod_tile, einem Raster, erklärt -basierter Tileserver. Dieses Tutorial zeigt Ihnen, wie Sie Tegola vector einrichten Tile-Server auf Ubuntu 20.04.
Vorteile von Vektorkacheln
- Bessere Anzeigequalität für Geräte mit hoher DPI (Retina-Display)
- Kleines effizientes Format (keine 512 * 512 Bilder erforderlich)
- Klarerer, besser lesbarer Text
- On-the-Fly-Labeling für Heads-Up-Displays
- Separieren Sie Inhalt und Stil, wodurch Sie mehrere Stile erstellen können, die auf denselben Kachelstapel verweisen.
- Tag- und Nachtmodus
Vektorkachelformate
Es gibt mehrere Formate für Vektorkacheln.
- GeoJSON
- TopoJSON
- Mapbox-Vektorkachel (MVT)
- 05m
- OpenScienceMap-Binärdatei
- Arc GeoServices-JSON
Tegola verwendet das Mapbox-Vektorkachelformat.
Voraussetzungen/Hardwareanforderungen
Der erforderliche RAM- und Festplattenspeicher hängt davon ab, welche Landkarte Sie verwenden werden. Zum Beispiel
- Die UK-Karte erfordert mindestens 12 GB RAM und 100 GB Speicherplatz.
- Die gesamte Planetenkarte erfordert mindestens 32 GB RAM und 1 TB SSD (Solid State Drive). Es ist nicht praktikabel, eine sich drehende Festplatte für die gesamte Planetenkarte zu verwenden.
Es dauert lange, große Kartendaten, wie den ganzen Planeten, in die PostgreSQL-Datenbank zu importieren. Erwägen Sie, mehr RAM hinzuzufügen und vor allem SSD zu verwenden anstatt die Festplatte zu drehen, um den Importvorgang zu beschleunigen.
Wenn Sie die gesamte Weltkarte hosten möchten, empfehle ich Ihnen, den extra großen VPS von Contabo zu kaufen, der sich durch
auszeichnet- Eine 10-Kern-CPU
- 60 GB Arbeitsspeicher
- 1,6 TB Intel Optane SSD
Es kostet nur 26,99 €/Monat.
Schritt 1:Software aktualisieren
Es empfiehlt sich immer, die Serversoftware zu aktualisieren, bevor Sie größere Arbeiten an Ihrem Server durchführen. Melden Sie sich über SSH bei Ihrem Server an und führen Sie den folgenden Befehl aus.
sudo apt-Aktualisierung; sudo apt upgrade
Schritt 2:Installieren Sie den PostgreSQL-Datenbankserver und die PostGIS-Erweiterung
Wir werden PostgreSQL verwenden, um Kartendaten zu speichern. PostGIS ist eine raumbezogene Erweiterung von PostgreSQL. Führen Sie die folgenden Befehle aus, um sie zu installieren.
sudo apt install postgresql postgresql-contrib postgis postgresql-12-postgis-3
Der PostgreSQL-Datenbankserver wird automatisch gestartet und lauscht auf 127.0.0.1:5432
. Das postgres
Benutzer wird während des Installationsvorgangs auf dem Betriebssystem erstellt. Es ist der Superuser für den PostgreSQL-Datenbankserver. Standardmäßig hat dieser Benutzer kein Passwort und es muss auch keins festgelegt werden, da Sie sudo
verwenden können um zu postgres
zu wechseln Benutzer und melden Sie sich beim PostgreSQL-Server an.
sudo -u postgres -i
Jetzt können Sie einen PostgreSQL-Datenbankbenutzer osm
erstellen .
Benutzer-OSM erstellen
Legen Sie ein Passwort für den osm-Benutzer fest.
psql -c "ALTER USER osm WITH PASSWORD 'secret_password';"
Erstellen Sie dann eine Datenbank namens osm
und gleichzeitig osm
machen als Eigentümer der Datenbank. -E UTF8
gibt an, dass das in der Datenbank zu verwendende Zeichencodierungsschema UTF8 ist.
createdb -E UTF8 -O osm osm
Erstellen Sie als Nächstes das postgis
und hstore
Erweiterung für den osm
Datenbank.
psql -c "CREATE EXTENSION postgis;" -d osmpsql -c "CREATE EXTENSION hstore;" -d osm
Setzen Sie osm
als Tabelleneigentümer.
psql -c "ALTER TABLE space_ref_sys BESITZER VON osm;" -d osm
Erstellen Sie eine Datenbank mit dem Namen natural_earth
und gleichzeitig osm
machen als Besitzer der Datenbank.
createdb -E UTF8 -O osm natural_earth
Erstellen Sie als Nächstes das postgis
und hstore
Erweiterung für natural_earth
Datenbank.
psql -c "CREATE EXTENSION postgis;" -d natural_earthpsql -c "ERWEITERUNG hstore ERSTELLEN;" -d natürliche_erde
Beenden Sie postgres
Benutzer.
beenden
Schritt 3:Leistung des PostgreSQL-Servers optimieren
Der Importvorgang kann einige Zeit dauern. Um diesen Prozess zu beschleunigen, können wir einige PostgreSQL-Servereinstellungen optimieren, um die Leistung zu verbessern. Hauptkonfigurationsdatei von PostgreSQL bearbeiten.
sudo nano /etc/postgresql/12/main/postgresql.conf
Zuerst sollten wir den Wert von shared_buffer
ändern . Die Standardeinstellung ist:
shared_buffers =128 MB
Das ist zu klein. Die Faustregel lautet, es auf 25 % Ihres gesamten Arbeitsspeichers einzustellen (ohne Auslagerungsspeicher). Zum Beispiel hat mein VPS 60 GB RAM, also setze ich es auf:
shared_buffers =15GB
Suchen Sie die folgende Zeile.
#work_mem =4 MB#maintenance_work_mem =64 MB
Auch hier ist der Wert zu klein. Ich verwende die folgenden Einstellungen.
work_mem =1GBmaintenance_work_mem =8GB
Suchen Sie dann die folgende Zeile.
#effektive_cache_size =4 GB
Wenn Sie wie ich viel RAM haben, können Sie einen höheren Wert für die Effective_Cache_Size festlegen, z. B. 20 GB.
effektive_cache_size =20 GB
Speichern und schließen Sie die Datei. Starten Sie PostgreSQL neu, damit die Änderungen wirksam werden.
sudo systemctl restart postgresql
Standardmäßig würde PostgreSQL versuchen, riesige Seiten im RAM zu verwenden. Linux weist jedoch standardmäßig keine riesigen Seiten zu. Überprüfen Sie die Prozess-ID von PostgreSQL.
sudo head -1 /var/lib/postgresql/12/main/postmaster.pid
Beispielausgabe:
7031
Überprüfen Sie dann den VmPeak-Wert dieser Prozess-ID.
grep ^VmPeak /proc/7031/status
Beispielausgabe:
VmPeak:16282784 kB
Dies ist die maximale Speichergröße, die von PostgreSQL verwendet wird. Überprüfen Sie nun die Größe der riesigen Seite in Linux.
cat /proc/meminfo | grep -i riesig
Beispielausgabe:
AnonHugePages:0 kBShmemHugePages:0 kBHugePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048 kB Hugetlb:0 kB
Wir können berechnen, wie viele riesige Seiten wir brauchen. Teilen Sie den VmPeak-Wert durch die Größe der riesigen Seite:16282784 kB / 2048 kB =7950. Bearbeiten Sie die Datei /etc/sysctl.conf.
sudo nano /etc/sysctl.conf
Fügen Sie die folgende Zeile hinzu, um 7950 riesige Seiten zuzuweisen.
vm.nr_hugepages =7950
Speichern und schließen Sie die Datei. Wenden Sie dann die Änderungen an.
sudo sysctl -p
Wenn Sie die Meminfo erneut überprüfen,
cat /proc/meminfo | grep -i riesig
Wir können sehen, dass 7950 riesige Seiten verfügbar sind.
AnonHugePages:0 kBShmemHugePages:0 kBHugePages_Total:7950HugePages_Free:7950HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048 kB
Starten Sie PostgreSQL neu, um riesige Seiten zu verwenden.
sudo systemctl restart postgresql
Bildschirm auf Remote-Servern verwenden
Da der Importvorgang lange dauern kann und Ihr Computer möglicherweise vom Internet getrennt ist, wird empfohlen, das Bildschirmdienstprogramm zu verwenden, um Ihre Sitzung am Leben zu erhalten. Installationsbildschirm auf dem Ubuntu 20.04-Server:
sudo apt Installationsbildschirm
Dann Startbildschirm:
Bildschirm
Beim ersten Start sehen Sie einen Einführungstext, drücken Sie einfach Enter
beenden. Dann können Sie wie gewohnt Befehle ausführen.
Schritt 4:Importieren Sie die Kartendaten in PostgreSQL
Um Kartendaten zu importieren, verwenden wir imposm
die OpenStreetMap-Daten in postGIS-fähige PostgreSQL-Datenbanken konvertiert. Laden Sie es von Github herunter.
wget https://github.com/omniscale/imposm3/releases/download/v0.11.1/imposm-0.11.1-linux-x86-64.tar.gz
Extrahieren Sie das Archiv.
tar xvf imposm-0.11.1-linux-x86-64.tar.gz
Verschieben Sie es nach /opt/
Verzeichnis.
sudo mv imposm-0.11.1-linux-x86-64 /opt/imposm
Laden Sie tegola-osm
herunter Skripte.
git-Klon https://github.com/go-spatial/tegola-osm.git
Verschieben Sie es nach /opt/
Verzeichnis.
sudo mv tegola-osm /opt/
Führen Sie als Nächstes den folgenden Befehl aus, um die Kartendaten des gesamten Planeten (50 GB) im PBF-Format (ProtoBufBinary) herunterzuladen.
wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
Beachten Sie, dass die Download-Geschwindigkeit für openstreetmap.org derzeit auf 2048 KB/s beschränkt ist. Sie können die Pflanzenkarte von einem anderen Mirror herunterladen, z. B.
wget -c https://download.bbbike.org/osm/planet/planet-latest.osm.pbf
Wenn Sie eine Karte einzelner Länder/Staaten/Provinzen/Stadt wünschen, gehen Sie zu http://download.geofabrik.de. Außerdem bietet BBBike.org Auszüge aus mehr als 200 Städten und Regionen weltweit in verschiedenen Formaten. Laden Sie beispielsweise die Kartendaten von Großbritannien (1.1G) mit dem folgenden Befehl herunter.
wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf
Führen Sie den folgenden Befehl aus, um Kartendaten zu importieren.
/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -read great-britain-latest.osm.pbf -write
Jetzt müssen Sie wahrscheinlich keine anderen Dinge auf Ihrem Server tun. Da Sie Screen verwenden, können Sie Strg+A drücken , lassen Sie diese Tasten los und drücken Sie dann D Taste, um die aktuelle Bildschirmsitzung zu trennen. Sie sehen eine Nachricht wie unten.
[getrennt von 32113.pts-1.focal]Dies sagt mir, dass die vorherige Screen-Sitzungs-ID 32113 ist. Sie können sich von der SSH-Sitzung abmelden und sogar Ihren Computer herunterfahren. Keine Sorge, der OSM-Importprozess läuft noch. Wenn Sie zurückkommen und den Importfortschritt überprüfen müssen, stellen Sie eine SSH-Verbindung zu Ihrem Server her und führen Sie den folgenden Befehl aus, um die vorherige Bildschirmsitzungs-ID abzurufen.
screen -lsBeispielausgabe:
Es gibt einen Bildschirm auf:32113 .pts-1.focal (19.05.2020 15:45:29) (Getrennt)1 Socket in /run/screen/S-linuxbabe.Dann können Sie sich wieder mit der vorherigen Screen-Sitzung verbinden.
screen -r 32113Und Sie können Ihre Arbeit fortsetzen.
Führen Sie nach dem Import der Kartendaten den folgenden Befehl aus, um sie für die Produktion bereitzustellen.
/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -deployproduction
Schritt 5:Tegola herunterladen
Gehen Sie zur Tegola-Github-Seite und laden Sie die Linux-Version herunter. Sie können den folgenden Befehl verwenden, um es im Terminal herunterzuladen.
wget https://github.com/go-spatial/tegola/releases/download/v0.13.0/tegola_linux_amd64.zipEntpacken Sie es.
sudo apt install unzipunzip tegola_linux_amd64.zipVerschieben Sie die Binärdatei nach
/usr/local/bin/
Verzeichnis.sudo mv tegola /usr/local/bin/Schritt 6:Importieren Sie den OSM-Datensatz Land and Natural Earth
Bearbeiten Sie
/opt/tegola-osm/osm_land.sh
Datei.sudo nano /opt/tegola-osm/osm_land.shGeben Sie Ihre Datenbankdetails ein.
# DatenbankverbindungsvariablenDB_NAME="osm"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"Speichern und schließen Sie die Datei. Installieren Sie
gdal
.sudo apt install gdal-binRelation
land_polygons
erzeugen imgis
Datenbank./opt/tegola-osm/osm_land.sh
Als nächstes bearbeiten Sie
/opt/tegola-osm/natural_earth.sh
Datei.sudo nano /opt/tegola-osm/natural_earth.shGeben Sie Ihre Datenbankdetails ein.
# DatenbankverbindungsvariablenDB_NAME="natural_earth"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"Speichern und schließen Sie die Datei. Generieren Sie dann Tabellen in
natural_earth
Datenbank./opt/tegola-osm/natural_earth.shFühren Sie
postgis_helpers
aus SQL-Skript.sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_helpers.sqlFühren Sie
postgis_index.sql
aus Skript zum Hinzufügen von Indizes zu OSM-Tabellenspalten, um die Abfrageleistung zu erhöhen.sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_index.sqlSchritt 7:Tegola starten
Bearbeiten Sie die Konfigurationsdatei.
sudo nano /opt/tegola-osm/tegola.tomlKonfigurieren Sie den Listening-Port, den Cache-Typ und den Datenanbieter wie folgt.
[webserver]port =":8080"# Tegola bietet drei Kachel-Caching-Strategien:"file", "redis" und "s3"[cache]type ="file"basepath="/tmp/tegola-cache" # OpenStreetMap (OSM)[[Anbieter]]name ="osm"type ="postgis"host ="127.0.0.1"port ="5432"database ="osm"user ="osm"password ="osm_password"# Natural Earth [[providers]]name ="ne"type ="postgis"host ="127.0.0.1"port ="5432"database ="natural_earth"user ="osm"password ="osm_password"Suchen Sie die folgende Zeile.
center =[-76.275329586789, 39.153492567373, 8.0] # optionaler Mittelwert. Teil der TileJSON-SpezifikationSie können einen benutzerdefinierten Mittelpunkt (Längen- und Breitengrad) für Ihre Karte und die Standard-Zoomstufe festlegen. Beachten Sie, dass Sie Dezimalwerte verwenden müssen und keine ganzzahligen Werte verwenden können.
center =[0.8, 55.5, 5.0] # optionaler Mittelwert. Teil der TileJSON-SpezifikationSpeichern und schließen Sie die Datei. Starten Sie dann Tegola.
/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.tomlJetzt lauscht Tegola auf Port 8080.
Schritt 8:Erstellen Sie einen Systemd-Dienst für Tegola
Tegola läuft im Vordergrund. Um es im Hintergrund auszuführen, können wir einen systemd-Dienst erstellen, der es Tegola auch ermöglicht, automatisch beim Systemstart zu starten. Drücken Sie
Ctrl+C
Um den aktuellen Tegola-Prozess zu stoppen, erstellen Sie die Datei tegola.service.sudo nano /etc/systemd/system/tegola.serviceFügen Sie dieser Datei die folgenden Zeilen hinzu.
[Unit]Description=Tegola Vector Tile Server[Service]Type=simpleUser=www-dataExecStart=/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.tomlRestart=on-failureRestartSec =5[Installieren]WantedBy=multi-user.targetSpeichern und schließen Sie die Datei. Machen Sie
www-data
als Besitzer von/tmp/tegola-cache/
Verzeichnis.sudo chown www-data:www-data /tmp/tegola-cache/ -RAktivieren und starten Sie dann diesen Dienst.
sudo systemctl enable tegola --nowÜberprüfen Sie seinen Status. Stellen Sie sicher, dass es ausgeführt wird.
systemctl status tegola
Geben Sie dann in die Adressleiste Ihres Webbrowsers
einIhre-Server-IP-Adresse:8080Sie sollten die Vektorkachelkarte sehen. Herzlichen Glückwunsch! Sie haben gerade erfolgreich Ihren eigenen Vektorkachelserver erstellt. Beachten Sie, dass alte Versionen von Firefox diese Vektorkacheln nicht anzeigen können. Sie müssen eine Bibliothek eines Drittanbieters verwenden, um auf Vektorkacheln basierende Karten anzuzeigen, was am Ende dieses Tutorials erklärt wird.
Schritt 9:Reverse-Proxy einrichten
Um über einen Domainnamen auf Tegola zuzugreifen, können wir mit Nginx oder Apache einen Reverse-Proxy für Tegola einrichten. Dadurch können wir auch HTTPS mit dem kostenlosen Let’s Encrypt-Zertifikat aktivieren.
Nginx
Nginx ist ein sehr beliebter Webserver und Reverse-Proxy. Wenn Sie lieber Nginx verwenden, führen Sie den folgenden Befehl aus, um es zu installieren.
sudo apt install nginxErstellen Sie dann eine Serverblockdatei für Tegola.
sudo nano /etc/nginx/conf.d/tegola.confFügen Sie dieser Datei den folgenden Inhalt hinzu. Ersetzen Sie
tile.example.com
mit eigenem Domainnamen. Sie sollten auch einen DNS-A-Eintrag für diese Subdomain erstellen. Wenn Sie keinen echten Domainnamen haben, empfehle ich, zu NameCheap zu gehen, um einen zu kaufen. Der Preis ist niedrig und sie bieten Whois-Datenschutz lebenslang kostenlos.server {listen 80; hör zu [::]:80; Servername tile.example.com; access_log /var/log/nginx/tegola.access; error_log /var/log/nginx/tegola.error; Standort / { Proxy_Pass http://127.0.0.1:8080; Proxy_set_header Host $host; Proxy_Set_Header X-Real-IP $remote_addr; Proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $schema; proxy_set_header X-Forwarded-Protocol $scheme; Proxy_set_header X-Forwarded-Host $http_host; }}Speichern und schließen Sie diese Datei. Testen Sie dann die Nginx-Konfiguration.
sudo nginx -tWenn der Test erfolgreich ist, laden Sie Nginx neu, damit die Änderung wirksam wird.
sudo systemctl reload nginxJetzt können Sie über
tile.example.com
auf Tegola zugreifen .Apache
Wenn Sie Apache gegenüber Nginx bevorzugen, installieren Sie den Apache-Webserver mit dem folgenden Befehl.
sudo apt install apache2Um Apache als Reverse-Proxy zu verwenden, müssen wir den
proxy
aktivieren Module und das Header-Modul.sudo a2enmod Proxy Proxy_http-HeaderErstellen Sie dann eine virtuelle Hostdatei für Tegola.
sudo nano /etc/apache2/sites-available/tegola.confFügen Sie die folgenden Konfigurationen in die Datei ein. Ersetzen Sie
tile.example.com
mit Ihrem tatsächlichen Domainnamen. Vergessen Sie nicht, einen DNS-A-Eintrag für diese Subdomain zu erstellen. Wenn Sie keinen echten Domainnamen haben, empfehle ich, zu NameCheap zu gehen, um einen zu kaufen. Der Preis ist niedrig und sie bieten Whois-Datenschutz lebenslang kostenlos.ServerName tile.example.com ErrorDocument 404 /404.html #HTTP-Proxy ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ ProxyPreserveHost Ein Speichern und schließen Sie die Datei. Aktivieren Sie dann diesen virtuellen Host.
sudo a2ensite tegola.confStarten Sie Apache neu
sudo systemctl reset apache2Jetzt können Sie mit dem Domainnamen
tile.example.com
auf Tegola zugreifen .Schritt 10:HTTPS aktivieren
Um den HTTP-Verkehr zu verschlüsseln, wenn Sie den Tegola-Server von außerhalb besuchen, können wir HTTPS aktivieren, indem wir ein kostenloses TLS-Zertifikat installieren, das von Let’s Encrypt ausgestellt wurde. Führen Sie den folgenden Befehl aus, um den Let’s Encrypt-Client (certbot) auf Ubuntu 20.04 zu installieren.
sudo apt install certbotWenn Sie Nginx verwenden, müssen Sie auch das Certbot Nginx-Plugin installieren.
sudo apt install python3-certbot-nginxFühren Sie als Nächstes den folgenden Befehl aus, um das TLS-Zertifikat zu erhalten und zu installieren.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d tile.example.comWenn Sie Apache verwenden , dann müssen Sie das Certbot Apache-Plugin installieren.
sudo apt install python3-certbot-apacheFühren Sie als Nächstes den folgenden Befehl aus, um das TLS-Zertifikat zu erhalten und zu installieren.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --uir --email [email protected] -d tile.example.comWo:
--nginx
:Verwenden Sie das nginx-Plugin.--apache
:Verwenden Sie das Apache-Plugin.--agree-tos
:Nutzungsbedingungen akzeptieren.--redirect
:HTTPS durch 301-Umleitung erzwingen.--hsts
:Fügen Sie jeder HTTP-Antwort den Strict-Transport-Security-Header hinzu. Erzwingen, dass der Browser immer TLS für die Domäne verwendet. Schützt vor SSL/TLS-Stripping.--staple-ocsp
:Aktiviert OCSP-Heften. Eine gültige OCSP-Antwort wird an das Zertifikat geheftet, das der Server während TLS anbietet.--uir
:Unsichere Anfragen aktualisieren.
Das Zertifikat sollte nun abgerufen und automatisch installiert werden. Und Sie können über HTTPS auf Tegola zugreifen:https://tile.example.com
.
Eine Beispielkarte einrichten
Sie müssen eine Bibliothek eines Drittanbieters verwenden, um eine auf Vektorkacheln basierende Karte anzuzeigen. Ich verwende OpenLayer als Beispiel. Erstellen Sie eine map.html
Datei auf Ihrem Server und fügen Sie die folgenden Codes ein.
OpenLayers-Beispiel
Speichern und schließen Sie die Datei. So sieht es aus.
Schlussfolgerung
Ich hoffe, dieser Artikel hat Ihnen geholfen, den Tegola Vector Tile Server unter Ubuntu 20.04 einzurichten. Wenn Sie diesen Beitrag nützlich fanden, abonnieren Sie wie immer unseren kostenlosen Newsletter, um weitere Tipps und Tricks zu erhalten. Pass auf dich auf 🙂