Tegola je vektorový dlaždicový server s otevřeným zdrojovým kódem pro OpenStreetMap . Dříve jsme vysvětlili proces nastavení dlaždicového serveru OSM pomocí mapnik a mod_tile, což je rastr založený na dlaždicovém serveru. Tento tutoriál vám ukáže, jak nastavit Tegola vektor dlaždicový server na Ubuntu 20.04.
Výhody vektorových dlaždic
- Lepší kvalita zobrazení pro zařízení s vysokým DPI (retina display)
- Malý efektivní formát (není potřeba 512 * 512 obrázků)
- Jasnější a čitelnější text
- Průběžné označování pro heads up displeje
- Oddělený obsah a styly, které umožňují vytvářet více stylů směřujících na stejnou sadu dlaždic.
- Denní a noční režim
Formáty vektorových dlaždic
Existuje několik formátů pro vektorové dlaždice.
- GeoJSON
- TopoJSON
- Mapbox Vector Tile (MVT)
- 05 m
- Binární soubor OpenScienceMap
- JSON Arc GeoServices
Tegola používá vektorový formát dlaždic Mapbox.
Předpoklady/hardwarové požadavky
Požadovaná paměť RAM a místo na disku závisí na mapě země, kterou budete používat. Například,
- Mapa Spojeného království vyžaduje alespoň 12 G RAM a 100 GB místa na disku.
- Mapa celé planety vyžaduje alespoň 32 G RAM a 1 TB SSD (Solid State Drive). Není životaschopné používat rotující pevný disk pro mapu celé planety.
Import velkých mapových dat, jako je celá planeta, do databáze PostgreSQL trvá dlouho. Zvažte přidání další paměti RAM a zejména použití SSD místo otáčení pevného disku pro urychlení procesu importu.
Pokud se chystáte hostit celou mapu světa, doporučuji vám zakoupit extra velké VPS od Contabo, které se pyšní
- 10jádrový CPU
- 60 GB RAM
- 1,6 TB Intel Optane SSD
Stojí pouhých 26,99 €/měsíc.
Krok 1:Upgradujte software
Vždy je dobrým zvykem aktualizovat serverový software před provedením jakékoli větší práce na vašem serveru. Přihlaste se na svůj server přes SSH a spusťte následující příkaz.
aktualizace sudo apt; upgrade sudo apt
Krok 2:Nainstalujte databázový server PostgreSQL a rozšíření PostGIS
Pro ukládání mapových dat použijeme PostgreSQL. PostGIS je geoprostorové rozšíření PostgreSQL. Spusťte následující příkazy a nainstalujte je.
sudo apt install postgresql postgresql-contrib postgis postgresql-12-postgis-3
Databázový server PostgreSQL se automaticky spustí a naslouchá na 127.0.0.1:5432
. postgres
uživatel bude vytvořen v OS během procesu instalace. Je to super uživatel pro databázový server PostgreSQL. Ve výchozím nastavení tento uživatel nemá žádné heslo a není třeba jej nastavovat, protože můžete použít sudo
pro přepnutí do postgres
a přihlaste se k serveru PostgreSQL.
sudo -u postgres -i
Nyní můžete vytvořit uživatele PostgreSQL databáze osm
.
createuser osm
Nastavte heslo pro uživatele osm.
psql -c "ZMĚNIT UŽIVATELE osm POMOCÍ HESLA 'tajné_heslo';"
Poté vytvořte databázi s názvem osm
a zároveň vytvořit osm
jako vlastník databáze. -E UTF8
udává, že schéma kódování znaků, které se má v databázi použít, je UTF8.
vytvořenob -E UTF8 -O osm osm
Dále vytvořte postgis
a hstore
rozšíření pro osm
databáze.
psql -c "CREATE EXTENSION postgis;" -d osmpsql -c "VYTVOŘIT ROZŠÍŘENÍ hstore;" -d osm
Nastavte osm
jako vlastník tabulky.
psql -c "ALTER TABLE space_ref_sys OWNER TO osm;" -d osm
Vytvořte databázi s názvem natural_earth
a zároveň vytvořit osm
jako vlastníka databáze.
createdb -E UTF8 -O osm natural_earth
Dále vytvořte postgis
a hstore
rozšíření pro natural_earth
databáze.
psql -c "CREATE EXTENSION postgis;" -d natural_earthpsql -c "VYTVOŘIT ROZŠÍŘENÍ hstore;" -d přirozená_země
Ukončete postgres
uživatel.
exit
Krok 3:Optimalizace výkonu serveru PostgreSQL
Proces importu může nějakou dobu trvat. Pro urychlení tohoto procesu můžeme vyladit některá nastavení serveru PostgreSQL, abychom zlepšili výkon. Upravte hlavní konfigurační soubor PostgreSQL.
sudo nano /etc/postgresql/12/main/postgresql.conf
Nejprve bychom měli změnit hodnotu shared_buffer
. Výchozí nastavení je:
shared_buffers =128 MB
Toto je příliš malé. Základním pravidlem je nastavit to na 25 % celkové paměti RAM (bez odkládacího prostoru). Moje VPS má například 60G RAM, takže jsem to nastavil na:
shared_buffers =15 GB
Najděte následující řádek.
#work_mem =4 MB#maintenance_work_mem =64 MB
Opět platí, že hodnota je příliš malá. Používám následující nastavení.
work_mem =1 GBmaintenance_work_mem =8 GB
Pak najděte následující řádek.
#effective_cache_size =4 GB
Pokud máte hodně paměti RAM jako já, můžete nastavit vyšší hodnotu pro efektivní_mezipaměť, například 20G.
effective_cache_size =20 GB
Uložte a zavřete soubor. Restartujte PostgreSQL, aby se změny projevily.
sudo systemctl restart postgresql
Ve výchozím nastavení by se PostgreSQL snažil používat velké stránky v RAM. Linux však ve výchozím nastavení nepřiděluje velké stránky. Zkontrolujte ID procesu PostgreSQL.
sudo head -1 /var/lib/postgresql/12/main/postmaster.pid
Ukázkový výstup:
7031
Poté zkontrolujte hodnotu VmPeak tohoto ID procesu.
grep ^VmPeak /proc/7031/status
Ukázkový výstup:
VmPeak:16282784 kB
Toto je maximální velikost paměti, kterou bude PostgreSQL používat. Nyní zkontrolujte velikost velké stránky v Linuxu.
cat /proc/meminfo | grep -i obrovský
Ukázkový výstup:
AnonHugePages:0 kBShmemHugePages:0 kBHugePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Obrovská velikost stránky:2048 kB Hugetlb:0 kB
Můžeme si spočítat, kolik velkých stránek potřebujeme. Vydělte hodnotu VmPeak velikostí velké stránky:16282784 kB / 2048 kB =7950. Upravte soubor /etc/sysctl.conf.
sudo nano /etc/sysctl.conf
Přidejte následující řádek a přidělte 7950 velkých stránek.
vm.nr_hugepages =7950
Uložte a zavřete soubor. Poté použijte změny.
sudo sysctl -p
Pokud znovu zkontrolujete informace o paměti,
cat /proc/meminfo | grep -i obrovský
Vidíme, že je k dispozici 7950 obrovských stránek.
AnonHugePages:0 kBShmemHugePages:0 kBHugePages_Total:7950HugePages_Free:7950HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048 kB
Chcete-li používat velké stránky, restartujte PostgreSQL.
sudo systemctl restart postgresql
Použít obrazovku na vzdálených serverech
Vzhledem k tomu, že proces importu může trvat dlouho a váš počítač může být odpojen od internetu, doporučuje se použít obslužný program obrazovky k udržení vaší relace. Obrazovka instalace na serveru Ubuntu 20.04:
instalační obrazovka sudo apt
Poté úvodní obrazovka:
obrazovka
Při prvním spuštění se zobrazí úvodní text, stačí stisknout Enter
do konce. Poté budete moci spouštět příkazy jako obvykle.
Krok 4:Importujte data mapy do PostgreSQL
Pro import mapových dat použijeme imposm
který převádí data OpenStreetMap na databáze PostgreSQL s podporou postGIS. Stáhněte si jej z Github.
wget https://github.com/omniscale/imposm3/releases/download/v0.11.1/imposm-0.11.1-linux-x86-64.tar.gz
Rozbalte archiv.
tar xvf imposm-0.11.1-linux-x86-64.tar.gz
Přesuňte jej do /opt/
adresář.
sudo mv imposm-0.11.1-linux-x86-64 /opt/imposm
Stáhněte si tegola-osm
skripty.
klon git https://github.com/go-spatial/tegola-osm.git
Přesuňte jej do /opt/
adresář.
sudo mv tegola-osm /opt/
Dále spusťte následující příkaz ke stažení mapových dat celé planety (50G) ve formátu PBF (ProtoBufBinary).
wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
Upozorňujeme, že rychlost stahování pro openstreetmap.org je aktuálně omezena na 2048 kB/s. Mapu závodu si můžete stáhnout z jiného zrcadla, jako
wget -c https://download.bbbike.org/osm/planet/planet-latest.osm.pbf
Pokud chcete mapu jednotlivých zemí/států/provincií/měst, přejděte na http://download.geofabrik.de. BBBike.org také poskytuje výňatky z více než 200 měst a regionů po celém světě v různých formátech. Například stáhněte mapová data Velké Británie (1.1G) pomocí následujícího příkazu.
wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf
Spusťte následující příkaz pro import mapových dat.
/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -read great-britain-latest.osm.pbf -write
Nyní pravděpodobně nemusíte na svém serveru dělat další věci. Protože používáte obrazovku, můžete stisknout Ctrl+A , uvolněte tyto klávesy a poté stiskněte D tlačítko pro odpojení od aktuální relace obrazovky. Zobrazí se zpráva jako níže.
[odděleno od 32113.pts-1.focal]To mi říká, že předchozí ID relace obrazovky je 32113. Můžete se odhlásit z relace SSH a dokonce vypnout počítač. Nebojte se, proces importu OSM stále běží. Když se potřebujete vrátit a zkontrolovat průběh importu, SSH na váš server a spuštěním následujícího příkazu získejte předchozí Screen Session ID.
screen -lsUkázkový výstup:
Obrazovka je na:32113 .pts-1.focal (05/19/2020 15:45:29 PM) (Detached)1 Socket v /run/screen/S-linuxbabe.Poté se můžete znovu připojit k předchozí relaci obrazovky.
screen -r 32113A budete moci pokračovat ve své práci.
Jakmile jsou mapová data importována, spusťte následující příkaz a nasaďte je do produkce.
/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -deployproduction
Krok 5:Stáhněte si Tegola
Přejděte na stránku Tegola Github a stáhněte si linuxovou verzi. Ke stažení do terminálu můžete použít následující příkaz.
wget https://github.com/go-spatial/tegola/releases/download/v0.13.0/tegola_linux_amd64.zipRozbalte jej.
sudo apt install unzipunzip tegola_linux_amd64.zipPřesuňte binární soubor do
/usr/local/bin/
adresář.sudo mv tegola /usr/local/bin/Krok 6:Import datové sady OSM Land a Natural Earth
Upravte
/opt/tegola-osm/osm_land.sh
soubor.sudo nano /opt/tegola-osm/osm_land.shZadejte podrobnosti o databázi.
# databázové připojení variablesDB_NAME="osm"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"Uložte a zavřete soubor. Nainstalujte
gdal
.sudo apt install gdal-binVygenerujte vztah
land_polygons
vgis
databáze./opt/tegola-osm/osm_land.sh
Dále upravte
/opt/tegola-osm/natural_earth.sh
soubor.sudo nano /opt/tegola-osm/natural_earth.shZadejte podrobnosti o databázi.
# databázové připojení variablesDB_NAME="natural_earth"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"Uložte a zavřete soubor. Poté vygenerujte tabulky v
natural_earth
databáze./opt/tegola-osm/natural_earth.shSpusťte
postgis_helpers
SQL skript.sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_helpers.sqlSpusťte
postgis_index.sql
skript pro přidání indexů do sloupců tabulky OSM pro zvýšení výkonu dotazů.sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_index.sqlKrok 7:Spusťte Tegola
Upravte konfigurační soubor.
sudo nano /opt/tegola-osm/tegola.tomlNakonfigurujte naslouchací port, typ mezipaměti a poskytovatele dat následovně.
[webserver]port =":8080"# Tegola nabízí tři strategie ukládání do mezipaměti:"file", "redis" a "s3"[cache]type ="file"basepath="/tmp/tegola-cache" # OpenStreetMap (OSM)[[providers]]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"Najděte následující řádek.
střed =[-76,275329586789, 39,153492567373, 8,0] # volitelná hodnota středu. součástí specifikace TileJSONMůžete nastavit vlastní střed (zeměpisnou délku a šířku) mapy a výchozí úroveň přiblížení. Všimněte si, že musíte používat desetinné hodnoty a nemůžete používat celočíselné hodnoty.
střed =[0,8, 55,5, 5,0] # volitelná hodnota středu. součástí specifikace TileJSONUložte a zavřete soubor. Poté spusťte Tegola.
/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.tomlNyní Tegola naslouchá na portu 8080.
Krok 8:Vytvořte službu Systemd pro Tegola
Tegola běží v popředí. Abychom ji spouštěli na pozadí, můžeme vytvořit službu systemd, která také umožňuje, aby se Tegola automaticky spouštěla při startu systému. Stiskněte
Ctrl+C
Chcete-li zastavit aktuální proces Tegola, vytvořte soubor tegola.service.sudo nano /etc/systemd/system/tegola.servicePřidejte do tohoto souboru následující řádky.
[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[Install]WantedBy=multi-user.targetUložte a zavřete soubor. Vytvořte
www-data
jako vlastník/tmp/tegola-cache/
adresář.sudo chown www-data:www-data /tmp/tegola-cache/ -RPoté tuto službu povolte a spusťte.
sudo systemctl povolí tegola --nowZkontrolujte jeho stav. Ujistěte se, že běží.
systemctl status tegola
Poté do adresního řádku webového prohlížeče zadejte
IP-adresa-vašeho-serveru:8080Měli byste vidět mapu vektorových dlaždic. Gratuluji! Právě jste úspěšně vybudovali svůj vlastní vektorový dlaždicový server. Všimněte si, že staré verze Firefoxu nemohou tyto vektorové dlaždice zobrazit. Chcete-li zobrazit mapy založené na vektorových dlaždicích, musíte použít knihovnu třetí strany, což je vysvětleno na konci tohoto tutoriálu.
Krok 9:Nastavení reverzního proxy
Pro přístup k Tegola pomocí názvu domény můžeme nastavit reverzní proxy pro Tegola s Nginx nebo Apache. To nám také umožní povolit HTTPS pomocí bezplatného certifikátu Let’s Encrypt.
Nginx
Nginx je velmi oblíbený webový server a reverzní proxy. Pokud dáváte přednost použití Nginx, spusťte následující příkaz a nainstalujte jej.
sudo apt install nginxPoté vytvořte soubor bloku serveru pro Tegola.
sudo nano /etc/nginx/conf.d/tegola.confPřidejte do tohoto souboru následující obsah. Nahraďte
tile.example.com
s vlastním názvem domény. Měli byste také vytvořit záznam DNS A pro tuto subdoménu. Pokud nemáte skutečný název domény, doporučuji přejít na NameCheap a koupit si ho. Cena je nízká a poskytují ochranu soukromí whois doživotně zdarma.server { poslouchat 80; poslouchej [::]:80; název_serveru dlaždice.example.com; access_log /var/log/nginx/tegola.access; error_log /var/log/nginx/tegola.error; umístění / { 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 $schéma; proxy_set_header X-Forwarded-Protocol $scheme; proxy_set_header X-Forwarded-Host $http_host; }}Uložte a zavřete tento soubor. Poté otestujte konfiguraci Nginx.
sudo nginx -tPokud je test úspěšný, znovu načtěte Nginx, aby se změna projevila.
sudo systemctl znovu načíst nginxNyní máte přístup k Tegola přes
tile.example.com
.Apache
Pokud dáváte přednost Apache před Nginx, nainstalujte webový server Apache pomocí následujícího příkazu.
sudo apt install apache2Chcete-li používat Apache jako reverzní proxy, musíme povolit
proxy
moduly a modul záhlaví.hlavičky sudo a2enmod proxy proxy_httpPoté vytvořte soubor virtuálního hostitele pro Tegola.
sudo nano /etc/apache2/sites-available/tegola.confDo souboru vložte následující konfigurace. Nahraďte
tile.example.com
s vaším skutečným názvem domény. Nezapomeňte vytvořit DNS A záznam pro tuto subdoménu. Pokud nemáte skutečný název domény, doporučuji přejít na NameCheap a koupit si ho. Cena je nízká a poskytují ochranu soukromí whois doživotně zdarma.ServerName tile.example.com ErrorDocument 404 /404.html #HTTP proxy ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ Zapnuto proxyPreserveHost Uložte a zavřete soubor. Poté povolte tohoto virtuálního hostitele.
sudo a2ensite tegola.confRestartujte Apache
sudo systemctl restart apache2Nyní můžete do Tegoly přistupovat pomocí názvu domény
tile.example.com
.Krok 10:Povolte HTTPS
Abychom zašifrovali HTTP provoz, když navštívíte server Tegola zvenčí, můžeme povolit HTTPS instalací bezplatného certifikátu TLS vydaného z Let’s Encrypt. Spuštěním následujícího příkazu nainstalujte klienta Let’s Encrypt (certbot) na Ubuntu 20.04.
sudo apt install certbotPokud používáte Nginx, musíte si také nainstalovat plugin Certbot Nginx.
sudo apt install python3-certbot-nginxDále spusťte následující příkaz pro získání a instalaci certifikátu TLS.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [e-mail chráněný] -d dlaždice.example.comPokud používáte Apache , pak musíte nainstalovat plugin Certbot Apache.
sudo apt install python3-certbot-apacheDále spusťte následující příkaz pro získání a instalaci certifikátu TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --uir --email [e-mail chráněný] -d dlaždice.example.comKde:
--nginx
:Použijte plugin nginx.--apache
:Použijte plugin Apache.--agree-tos
:Souhlas se smluvními podmínkami.--redirect
:Vynutit HTTPS přesměrováním 301.--hsts
:Přidejte hlavičku Strict-Transport-Security do každé odpovědi HTTP. Vynucení prohlížeče, aby pro doménu vždy používal TLS. Chrání před odstraněním SSL/TLS.--staple-ocsp
:Umožňuje sešívání OCSP. Platná odpověď OCSP je přišita k certifikátu, který server nabízí během TLS.--uir
:upgradovat nezabezpečené požadavky.
Certifikát by nyní měl být získán a automaticky nainstalován. A k Tegole můžete přistupovat přes HTTPS:https://tile.example.com
.
Nastavit ukázkovou mapu
K zobrazení vektorové mapy založené na dlaždicích musíte použít knihovnu třetí strany. Jako příklad používám OpenLayer. Vytvořte map.html
soubor na váš server a vložte následující kódy.
Příklad OpenLayers
Uložte a zavřete soubor. Tady je to, jak to vypadá.
Závěr
Doufám, že vám tento článek pomohl nastavit Tegola Vector Tile Server na Ubuntu 20.04. Jako vždy, pokud pro vás byl tento příspěvek užitečný, přihlaste se k odběru našeho bezplatného zpravodaje, kde získáte další tipy a triky. Opatruj se 🙂