Déployer instance OverPass API avec Docker
Overpass API
CeDocumentation d'utilisation du service Overpass API (image b1tw153/overpass-api) déployé via Docker Compose, avec extrait France.
Architecture
Le docker-compose.yml définit deux services :
overpass-init
Télécharge et importe l'extrait OSM (une seule fois)
docker compose permetrun --rm overpass-init
overpass
Sert l'API + applique les diffs minute par minute
docker compose up -d overpass
Les deux services partagent les mêmes volumes Docker externes et nommés explicitement (overpass-db, overpass-backup), ce qui garantit qu'ils pointent toujours sur les mêmes données, peu importe le dossier depuis lequel les commandes sont lancées.
⚠️ Point important : les volumes sont déclarés en external: true. Cela signifie qu'ils doivent exister avant de déployerlancer docker compose up - Compose ne les créera pas automatiquement.
Fichier docker-compose.yml
services:
# ----------------------------------------------------------------------
# Service d'INITIALISATION (à lancer une instanceseule localefois, deen l’APIamont)
Overpass,# utiliséeTélécharge pour+ interrogerimporte lesl'extrait donnéesFrance, d’OpenStreetMap.puis Cettes'arrête configuration(--rm).
est# optimiséeUsage : docker compose run --rm overpass-init
# ----------------------------------------------------------------------
overpass-init:
image: b1tw153/overpass-api:latest
container_name: overpass-init
entrypoint: /opt/overpass/bin/import_osm_data.sh
command:
- --diff-url=https://download.openstreetmap.fr/replication/europe/france/minute/
- --data-source=https://download.geofabrik.de/europe/france-latest.osm.pbf
- --meta=yes
volumes:
- overpass-db:/opt/overpass/db
profiles:
- init
# ----------------------------------------------------------------------
# Service PRINCIPAL (utilisation normale au quotidien)
# Usage : docker compose up -d overpass
# ----------------------------------------------------------------------
overpass:
image: b1tw153/overpass-api:latest
container_name: overpass
restart: unless-stopped
ports:
- "8080:8080"
environment:
- OVERPASS_REPLICATE_ID=auto
- OVERPASS_DIFF_URL=https://download.openstreetmap.fr/replication/europe/france/minute/
- OVERPASS_UPDATE_FREQUENCY=60
- OVERPASS_META_MODE=yes
- OVERPASS_AREAS=yes
volumes:
- overpass-db:/opt/overpass/db
- overpass-backup:/opt/overpass/backup
mem_limit: 8g
stop_grace_period: 5m
volumes:
overpass-db:
name: overpass-db
external: true
overpass-backup:
name: overpass-backup
external: true
Prérequis
Premier déploiement
1. Créer les volumes externes
docker volume create overpass-db
docker volume create overpass-backup
2. Lancer l'import initial
docker compose run --rm overpass-init
Ce que fait ce service :
france-latest.osm.pbf depuis Geofabrik
importe les données de base (nodes/ways/relations) avec métadonnées (--meta=yes)
initialise le point de reprise pour la --diff-url)
⏱ Durée estimée : plusieurs heures selon la machine (CPU/disque). Le conteneur se supprime automatiquement à partirla d’unfin extrait(--rm), officiel.les données restent dans le volume overpass-db.
EllePour reposesuivre la progression :
docker compose logs -f overpass-init
3. Démarrer le service principal
Une fois l'import terminé :
docker compose up -d overpass
Vérifier que ça démarre sans erreur (en particulier l'absence de Database directory does not contain required base files) :
docker compose logs -f overpass
Utilisation au quotidien
docker compose up -d overpass
Arrêter proprement
docker compose stop overpass
Voir les logs en direct
docker compose logs -f overpass
Redémarrer
docker compose restart overpass
Statut
docker compose ps
⚠️ Ne jamais faire docker compose down -v - cela supprimerait aussi les volumes (et donc toutes les données importées). Un simple docker compose down (sans -v) est sans danger pour les données.
Le service applique automatiquement les diffs OSM toutes les OVERPASS_UPDATE_FREQUENCY secondes (actuellement 60s) via OVERPASS_DIFF_URL. Aucune action manuelle n'est nécessaire pour rester à jour.
Tester l'API
curl -sg 'http://localhost:8080/api/interpreter' --data-urlencode 'data=[out:json];out count;'
(adapter le port si vous exposez le service sur l’imageun port différent dans ports:)
Une requête géographique simple (mairie de Toulouse) :
curl -sg 'http://localhost:8080/api/interpreter' --data-urlencode 'data=
[out:json][timeout:25];
node["amenity"="townhall"]["name"~"Toulouse"];
out center;
'
Tester les areas
Les areas (utilisées par exemple pour area["name"="..."]->.a;) sont calculées en arrière-plan après l'import initial et peuvent prendre plusieurs heures à être disponibles, même une fois l'import de base terminé.
Vérifier si le calcul a produit des résultats
curl -sg 'http://localhost:8080/api/interpreter' --data-urlencode 'data=[out:json];out count;' | jq
La présence du champ osm3s.timestamp_areas_base indique qu'au moins un cycle de calcul des areas s'est terminé. Son absence = pas encore de areas disponibles.
Tester une area précise
L'ID d'une area = ID de la relation OSM + 3600000000 :
curl -sg 'http://localhost:8080/api/interpreter' --data-urlencode 'data=
[out:json][timeout:25];
area(3600035738);
out;
' | jq
(exemple : 3600035738 = relation Toulouse, admin_level=8)
Sauvegardes
Pour activer les sauvegardes automatiques (désactivées par défaut - voir le log INFO: Specify OVERPASS_BACKUP_TIME or OVERPASS_BACKUP_DAY to enable backups), ajouter dans environment: du service overpass :
- OVERPASS_BACKUP_TIME=03:00
# et/ou
- OVERPASS_BACKUP_DAY=SUN
Les sauvegardes sont écrites dans le volume overpass-backup (déjà monté). La base est temporairement mise en pause pendant la copie.
Fichiers de référence
wiktorn/overpass-apib1tw153/overpass-api
Dépôt source : b1tw153/Overpass-API
Documentation Overpass QL : https://services:Extraits overpass:France image: wiktorn/overpass-api
container_name: overpass_france
restart: unless-stopped
environment:
OVERPASS_MODE: init
OVERPASS_META: yes
OVERPASS_PLANET_URL:: https://download.openstreetmap.fr/extracts/geofabrik.de/europe/france-latest.osm.pbffrance.html
OVERPASS_PLANET_PREPROCESS:Réplication 'mvFrance /db/planet.osm.bz2 /db/planet.osm.pbf && osmium cat -o /db/planet.osm.bz2 /db/planet.osm.pbf && rm /db/planet.osm.pbf'
OVERPASS_COMPRESSION: lz4
OVERPASS_DIFF_URL:: https://download.openstreetmap.fr/replication/europe/france/minuteminute/
OVERPASS_MAX_TIMEOUT:
"1000"
OVERPASS_UPDATE_SLEEP: "900"
OVERPASS_FASTCGI_PROCESSES: "3"
OVERPASS_RATE_LIMIT: "10"
OVERPASS_SPACE: "12884901888" # 12 Go laissés à Overpass (sur 15)
volumes:
- ./overpass_data:/db
stdin_open: true
tty: true
deploy:
resources:
limits:
cpus: "6" # Limiter 6 CPU
memory: 15g # Limiter 15 Go de RAM
ports:
- 8080:80