Overpass
Overpass est une API permettant d'interroger des données OSM.
1 Mise en place d'un serveur Overpass (Debian)
Ce qui suit indique la méthodologie pour mettre en place une API Overpass sur un serveur Debian avec les données OSM mondiales et historiques ("ATTIC") mises à jour une fois par heure.
Les données mondiales sont utilisées car les tests sur un export de données (France) n'ont pas été concluants. Une mise à jour à l'heure a été décidée plutôt qu'à la minute pour soulager le serveur.
1.1 Pré-requis
- Un serveur avec un disque d'au moins 500 Go, de préférence un SSD, et au moins 8 Go de mémoire RAM.
- Un nom de domaine pointant vers le serveur.
1.2 Création d'un utilisateur système
sudo adduser overpass --system --shell /bin/bash --group
1.3 Création de répertoires
sudo mkdir -p "/opt/osm-3s/database/"
sudo mkdir "/opt/osm-3s/replicate/"
sudo mkdir "/opt/osm-3s/logs/"
sudo chown overpass:overpass -R /opt/osm-3s
1.4 Installation d'Overpass
1.4.1 Téléchargement
sudo wget https://dev.overpass-api.de/releases/osm-3s_v0.7.56.9.tar.gz -P /usr/local/src/
sudo tar -xvf /usr/local/src/osm-3s_v0.7.56.9.tar.gz -C /usr/local/src/
sudo chown overpass:overpass -R /usr/local/src/osm-3s_v0.7.56.9
1.4.2 Compilation et installation
cd /usr/local/src/osm-3s_v0.7.56.9
sudo -u overpass ./configure CXXFLAGS="-O2" --prefix=/opt/osm-3s/osm-3s_v0.7.56.9
sudo apt-get install -y g++ make expat libexpat1-dev zlib1g-dev
sudo -u overpass make
sudo -u overpass make install
1.5 Installation d'Apache
1.5.1 Installation
sudo apt-get install -y apache2 libapache2-mod-auth-openidc python-certbot-apache
sudo a2enmod cgid
sudo a2enmod ext_filter
sudo a2enmod headers
sudo a2enmod setenvif
sudo a2enmod rewrite
1.5.2 Configuration
Fichier de configuration "/etc/apache2/sites-available/000-default.conf" :
<VirtualHost *:80>
ServerName nom_de_domaine
ServerAdmin mail_de_contact
DocumentRoot /var/www/html
DirectoryIndex index.html interpreter
ExtFilterDefine gzip mode=output cmd=/bin/gzip
ScriptAlias /api /opt/osm-3s/osm-3s_v0.7.56.9/cgi-bin/
LogLevel error
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/opt/osm-3s/osm-3s_v0.7.56.9/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</VirtualHost>
Note : le domaine "nom_de_domaine" lié à l'adresse IP du serveur doit être configuré dans les DNS du domaine.
1.5.3 Service
Activation et redémarrage du service :
sudo systemctl enable apache2
sudo systemctl restart apache2
1.5.4 Pare-feu (Nftables)
inet filter input tcp dport {80,443} ct state new,established accept
inet filter output tcp sport {80,443} ct state established accept
1.5.5 Certificat Let's Encrypt
sudo certbot -d nom_de_domaine --apache -n --agree-tos --email mail_de_contact
sudo certbot enhance -d nom_de_domaine -n --redirect --apache --cert-name nom_de_domaine
Note : le renouvellement automatique est mis en place dans "/etc/cron.d/certbot".
1.6 Données OSM
Avant de pouvoir utiliser l'API, il faut charger les données OSM. La méthode la plus rapide (plusieurs heures tout de même) et la plus complète est de cloner les données à l'instant T.
1.6.1 Clonage des données
su - overpass -c 'nohup /opt/osm-3s/osm-3s_v0.7.56.9/bin/download_clone.sh --db-dir=/opt/osm-3s/database --source=http://dev.overpass-api.de/api_drolbr/ --meta=attic > /opt/osm-3s/logs/download_clone.file &'
Lorsque le clonage est terminé, le répertoire "/opt/osm-3s/database" pèse environ 326 Go.
"nohup" permet d'exécuter la commande en tâche de fond (la session peut être fermée). Le fichier "/opt/osm-3s/logs/download_clone.file" contiendra les messages renvoyés par la commande.
1.6.2 Test
Une fois le clonage terminé, on vérifie que l'API trouve bien les données en exécutant "osm3s_query" et en entrant une requête :
/opt/osm-3s/osm-3s_v0.7.56.9/bin/osm3s_query --db-dir=/opt/osm-3s/database
<query type="node"><bbox-query n="51.0" s="50.9" w="6.9" e="7.0"/><has-kv k="amenity" v="pub"/></query><print/>
"Ctrl+D" pour sortir.