Installer Overpass API

Dans le cadre d’un projet, j’ai besoin de faire des requêtes sur les serveurs de Openstreemap, plus précisément les api.
Le problème c’est que les serveurs actuels supportent une belle charge et comme je ne voulais pas prendre trop de place chez eux, je me suis dit, pourquoi pas en monter un moi même.

OSM donnent les instructions pour faire un serveur API de réplication ici : http://wiki.openstreetmap.org/wiki/Overpass_API/Installation

Voici ce que j’ai fait de mon côté sur un serveur OVH SoYouStart

Préparation

On met à jour le serveur

On installe les paquets nécessaires

On va avoir une arborescence de ce type :
/opt/osm -> contiendra les fichiers propres au moteur de recherche
/data/import -> contiendra les fichiers d’import (planet.osm.bz2 par exemple)
/data/db -> contiendra la base de données
/data/diffs -> contiendra les fichiers d’actualisation des données

Compilation

On va récupérer les fichiers sources directement dans /opt/, décomprésser et nettoyer

On /opt/osm/ contient les fichiers. On va maintenant compiler tout ça
Il est possible d’utiliser la commande screen pour détacher le process et laisser tourner en tâche de fond.

Importation des données

On va maintenant importer les données. Importer la planète entière au début n’est pas une bonne idée. Commencez par un petit morceau (la Corse ou le Luxembourg). Vous pouvez récupérer les fichiers sur le site de geofabrik.de.

Si on décide de récupérer la Corse

Maintenant on va extraire les données et importer les données dans la base. Je vous recommande d’utiliser la commande screen pour ce processus. L’import de la France (3 Go) sur mon serveur a prit 3h30.

La commande est composée :
/opt/osm/bin/init_osm3s.sh -> le script
/data/import/corse.osm.bz2 -> le fichier d’import
/data/db/ -> l’emplacement de la base de données
./ -> le répertoire de travail

Une fois l’importation terminée, il sera affiché « Update complete » dans la console.
On va donc tester le système avant d’aller plus loin : on lance une console osm

Dans cette console, on va indiquer une requête afin qu’elle soit exécutée. Finir la requête avec Ctrl+D.

Vous pouvez tester la commande suivante pour lister l’ensemble des pubs de la ville de Cologne en Allemagne (mais il faut avoir importé l’Allemangne…)

Si vous avez un retour correct (donc pas d’erreurs), c’est que le système fonctionne. Vous pouvez importer une base plus grande, il faut au préalable supprimer l’ensemble des données dans /data/db/

Créer le daemon

On est sous Ubuntu, on va donc créer un script dans /etc/init.d pour créer notre daemon

Dans notre fichier, collez ces informations. Attention à bien les modifier si vous avez changé les répertoires !

On sauvegarde, on le rend exécutable et on le configure

On démarre le daemon

On peut vérifier que le processus est bien démarré

Mise à jour

L’image que vous avez importé dans votre base est une image qui n’est pas à jour. En effet, l’export complet de toute la planète fait aujourd’hui 54Go, et est exportée une fois par semaine.
Pour mettre à jour notre base avec le serveur OSM, il faut importer les différences.
Vous pouvez choisir d’importer les modifications avec une granularité de 1 jour, 1 heure ou 1 minute. Le serveur de mise à jour est http://planet.openstreetmap.org/replication/

Le truc chiant c’est qu’il va falloir dire au serveur depuis quand il n’est plus à jour.
C’est le « replicate sequence number ».

Disons que vous souhaitez mettre à jour votre serveur toutes les minutes et que votre archive date du 31 décembre 2016 à 13h15, alors le nombre magique est 002 252 284 = 2252284.
Le 002 correspond au premier dossier, le 252 correspond au dossier où le fichier 284 se trouve, ce dernier étant l’export à 13h15 le 31 décembre 2016.

On va avoir un script pour récupérer les minutes, chaque minute

Un script pour mettre à jour la base de données (le –meta est obligatoire)

Le fait de donner des noms au fichiers nohup c’est pour voir le contenu de temps en temps (tail -f nohup-import.out par exemple)

Web API

On va donc activer Apache et le configurer pour notre api.

On active des modules utiles

On va modifier le fichier de configuration du vhost

On relance Apache

Normalement tout devrait être vert. On va tester l’api avec la commande suivante

Si vous faites un cat test.xml, vous devriez quelque chose du type

Web API SSL

Tout est déjà opérationnel. Maintenant, si vous souhaitez rajouter une couche de SSL, on va poursuivre en rajoutant un certificat avec Let’s Encrypt par exemple :

On demande ensuite le certificat (attention, votre DNS doit déjà pointer sur le serveur !)

Une fois le certificat obtenu, on va configurer apache et le vhost :

On va rajouter un fichier pour Let’s Encrypt

Copiez coller le contenu dans votre fichier

On va maintenant changer notre fichier vhost

On redémarre Apache une dernière fois

Le certificat SSL expire tous les 3 mois. On va donc créer un script pour le mettre à jour tout seul
D’abord le fichier /etc/letsencrypt/osm.domain.com.ini

Le script dans /etc/cron.monthly/renew-osm.domain.com.sh

On rend le script exécutable

Dans le doute on peut le tester

Voilà, vous avez un serveur qui est à jour avec les données OpenStreetMap, qui répond aux requêtes API et en plus protège les données avec un certificat SSL