GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nastavit Tegola Vector Tile Server na Ubuntu 20.04 pro OpenStreetMap

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 -ls

Uká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 32113

A 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.zip

Rozbalte jej.

sudo apt install unzipunzip tegola_linux_amd64.zip

Př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.sh

Zadejte 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-bin

Vygenerujte vztah land_polygons v gis 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.sh

Zadejte 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.sh

Spusťte postgis_helpers SQL skript.

sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_helpers.sql

Spusť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.sql

Krok 7:Spusťte Tegola

Upravte konfigurační soubor.

sudo nano /opt/tegola-osm/tegola.toml

Nakonfigurujte 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 TileJSON

Můž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 TileJSON

Uložte a zavřete soubor. Poté spusťte Tegola.

/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.toml

Nyní 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.service

Př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.target

Ulož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/ -R

Poté tuto službu povolte a spusťte.

sudo systemctl povolí tegola --now

Zkontrolujte 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:8080

Mě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 nginx

Poté vytvořte soubor bloku serveru pro Tegola.

sudo nano /etc/nginx/conf.d/tegola.conf

Př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 -t

Pokud je test úspěšný, znovu načtěte Nginx, aby se změna projevila.

sudo systemctl znovu načíst nginx

Nyní 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 apache2

Chcete-li používat Apache jako reverzní proxy, musíme povolit proxy moduly a modul záhlaví.

hlavičky sudo a2enmod proxy proxy_http

Poté vytvořte soubor virtuálního hostitele pro Tegola.

sudo nano /etc/apache2/sites-available/tegola.conf

Do 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.conf

Restartujte Apache

sudo systemctl restart apache2

Nyní 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 certbot

Pokud používáte Nginx, musíte si také nainstalovat plugin Certbot Nginx.

sudo apt install python3-certbot-nginx

Dá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.com

Pokud používáte Apache , pak musíte nainstalovat plugin Certbot Apache.

sudo apt install python3-certbot-apache

Dá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.com

Kde:

  • --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 🙂


Ubuntu
  1. Jak nastavit Ubuntu/Debian LAMP Server

  2. Jak nastavit Nginx jako reverzní proxy na Ubuntu 20.04

  3. Jak nastavit server a klienta NFS na Ubuntu 20.04

  1. Jak nastavit a nainstalovat Squid Proxy Server na Ubuntu 18.04

  2. Jak nastavit WireGuard na Ubuntu 22.04

  3. Jak nastavit TeamSpeak Server na Ubuntu 16.04

  1. Jak nastavit server OpenVPN na Ubuntu 18.04

  2. Jak nastavit bloky serveru Nginx na Ubuntu 20.04

  3. Jak nastavit tiskový server CUPS na Ubuntu 20.04