Passer au contenu principal

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 :

Service Rôle Usage 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

    Docker + Docker Compose v2 Espace disque suffisant sur le volume Docker (compter large pour un usageextrait surFrance + croissance dans le temps - prévoir plusieurs dizaines de Gio minimum)

    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 :

      télécharge l'extrait 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 France,réplication (--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

      Action Commande Démarrer 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

        Image Docker wiktorn/overpass-api  : b1tw153/overpass-api Dépôt source : b1tw153/Overpass-API Documentation Overpass QL : https://github.com/wiktorn/Overpass-APIwiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL
        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