Comment installer un serveur OSM sur Ubuntu 24.04 et publier ses premières tuiles

Comment installer un serveur OSM sur Ubuntu 24.04 et publier ses premières tuiles
Pour installer un serveur OSM sur Ubuntu 24.04, installez PostgreSQL 16, PostGIS, osm2pgsql, Mapnik, renderd et Apache, importez un fichier .osm.pbf dans une base gis, puis reliez le style OSM Carto à renderd. Une première tuile peut ensuite être demandée depuis un navigateur via Apache et mod_tile.
Ce tutoriel cible un serveur Ubuntu 24.04 LTS amd64 et un extrait régional OpenStreetMap, pas la planète entière. Le mécanisme compte davantage que la liste des paquets : PostgreSQL stocke les données, osm2pgsql les transforme, Mapnik les dessine, renderd lance le rendu et mod_tile distribue les images de carte.
En bref
🧩 La pile repose sur PostgreSQL 16, PostGIS 3, osm2pgsql, Mapnik, renderd et Apache.
📦 Commencez avec un extrait régional au format .osm.pbf téléchargé depuis Geofabrik, plutôt qu’avec les données mondiales.
🗺️ Le style retenu est openstreetmap-carto v5.9.0, compilé avec Carto 1.2.0 pour produire mapnik.xml.
🔍 Une carte vide ne prouve rien : surveillez les journaux de renderd pendant qu’une requête de tuile arrive.
Prérequis avant d’installer un serveur de tuiles OpenStreetMap
Un serveur de tuiles OpenStreetMap est un serveur cartographique qui transforme des données géographiques en images de carte demandées par un navigateur. L’installation décrite ici utilise les paquets disponibles sur Ubuntu 24.04 LTS et la procédure publiée par Switch2OSM pour cette distribution.
Un extrait régional réduit le risque de bloquer le serveur pendant l’import et rend le diagnostic beaucoup plus simple. Les indications de ressources données ci-dessous sont des repères de départ, non une garantie : le volume réel dépend de la zone, du niveau de détail, des tuiles conservées en cache et du trafic.
| Élément à vérifier | Repère utile | Commande de contrôle | Pourquoi c’est important |
|---|---|---|---|
| Système | Ubuntu 24.04 LTS amd64 | lsb_release -a |
Les commandes et paquets de ce guide ciblent cette version. |
| Mémoire | 8 à 16 Go pour un petit extrait, selon la documentation Switch2OSM publiée en 2024 | free -h |
L’import osm2pgsql utilise fortement la mémoire. |
| Disque | Au moins 100 Go comme point de départ pour un petit extrait, à confirmer selon la zone | df -h |
La base PostGIS, les données sources et le cache grossissent séparément. |
| Droits | Compte administrateur avec sudo | sudo -v |
L’installation configure des services et des paquets système. |
| Encodage | Locale UTF-8 active | locale |
Les noms de lieux et attributs OSM doivent conserver leur encodage. |
La planète OpenStreetMap complète demande une machine dédiée et une capacité nettement supérieure à celle d’un VPS courant. Gardez ce premier déploiement régional séparé d’un futur serveur de production, puis mesurez l’espace, la mémoire et le temps d’import avant d’élargir la zone.
- Préparez une machine vierge ou un instantané réversible.
- Choisissez un extrait régional cohérent avec vos premiers usages.
- Conservez le nom de votre compte Linux : il sera utilisé dans le chemin du style Mapnik.
- N’exposez pas PostgreSQL sur Internet : Apache est la couche web à publier.
Un serveur de tuiles fonctionnel commence par une zone limitée et un chemin de données vérifiable, pas par un import mondial difficile à diagnostiquer.
Comment préparer Ubuntu 24.04 avant l’installation ?
Préparez Ubuntu 24.04 en mettant à jour les paquets, puis installez l’ensemble de la pile cartographique dans une même phase. Cette méthode fixe les dépendances de PostgreSQL, Mapnik, Apache, mod_tile, renderd et osm2pgsql avant toute configuration de base de données.
Étape 1 : mettre à jour Ubuntu 24.04
Ouvrez une session SSH sur le serveur et actualisez les paquets installés. La commande suivante applique aussi les mises à niveau proposées par Ubuntu.
sudo apt update
sudo apt upgrade -y
Vérifiez ensuite que la machine utilise bien Ubuntu 24.04 LTS. La sortie doit afficher la distribution et sa version, sans erreur laissée par la mise à jour.
lsb_release -a
Résultat attendu : la ligne de version indique 24.04. Si une mise à niveau du noyau a été installée, redémarrez le serveur avant de poursuivre afin de travailler sur l’environnement réellement mis à jour.
Étape 2 : installer les composants du serveur cartographique
Installez maintenant les paquets fournis pour Ubuntu 24.04. PostgreSQL et PostGIS hébergeront les données géographiques ; Mapnik, renderd et mod_tile produiront et serviront les tuiles raster.
sudo apt install -y \
screen locate libapache2-mod-tile renderd \
git tar unzip wget bzip2 apache2 lua5.1 \
mapnik-utils python3-mapnik python3-psycopg2 \
python3-yaml gdal-bin npm node-carto \
postgresql postgresql-contrib postgis \
postgresql-16-postgis-3 postgresql-16-postgis-3-scripts \
osm2pgsql net-tools curl
Cette commande installe PostgreSQL 16 et les composants PostGIS 3 adaptés à la pile Ubuntu 24.04 décrite ici. Elle ne télécharge aucun script à exécuter depuis Internet et ne modifie pas les règles du pare-feu.
dpkg -l | grep -E 'postgresql|postgis|osm2pgsql|mapnik|mod_tile|renderd'
Résultat attendu : la commande affiche plusieurs lignes commençant par ii. Une absence de renderd ou de libapache2-mod-tile doit être corrigée avant de passer à la base de données.
Installer PostgreSQL, PostGIS et les outils de rendu
PostgreSQL PostGIS OSM correspond à la couche de stockage du serveur : les objets OpenStreetMap sont importés dans la base gis, puis interrogés par le style de rendu. Le rôle PostgreSQL _renderd doit posséder cette base pour que renderd accède aux données sans utiliser le compte administrateur PostgreSQL.
Étape 3 : créer le rôle PostgreSQL et la base gis
Créez le rôle _renderd, puis une base UTF-8 appelée gis. Respectez l’ordre : la base est attribuée à un rôle qui existe déjà.
sudo -u postgres -i
createuser _renderd
createdb -E UTF8 -O _renderd gis
Restez dans le shell PostgreSQL le temps d’activer les extensions. Le nom gis sera repris dans les commandes osm2pgsql, dans les fichiers SQL du style et dans les vérifications.
Étape 4 : activer PostGIS et hstore dans gis
Connectez-vous à la base gis, activez les extensions puis attribuez les tables système concernées au rôle de rendu. La commande \q quitte psql et exit revient à votre compte Linux habituel.
psql
\c gis
CREATE EXTENSION postgis;
CREATE EXTENSION hstore;
ALTER TABLE geometry_columns OWNER TO _renderd;
ALTER TABLE spatial_ref_sys OWNER TO _renderd;
\q
exit
Vérifiez les extensions avec la commande suivante. Résultat attendu : postgis et hstore apparaissent dans la liste.
sudo -u postgres psql -d gis -c '\dx'
Étape 5 : vérifier Mapnik avant de compiler le style
Mapnik est le moteur qui convertit les données PostGIS en éléments cartographiques dessinés. Le test Python évite de poursuivre avec une installation Mapnik incomplète, erreur qui se manifesterait plus tard sous la forme d’un service renderd muet ou en échec.
python3 -c 'import mapnik'
Résultat attendu : aucun message d’erreur et un retour immédiat au terminal. En cas de ModuleNotFoundError, réinstallez mapnik-utils et python3-mapnik, puis refaites exactement ce test.
Comment préparer OSM Carto et importer un fichier PBF ?
Pour importer un fichier PBF, récupérez le style openstreetmap-carto dans sa version v5.9.0, compilez son fichier project.mml et importez ensuite un extrait .osm.pbf. Le style doit être prêt avant l’import, car osm2pgsql utilise ses fichiers Lua et de style pour transformer les tags OpenStreetMap.
Étape 6 : récupérer openstreetmap-carto v5.9.0
Créez un répertoire de sources dans votre dossier personnel, clonez le dépôt du style, puis détachez explicitement la version v5.9.0. Cette version fixe le contenu du style et évite qu’une mise à jour ultérieure du dépôt modifie l’installation sans décision de votre part.
mkdir ~/src
cd ~/src
git clone https://github.com/gravitystorm/openstreetmap-carto
cd openstreetmap-carto
git pull --all
git switch --detach v5.9.0
Vérifiez que le dépôt est sur la bonne révision. Le résultat doit mentionner HEAD detached at v5.9.0.
git status
Étape 7 : installer Carto et générer mapnik.xml
Carto compile les définitions du style dans un fichier XML lu par Mapnik. Exécutez cette phase depuis le dossier ~/src/openstreetmap-carto, sinon le fichier généré ne se trouvera pas au chemin attendu par renderd.
sudo npm install -g carto
carto -v
carto project.mml > mapnik.xml
Résultat attendu : carto -v retourne 1.2.0, puis le fichier mapnik.xml existe dans le répertoire courant. La présence du fichier ne prouve pas encore que les données sont importées ; elle prouve seulement que le style a été compilé.
ls -lh mapnik.xml
Étape 8 : télécharger un extrait régional OpenStreetMap
Téléchargez un fichier PBF limité à une région. L’exemple officiel utilise l’Azerbaïdjan, disponible sur le serveur de téléchargement Geofabrik ; vous pouvez choisir un autre extrait, mais adaptez alors le nom du fichier dans toutes les commandes suivantes.
mkdir ~/data
cd ~/data
wget https://download.geofabrik.de/asia/azerbaijan-latest.osm.pbf
Vérifiez le nom et la taille du fichier téléchargé. L’extension exacte doit être .osm.pbf : une faute de nom dans la commande d’import est une cause fréquente d’échec immédiat.
ls -lh ~/data/azerbaijan-latest.osm.pbf
Étape 9 : donner à renderd l’accès en lecture au style
Le service renderd doit pouvoir traverser le dossier personnel qui contient ~/src/openstreetmap-carto/mapnik.xml. La commande suivante ouvre uniquement le droit de traversée et de lecture du dossier personnel aux autres utilisateurs, sans accorder d’écriture.
chmod o+rx ~
Vérifiez les permissions du dossier personnel avant de poursuivre. Le résultat doit inclure les droits r-x pour la catégorie other.
ls -ld ~
Cette permission reste un compromis de ce guide de référence. Pour un serveur mutualisé, placez plutôt les fichiers de style dans un répertoire dédié lisible par le compte de service, après validation de la configuration de permissions retenue.
Étape 10 : importer les données avec osm2pgsql
Osm2pgsql est l’outil qui lit le fichier PBF et remplit les tables PostGIS utilisées par le style. La valeur -C 2500 alloue 2 500 Mo de cache à osm2pgsql dans cette procédure ; elle doit être réduite si la mémoire disponible ne permet pas cet usage.
sudo -u _renderd \
osm2pgsql -d gis --create --slim -G --hstore \
--tag-transform-script \
~/src/openstreetmap-carto/openstreetmap-carto.lua \
-C 2500 --number-processes 1 \
-S ~/src/openstreetmap-carto/openstreetmap-carto.style \
~/data/azerbaijan-latest.osm.pbf
L’import est terminé seulement lorsque osm2pgsql se termine sans erreur et que les tables de données existent dans la base gis. Le temps nécessaire dépend du fichier PBF, des ressources disponibles et de l’activité de la machine ; ne déduisez pas un problème du seul fait que la commande reste active plusieurs minutes.
sudo -u _renderd psql -d gis -c '\dt'
Résultat attendu : des tables telles que planet_osm_point, planet_osm_line, planet_osm_polygon et planet_osm_roads apparaissent. L’absence de ces tables indique que l’import doit être corrigé avant les étapes SQL suivantes.

