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 -lsExemple 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 32113Et 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.zipDécompressez-le.
sudo apt install unzipunzip tegola_linux_amd64.zipDé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.shEntrez 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-binGénérer la relation
land_polygons
dans legis
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.shEntrez 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.shExécutez le
postgis_helpers
Script SQL.sudo -u postgres psql -d osm -a -f /opt/tegola-osm/postgis_helpers.sqlExé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.tomlConfigurez 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 TileJSONVous 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 TileJSONEnregistrez et fermez le fichier. Ensuite, démarrez Tegola.
/usr/local/bin/tegola serve --config=/opt/tegola-osm/tegola.tomlTegola é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.serviceAjoutez 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.targetEnregistrez 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/ -REnsuite, activez et démarrez ce service.
sudo systemctl enable tegola --nowVé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 :8080Vous 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 nginxCréez ensuite un fichier de bloc de serveur pour Tegola.
sudo nano /etc/nginx/conf.d/tegola.confAjoutez 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 -tSi le test réussit, rechargez Nginx pour que la modification prenne effet.
sudo systemctl recharger nginxVous 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 apache2Pour 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_httpCréez ensuite un fichier d'hôte virtuel pour Tegola.
sudo nano /etc/apache2/sites-available/tegola.confMettez 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.confRedémarrez Apache
sudo systemctl redémarrer apache2Vous 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 certbotSi vous utilisez Nginx, vous devez également installer le plugin Certbot Nginx.
sudo apt installer python3-certbot-nginxEnsuite, 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.comSi vous utilisez Apache , vous devez alors installer le plug-in Certbot Apache.
sudo apt installer python3-certbot-apacheEnsuite, 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.comOù :
--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 🙂