GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer le serveur de tuiles vectorielles Tegola sur Ubuntu 20.04 pour OpenStreetMap

Tegola est un serveur de tuiles vectorielles open-source pour OpenStreetMap . Précédemment, nous avons expliqué le processus de configuration du serveur de tuiles OSM avec mapnik et mod_tile, qui est un raster serveur de tuiles basé sur . Ce tutoriel va vous montrer comment configurer Tegola vecteur serveur de tuiles sur Ubuntu 20.04.

Avantages des tuiles vectorielles

  • Meilleure qualité d'affichage pour les appareils à haute résolution (écran Retina)
  • Petit format efficace (pas besoin d'images 512 x 512)
  • Texte plus clair et plus lisible
  • Étiquetage à la volée pour l'affichage tête haute
  • Séparez le contenu et le style, ce qui permet de créer plusieurs styles pointant vers la même pile de tuiles.
  • Mode jour et nuit

Formats de tuiles vectorielles

Il existe plusieurs formats pour les tuiles vectorielles.

  • GéoJSON
  • TopoJSON
  • Tuile vectorielle Mapbox (MVT)
  • 05m
  • Binaire OpenScienceMap
  • Arc GeoServices JSON

Tegola utilise le format de tuile vectorielle Mapbox.

Prérequis/Matériel requis

La RAM et l'espace disque requis dépendent de la carte du pays que vous allez utiliser. Par exemple,

  • La carte du Royaume-Uni nécessite au moins 12 Go de RAM et 100 Go d'espace disque.
  • La carte de la planète entière nécessite au moins 32 G de RAM et 1 To de SSD (Solid State Drive). Il n'est pas viable d'utiliser un disque dur en rotation pour toute la carte de la planète.

Il faut beaucoup de temps pour importer des données cartographiques volumineuses, comme la planète entière, dans la base de données PostgreSQL. Envisagez d'ajouter plus de RAM et surtout d'utiliser un SSD au lieu de faire tourner le disque dur pour accélérer le processus d'importation.

Si vous allez héberger la carte du monde entière, je vous recommande d'acheter le VPS extra-large de Contabo, qui se vante

  • Un processeur à 10 cœurs
  • 60 Go de RAM
  • SSD Intel Optane de 1,6 To

Cela ne coûte que 26,99 €/mois.

Étape 1 :Mettre à niveau le logiciel

C'est toujours une bonne pratique de mettre à jour le logiciel du serveur avant d'effectuer tout travail majeur sur votre serveur. Connectez-vous à votre serveur via SSH et exécutez la commande suivante.

mise à jour sudo apt ; mise à niveau sudo apt

Étape 2 :Installez le serveur de base de données PostgreSQL et l'extension PostGIS

Nous utiliserons PostgreSQL pour stocker les données cartographiques. PostGIS est une extension géospatiale de PostgreSQL. Exécutez les commandes suivantes pour les installer.

sudo apt install postgresql postgresql-contrib postgis postgresql-12-postgis-3

Le serveur de base de données PostgreSQL démarrera automatiquement et écoutera sur 127.0.0.1:5432 . Le postgres utilisateur sera créé sur le système d'exploitation au cours du processus d'installation. C'est le super utilisateur du serveur de base de données PostgreSQL. Par défaut, cet utilisateur n'a pas de mot de passe et il n'est pas nécessaire d'en définir un car vous pouvez utiliser sudo pour passer au postgres utilisateur et connectez-vous au serveur PostgreSQL.

sudo -u postgres -i

Vous pouvez maintenant créer un utilisateur de base de données PostgreSQL osm .

createuser osm

Définissez un mot de passe pour l'utilisateur osm.

psql -c "ALTER USER osm WITH PASSWORD 'secret_password';"

Créez ensuite une base de données nommée osm et en même temps faire osm en tant que propriétaire de la base de données. -E UTF8 spécifie que le schéma de codage de caractères à utiliser dans la base de données est UTF8.

createdb -E UTF8 -O osm osm

Ensuite, créez le postgis et hstore extension pour osm base de données.

psql -c "CRÉER EXTENSION postgis ;" -d osmpsql -c "CREATE EXTENSION hstore;" -d osm

Définir osm en tant que propriétaire de la table.

psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm ;" -d osm

Créez une base de données nommée natural_earth et en même temps faire osm en tant que propriétaire de la base de données.

createdb -E UTF8 -O osm natural_earth

Ensuite, créez le postgis et hstore extension pour la natural_earth base de données.

psql -c "CRÉER EXTENSION postgis ;" -d natural_earthpsql -c "CREATE EXTENSION hstore;" -d terre_naturelle

Sortir de postgres utilisateur.

quitter

Étape 3 :Optimiser les performances du serveur PostgreSQL

Le processus d'importation peut prendre un certain temps. Pour accélérer ce processus, nous pouvons régler certains paramètres du serveur PostgreSQL pour améliorer les performances. Modifiez le fichier de configuration principal de PostgreSQL.

sudo nano /etc/postgresql/12/main/postgresql.conf

Tout d'abord, nous devrions changer la valeur de shared_buffer . Le paramètre par défaut est :

shared_buffers =128 Mo

C'est trop petit. La règle d'or est de le régler à 25% de votre RAM totale (hors espace de swap). Par exemple, mon VPS a 60 Go de RAM, je l'ai donc réglé sur :

shared_buffers =15 Go

Trouvez la ligne suivante.

#work_mem =4 Mo#maintenance_work_mem =64 Mo

Encore une fois, la valeur est trop petite. J'utilise les paramètres suivants.

work_mem =1 Gomaintenance_work_mem =8 Go

Trouvez ensuite la ligne suivante.

#effective_cache_size =4 Go

Si vous avez beaucoup de RAM comme moi, vous pouvez définir une valeur plus élevée pour effective_cache_size comme 20G.

effective_cache_size =20 Go

Enregistrez et fermez le fichier. Redémarrez PostgreSQL pour que les modifications prennent effet.

sudo systemctl redémarrer postgresql

Par défaut, PostgreSQL essaierait d'utiliser d'énormes pages en RAM. Cependant, Linux par défaut n'alloue pas de pages volumineuses. Vérifiez l'ID de processus de PostgreSQL.

sudo head -1 /var/lib/postgresql/12/main/postmaster.pid

Exemple de sortie :

7031

Vérifiez ensuite la valeur VmPeak de cet ID de processus.

grep ^VmPeak /proc/7031/status

Exemple de sortie :

VmPeak :16282784 Ko

Il s'agit de la taille de mémoire maximale qui sera utilisée par PostgreSQL. Vérifiez maintenant la taille d'une énorme page sous Linux.

chat /proc/meminfo | grep -i énorme

Exemple de sortie :

AnonHugePages :0 kBShmemHugePages :0 koHugePages_Total :0HugePages_Free :0HugePages_Rsvd :0HugePages_Surp :0Hugepagesize :2 048 ko Énorme lb :0 ko

Nous pouvons calculer le nombre de pages énormes dont nous avons besoin. Divisez la valeur VmPeak par la taille de la page énorme :16282784 Ko / 2048 Ko =7950. Modifiez le fichier /etc/sysctl.conf.

sudo nano /etc/sysctl.conf

Ajoutez la ligne suivante pour allouer 7950 énormes pages.

vm.nr_hugepages =7950

Enregistrez et fermez le fichier. Appliquez ensuite les modifications.

sudo sysctl -p

Si vous vérifiez à nouveau le meminfo,

chat /proc/meminfo | grep -i énorme

Nous pouvons voir qu'il y a 7950 énormes pages disponibles.

AnonHugePages :0 kBShmemHugePages :0 koHugePages_Total :7950HugePages_Free :7950HugePages_Rsvd :0HugePages_Surp :0Hugepagesize :2048 ko

Redémarrez PostgreSQL pour utiliser des pages volumineuses.

sudo systemctl redémarrer postgresql

Utiliser l'écran sur les serveurs distants

Étant donné que le processus d'importation peut prendre beaucoup de temps et que votre ordinateur peut être déconnecté d'Internet, il est recommandé d'utiliser l'utilitaire screen pour maintenir votre session en vie. Écran d'installation sur le serveur Ubuntu 20.04 :

écran d'installation de sudo apt

Puis écran de démarrage :

écran

Lors du premier lancement, vous verrez un texte d'introduction, appuyez simplement sur Enter finir. Ensuite, vous pourrez exécuter des commandes comme d'habitude.

Étape 4 :Importer les données cartographiques dans PostgreSQL

Pour importer des données cartographiques, nous utiliserons imposm qui convertit les données OpenStreetMap en bases de données PostgreSQL compatibles avec postGIS. Téléchargez-le depuis Github.

wget https://github.com/omniscale/imposm3/releases/download/v0.11.1/imposm-0.11.1-linux-x86-64.tar.gz

Extraire l'archive.

tar xvf imposm-0.11.1-linux-x86-64.tar.gz

Déplacez-le vers /opt/ répertoire.

sudo mv imposm-0.11.1-linux-x86-64 /opt/imposm

Télécharger tegola-osm scripts.

git clone https://github.com/go-spatial/tegola-osm.git

Déplacez-le vers /opt/ répertoire.

sudo mv tegola-osm /opt/

Ensuite, exécutez la commande suivante pour télécharger les données cartographiques de la planète entière (50G) au format PBF (ProtoBufBinary).

wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf

Notez que les vitesses de téléchargement pour openstreetmap.org sont actuellement limitées à 2048 Ko/s. Vous pouvez télécharger la carte de la plante à partir d'un autre miroir, comme

wget -c https://download.bbbike.org/osm/planet/planet-latest.osm.pbf

Si vous voulez une carte de chaque pays/état/province/ville, rendez-vous sur http://download.geofabrik.de. De plus, BBBike.org fournit des extraits de plus de 200 villes et régions du monde dans différents formats. Par exemple, téléchargez les données cartographiques de la Grande-Bretagne (1.1G) avec la commande suivante.

wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf

Exécutez la commande suivante pour importer des données cartographiques.

/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -read great-britain-latest.osm.pbf -write 

Maintenant, vous n'avez probablement plus besoin de faire autre chose sur votre serveur. Puisque vous utilisez Screen, vous pouvez appuyer sur Ctrl+A , relâchez ces touches, puis appuyez sur D clé pour se détacher de la session Screen en cours. Vous verrez un message comme ci-dessous.

[détaché de 32113.pts-1.focal]

Cela me dit que l'ID de session Screen précédent est 32113. Vous pouvez vous déconnecter de la session SSH et même éteindre votre ordinateur. Ne vous inquiétez pas, le processus d'importation OSM est toujours en cours. Lorsque vous devez revenir et vérifier la progression de l'importation, connectez-vous en SSH à votre serveur et exécutez la commande suivante pour obtenir l'ID de session d'écran précédent.

écran -ls

Exemple de sortie :

Il y a un écran sur :32113 .pts-1.focal (19/05/2020 15:45:29) (Détaché)1 Socket dans /run/screen/S-linuxbabe.

Ensuite, vous pouvez vous rattacher à la session Screen précédente.

écran -r 32113

Et vous pourrez continuer votre travail.

Une fois les données cartographiques importées, exécutez la commande suivante pour les déployer en production.

/opt/imposm/imposm import -connection postgis://osm:osm_password@localhost/osm -mapping /opt/tegola-osm/imposm3.json -deployproduction

Étape 5 :Téléchargez Tegola

Allez sur la page Tegola Github et téléchargez la version Linux. Vous pouvez utiliser la commande suivante pour le télécharger dans le terminal.

wget https://github.com/go-spatial/tegola/releases/download/v0.13.0/tegola_linux_amd64.zip

Décompressez-le.

sudo apt install unzipunzip tegola_linux_amd64.zip

Déplacez le binaire vers /usr/local/bin/ répertoire.

sudo mv tegola /usr/local/bin/

Étape 6 :Importer l'ensemble de données OSM Land and Natural Earth

Modifiez le /opt/tegola-osm/osm_land.sh fichier.

sudo nano /opt/tegola-osm/osm_land.sh

Entrez les détails de votre base de données.

# variables de connexion à la base de donnéesDB_NAME="osm"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"

Enregistrez et fermez le fichier. Installer gdal .

sudo apt install gdal-bin

Générer la relation land_polygons dans le gis base de données.

/opt/tegola-osm/osm_land.sh

Ensuite, modifiez le /opt/tegola-osm/natural_earth.sh fichier.

sudo nano /opt/tegola-osm/natural_earth.sh

Entrez les détails de votre base de données.

# variables de connexion à la base de donnéesDB_NAME="natural_earth"DB_HOST="localhost"DB_PORT="5432"DB_USER="osm"DB_PW="osm_password"

Enregistrez et fermez le fichier. Générez ensuite des tables dans le natural_earth base de données.

/opt/tegola-osm/natural_earth.sh

Exécutez le postgis_helpers Script SQL.

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

Exécutez le postgis_index.sql script pour ajouter des index aux colonnes de la table OSM afin d'augmenter les performances des requêtes.

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

Étape 7 :Démarrer Tegola

Modifiez le fichier de configuration.

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

Configurez le port d'écoute, le type de cache et le fournisseur de données comme suit.

[webserver]port =":8080"# Tegola propose trois stratégies de mise en cache des tuiles :"file", "redis" et "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"

Trouvez la ligne suivante.

center =[-76.275329586789, 39.153492567373, 8.0] # valeur centrale facultative. partie de la spécification TileJSON

Vous pouvez définir un emplacement central personnalisé (longitude et latitude) pour votre carte et le niveau de zoom par défaut. Notez que vous devez utiliser des valeurs décimales et ne pouvez pas utiliser de valeurs entières.

center =[0.8, 55.5, 5.0] # valeur centrale optionnelle. partie de la spécification TileJSON

Enregistrez et fermez le fichier. Ensuite, démarrez Tegola.

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

Tegola écoute maintenant sur le port 8080.

Étape 8 :Créer un service Systemd pour Tegola

Tegola court au premier plan. Afin de l'exécuter en arrière-plan, nous pouvons créer un service systemd, qui permet également à Tegola de démarrer automatiquement au démarrage du système. Appuyez sur Ctrl+C pour arrêter le processus Tegola en cours, puis créez le fichier tegola.service.

sudo nano /etc/systemd/system/tegola.service

Ajoutez les lignes suivantes à ce fichier.

[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

Enregistrez et fermez le fichier. Créer www-data en tant que propriétaire du /tmp/tegola-cache/ répertoire.

sudo chown www-data:www-data /tmp/tegola-cache/ -R

Ensuite, activez et démarrez ce service.

sudo systemctl enable tegola --now

Vérifiez son état. Assurez-vous qu'il est en cours d'exécution.

statut systemctl tegola

Ensuite, dans la barre d'adresse de votre navigateur Web, tapez

adresse-ip-de-votre-serveur :8080

Vous devriez voir la carte des tuiles vectorielles. Bravo! Vous venez de créer avec succès votre propre serveur de tuiles vectorielles. Notez que les anciennes versions de Firefox ne peuvent pas afficher ces tuiles vectorielles. Vous devez utiliser une bibliothèque tierce pour afficher des cartes basées sur des tuiles vectorielles, ce qui est expliqué à la fin de ce didacticiel.

Étape 9 :Configuration du proxy inverse

Pour accéder au Tegola en utilisant un nom de domaine, nous pouvons mettre en place un reverse proxy pour Tegola avec Nginx ou Apache. Cela nous permettra également d'activer HTTPS avec le certificat Let's Encrypt gratuit.

Nginx

Nginx est un serveur Web et un proxy inverse très populaires. Si vous préférez utiliser Nginx, exécutez la commande suivante pour l'installer.

sudo apt installer nginx

Créez ensuite un fichier de bloc de serveur pour Tegola.

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

Ajoutez le contenu suivant à ce fichier. Remplacez tile.example.com avec votre propre nom de domaine. Vous devez également créer un enregistrement DNS A pour ce sous-domaine. Si vous n'avez pas de vrai nom de domaine, je vous recommande d'aller sur NameCheap pour en acheter un. Le prix est bas et ils offrent une protection de la confidentialité whois gratuite à vie.

serveur { écoute 80 ; écouter [::]:80 ; nom_serveur tile.example.com ; access_log /var/log/nginx/tegola.access ; error_log /var/log/nginx/tegola.error ; emplacement / { proxy_pass http://127.0.0.1:8080; proxy_set_header Hôte $hôte ; 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 $scheme ; proxy_set_header X-Forwarded-Protocol $scheme ; proxy_set_header X-Forwarded-Host $http_host ; }}

Enregistrez et fermez ce fichier. Testez ensuite la configuration de Nginx.

sudo nginx -t

Si le test réussit, rechargez Nginx pour que la modification prenne effet.

sudo systemctl recharger nginx

Vous pouvez maintenant accéder à Tegola via tile.example.com .

Apache

Si vous préférez Apache à Nginx, installez le serveur Web Apache à l'aide de la commande suivante.

sudo apt install apache2

Pour utiliser Apache comme proxy inverse, nous devons activer le proxy modules et le module d'en-tête.

sudo a2enmod proxy en-têtes proxy_http

Créez ensuite un fichier d'hôte virtuel pour Tegola.

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

Mettez les configurations suivantes dans le fichier. Remplacez tile.example.com avec votre vrai nom de domaine. N'oubliez pas de créer un enregistrement DNS A pour ce sous-domaine. Si vous n'avez pas de vrai nom de domaine, je vous recommande d'aller sur NameCheap pour en acheter un. Le prix est bas et ils offrent une protection de la confidentialité whois gratuite à vie.

 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 activé
 

Enregistrez et fermez le fichier. Activez ensuite cet hôte virtuel.

sudo a2ensite tegola.conf

Redémarrez Apache

sudo systemctl redémarrer apache2

Vous pouvez maintenant accéder à Tegola en utilisant le nom de domaine tile.example.com .

Étape 10 :Activer HTTPS

Pour chiffrer le trafic HTTP lorsque vous visitez le serveur Tegola de l'extérieur, nous pouvons activer HTTPS en installant un certificat TLS gratuit émis par Let's Encrypt. Exécutez la commande suivante pour installer le client Let's Encrypt (certbot) sur Ubuntu 20.04.

sudo apt install certbot

Si vous utilisez Nginx, vous devez également installer le plugin Certbot Nginx.

sudo apt installer python3-certbot-nginx

Ensuite, exécutez la commande suivante pour obtenir et installer le certificat TLS.

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d tile.example.com

Si vous utilisez Apache , vous devez alors installer le plug-in Certbot Apache.

sudo apt installer python3-certbot-apache

Ensuite, exécutez la commande suivante pour obtenir et installer le certificat TLS.

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --uir --email [email protected] -d tile.example.com

Où :

  • --nginx  :Utilisez le plug-in nginx.
  • --apache :Utilisez le plug-in Apache.
  • --agree-tos  :acceptez les conditions d'utilisation.
  • --redirect  :Forcer HTTPS par redirection 301.
  • --hsts :Ajoutez l'en-tête Strict-Transport-Security à chaque réponse HTTP. Forcer le navigateur à toujours utiliser TLS pour le domaine. Protège contre le SSL/TLS Stripping.
  • --staple-ocsp :active l'agrafage OCSP. Une réponse OCSP valide est agrafée au certificat que le serveur propose pendant TLS.
  • --uir  :mettre à niveau les requêtes non sécurisées.

Le certificat devrait maintenant être obtenu et installé automatiquement. Et vous pouvez accéder à Tegola via HTTPS :https://tile.example.com .

Configurer un exemple de carte

Vous devez utiliser une bibliothèque tierce pour afficher une carte basée sur des tuiles vectorielles. J'utilise OpenLayer comme exemple. Créer un map.html fichier sur votre serveur et mettez les codes suivants.

     Exemple OpenLayers   

Enregistrez et fermez le fichier. Voici à quoi ça ressemble.

Conclusion

J'espère que cet article vous a aidé à configurer Tegola Vector Tile Server sur Ubuntu 20.04. Comme toujours, si vous avez trouvé cet article utile, abonnez-vous à notre newsletter gratuite pour obtenir plus de conseils et astuces. Prenez soin de vous 🙂


Ubuntu
  1. Comment configurer un serveur Ubuntu/Debian LAMP

  2. Comment configurer Nginx en tant que proxy inverse sur Ubuntu 20.04

  3. Comment configurer WireGuard sur Ubuntu 22.04

  4. Comment configurer le serveur et le client NFS sur Ubuntu 20.04

  5. Comment configurer un serveur TeamSpeak sur Ubuntu 16.04

Comment configurer le serveur Prosody XMPP sur Ubuntu 18.04

Configurer le serveur de géocodage OSM Nominatim sur Ubuntu 20.04

Comment configurer le serveur proxy Shadowsocks-libev sur Ubuntu

Comment configurer le serveur de tuiles OpenStreetMap sur Ubuntu 18.04

Comment configurer le serveur de tuiles OpenStreetMap sur Ubuntu 20.04

Comment configurer Tls pour Postfix sur Ubuntu ?