Étape 11 : créer les index et les fonctions du style
Les index et fonctions SQL ne doivent être chargés qu’après l’import, car ils s’appliquent aux données créées par osm2pgsql. Exécutez les deux fichiers depuis le dépôt openstreetmap-carto avec le rôle _renderd.
cd ~/src/openstreetmap-carto/
sudo -u _renderd psql -d gis -f indexes.sql
sudo -u _renderd psql -d gis -f functions.sql
Vérifiez la présence des index dans PostgreSQL. Un résultat contenant plusieurs lignes confirme que la base possède des index au-delà des seules tables importées.
sudo -u _renderd psql -d gis -c '\di'
Étape 12 : télécharger les données externes et les polices
Le style OSM Carto utilise aussi des shapefiles externes et des polices de caractères. Créez le dossier data, attribuez-le au rôle de rendu, puis lancez les scripts fournis par le projet.
cd ~/src/openstreetmap-carto/
mkdir data
sudo chown _renderd data
sudo -u _renderd scripts/get-external-data.py
scripts/get-fonts.sh
Résultat attendu : le répertoire data contient des fichiers téléchargés et le répertoire du projet contient les polices nécessaires. Une erreur sur les polices peut produire des libellés manquants ou un échec de chargement du style.
find ~/src/openstreetmap-carto/data -type f | head
find ~/src/openstreetmap-carto -type d -name fonts
Les tuiles ne sont pas dessinées directement depuis le fichier PBF : le fichier PBF est d’abord importé dans PostGIS, puis le style et les données externes déterminent ce que Mapnik peut afficher.
Comment configurer renderd et Apache pour publier les tuiles ?
Renderd est le service qui demande à Mapnik de produire une tuile lorsque mod_tile la réclame. Apache publie ensuite cette tuile sur le réseau HTTP ; PostgreSQL reste local au serveur et n’a pas besoin d’être exposé au public.
Étape 13 : configurer la couche s2o dans renderd
Ouvrez le fichier /etc/renderd.conf et ajoutez ou remplacez la section de couche suivante. Remplacez accountname par le nom réel de votre compte Linux, sans modifier le chemin du fichier mapnik.xml généré à l’étape 7.
sudo nano /etc/renderd.conf
[s2o]
URI=/hot/
XML=/home/accountname/src/openstreetmap-carto/mapnik.xml
HOST=localhost
TILESIZE=256
MAXZOOM=20
Le préfixe /hot/ est la partie d’URL que la page web devra employer pour demander les tuiles. Vérifiez le fichier sans afficher d’informations sensibles : le chemin XML doit exister réellement et le service doit rester lié à localhost.
sudo grep -A5 '^\[s2o\]' /etc/renderd.conf
ls -lh /home/accountname/src/openstreetmap-carto/mapnik.xml
⚠️ À valider : remplacez accountname dans les deux emplacements par votre compte Linux réel avant l’exécution. Un chemin littéral contenant accountname empêchera renderd de charger le style.
Étape 14 : activer la configuration Apache de mod_tile
Le paquet mod_tile fournit la liaison entre Apache et renderd. La procédure de référence récupère un fichier de configuration Apache du projet mod_tile, l’active avec a2enconf, puis recharge Apache.
cd /etc/apache2/conf-available/
sudo wget https://raw.githubusercontent.com/openstreetmap/mod_tile/python-implementation/etc/apache2/renderd.conf
sudo a2enconf renderd
sudo systemctl reload apache2
Contrôlez que le module et la configuration sont visibles par Apache. Le résultat attendu contient une référence à tile_module et à la configuration renderd.conf.
apachectl -M | grep tile
sudo a2query -c renderd
Avant toute mise en production, ouvrez le fichier téléchargé et vérifiez les directives Apache appliquées. Une configuration web est du code d’infrastructure : elle doit être lue, adaptée à votre hôte et conservée sous contrôle de version si le serveur devient durable.
Étape 15 : redémarrer les services et activer les journaux utiles
Ajoutez l’option de diagnostic à l’unité systemd de renderd, rechargez la configuration systemd, puis redémarrez renderd et Apache. Les journaux de rendu permettront de distinguer une requête HTTP reçue d’une tuile réellement produite.
sudo nano /usr/lib/systemd/system/renderd.service
Ajoutez la ligne suivante dans la section adaptée du service, sans supprimer les directives existantes.
Environment=G_MESSAGES_DEBUG=all
sudo systemctl daemon-reload
sudo systemctl restart renderd
sudo systemctl restart apache2
Vérifiez l’état des deux services. Les résultats doivent indiquer active (running) ; un service en échec doit être diagnostiqué avant le test dans le navigateur.
systemctl status renderd --no-pager
systemctl status apache2 --no-pager
Tester le serveur de tuiles OSM dans un navigateur
Pour tester le serveur de tuiles OSM, récupérez une page Leaflet d’exemple, indiquez l’adresse IP ou le nom de domaine du serveur dans cette page, puis observez les journaux pendant le chargement. Une première demande de tuile peut être lente, car renderd doit générer l’image avant de la mettre en cache.
Étape 16 : installer et adapter la page Leaflet de test
Téléchargez l’exemple de page HTML dans la racine web Apache. Modifiez ensuite le fichier afin que son URL de tuiles pointe vers l’adresse IP ou le nom de domaine réellement utilisé par votre serveur, avec le préfixe /hot/ défini dans renderd.
cd /var/www/html
sudo wget https://raw.githubusercontent.com/SomeoneElseOSM/mod_tile/switch2osm/extra/sample_leaflet.html
sudo nano sample_leaflet.html
La page est ensuite disponible à l’adresse http://adresse-du-serveur/sample_leaflet.html. Utilisez un navigateur depuis un poste autorisé à joindre le serveur ; n’ouvrez le port HTTP dans le pare-feu que si votre politique réseau le prévoit.
Étape 17 : suivre les requêtes de rendu en direct
Ouvrez les journaux dans un terminal, puis rechargez la page de test dans le navigateur. Les messages contenant TILE montrent que renderd reçoit et traite des demandes de tuiles.
tail -f /var/log/syslog | grep " TILE "
Une requête de tuile qui apparaît dans les journaux mais ne s’affiche pas dans Leaflet oriente le diagnostic vers l’URL, Apache ou le navigateur plutôt que vers l’import PostGIS. À l’inverse, l’absence totale de message suggère que la requête n’atteint pas mod_tile ou que la page demande une mauvaise URL.
- Vérifiez que l’URL contient bien le préfixe
/hot/. - Vérifiez que le fichier
mapnik.xmlest lisible par le service renderd. - Vérifiez l’état de
renderdet d’apache2avant de modifier le style. - Attendez le rendu initial d’une zone avant de conclure à une erreur de cache.
Pour approfondir les pratiques de maintenance Linux avant de faire évoluer cette machine, consultez aussi les bases d’une distribution Linux. Les commandes de ce guide restent toutefois propres à Ubuntu 24.04 et ne doivent pas être transposées telles quelles vers une autre distribution.
Erreurs fréquentes lors de l’installation d’un serveur OSM
Une erreur serveur de tuiles OSM se situe généralement dans l’une de quatre couches : import PBF, droits d’accès au style, démarrage de renderd ou chemin HTTP. Le symptôme observable est plus utile qu’une réinstallation complète : il permet de vérifier la variable qui bloque réellement le rendu.
| Symptôme | Cause probable | Vérification | Action prudente |
|---|---|---|---|
| osm2pgsql s’arrête pendant l’import | Mémoire insuffisante ou cache trop ambitieux | free -h et sortie osm2pgsql |
Réduisez le cache -C et recommencez sur un extrait plus petit après avoir nettoyé la base de façon contrôlée. |
| renderd ne démarre pas | Chemin XML erroné ou non lisible | systemctl status renderd --no-pager |
Contrôlez le chemin dans /etc/renderd.conf et les permissions du dossier personnel. |
| Mapnik est introuvable dans Python | Bindings Python incomplets | python3 -c 'import mapnik' |
Réinstallez python3-mapnik et mapnik-utils, puis relancez le test. |
| Apache ne sert aucune tuile | Configuration renderd inactive ou module absent | apachectl -M | grep tile |
Vérifiez libapache2-mod-tile, l’état de la configuration et les journaux Apache. |
| La page Leaflet reste vide | URL de tuiles incorrecte ou requêtes bloquées | Journaux TILE et console réseau du navigateur |
Comparez le préfixe /hot/, le nom d’hôte et la règle réseau appliquée. |
Ne corrigez pas une erreur en exposant PostgreSQL, en désactivant le pare-feu ou en accordant des permissions 777. Ces contournements masquent parfois le symptôme, mais ils élargissent surtout la surface d’attaque du serveur cartographique.
Bonnes pratiques pour maintenir les données et le serveur
Mettre à jour les données OSM signifie traiter deux objets distincts : la base PostGIS et le cache de tuiles. Une mise à jour différentielle de la base ne redessine pas automatiquement toutes les tuiles déjà conservées ; les tuiles expirées ou demandées à nouveau doivent ensuite être rendues.
Documentez le nom de l’extrait PBF, la version du style, la date d’import et les chemins de configuration avant toute modification. Ces quatre repères suffisent souvent à comparer un serveur sain avec un serveur qui ne rend plus après une mise à jour.
- Effectuez une sauvegarde PostgreSQL avant une opération de maintenance importante.
- Surveillez l’espace disponible avant et après chaque nouvel import.
- Conservez la version
v5.9.0du style tant que vous n’avez pas planifié sa mise à niveau. - Testez une modification de style sur une zone réduite avant de l’appliquer au serveur public.
- Consultez les journaux de renderd lorsque le cache semble ne plus se remplir.
Une publication cartographique peut aussi soulever des questions de confidentialité selon les données affichées dans votre propre application. Pour analyser une image ou une recherche visuelle avec davantage de précaution, vous pouvez lire les précautions liées à la recherche d’images, sans confondre ce sujet avec les données géographiques publiques d’OpenStreetMap.
Sources utiles à consulter
La procédure technique utilisée ici s’appuie principalement sur la documentation Switch2OSM pour Ubuntu 24.04 LTS. Cette page décrit la pile PostgreSQL 16, PostGIS, osm2pgsql, Mapnik, renderd, mod_tile et openstreetmap-carto v5.9.0.
Le dépôt openstreetmap-carto fournit le style, les scripts de données externes et les fichiers SQL employés pendant l’import. Vérifiez les notes du dépôt avant toute montée de version du style.
Les extraits régionaux PBF sont disponibles via Geofabrik. Choisissez une zone adaptée à votre objectif et vérifiez sa date de génération avant de la présenter comme une carte récente.
À retenir
- 🧩 PostgreSQL 16 et PostGIS stockent les objets OpenStreetMap importés.
- 🗺️ openstreetmap-carto v5.9.0 produit le fichier Mapnik utilisé par renderd.
- 📦 Un extrait PBF régional facilite l’import, les tests et le diagnostic initial.
- 🔍 Les journaux contenant « TILE » confirment qu’une demande atteint renderd.
- 🔒 Apache publie les tuiles ; PostgreSQL doit rester local au serveur.
Questions fréquentes sur un serveur OSM Ubuntu
Faut-il importer la planète OpenStreetMap complète pour tester le serveur ?
Non. Un extrait régional au format PBF suffit pour vérifier l’import, le style Mapnik, renderd et Apache. L’import mondial demande une infrastructure dédiée et doit être préparé séparément après des mesures sur un extrait plus petit.
Pourquoi utiliser le rôle PostgreSQL _renderd ?
Le rôle _renderd possède la base gis utilisée par le rendu. Cette séparation évite d’exécuter l’import et le service de rendu avec le compte superutilisateur PostgreSQL.
Quelle adresse de tuiles faut-il utiliser dans Leaflet ?
L’URL doit reprendre le préfixe défini dans /etc/renderd.conf. Avec la configuration proposée, le préfixe est /hot/ ; l’adresse complète dépend ensuite de votre nom de domaine ou de l’adresse IP du serveur.
Pourquoi la première tuile est-elle plus lente à apparaître ?
La première requête peut déclencher le rendu de l’image par Mapnik via renderd. Les demandes suivantes peuvent être plus rapides lorsque la tuile existe déjà dans le cache, mais la durée dépend de la zone, du zoom et des ressources du serveur.
Comment mettre à jour les données OpenStreetMap après l’installation ?
Les données peuvent être actualisées au moyen de mises à jour différentielles de la base, puis par le renouvellement des tuiles expirées. Cette opération mérite une procédure dédiée, testée sur une copie de la base avant toute automatisation en production.
Avertissement : cette procédure cible Ubuntu 24.04 LTS amd64, PostgreSQL 16, PostGIS 3, openstreetmap-carto v5.9.0 et Carto 1.2.0. Rejouez l’installation complète sur une machine vierge avant toute mise en production, puis adaptez la sécurité réseau, les sauvegardes et les mises à jour à votre infrastructure réelle.