Solution

Il existe une solution open source OSRM (Open Source Routing Machine)

En cherchant un peu je tombe sur le github : https://github.com/Project-OSRM/osrm-backend avec un Quick Start qui est en plus sous docker.

Génération des données

Comme pour le serveur de tile il est nécessaire de processer les données brut d'un .pbf d'OSM.

Tout se passe grâce à cette image docker osrm/osrm-backend qui permet de générer les datas mais aussi de lancer un serveur. Après un premier test avec monaco, tout semble ok donc je lance avec la france.

docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/france.osm.pbf
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/france.osrm
docker run -t -v "${PWD}:/data" --rm osrm/osrm-backend osrm-customize /data/france.osrm

Sans forcément bien comprendre tout ce qu'il se passe, a priori tout va bien. Tout ce processus dure environ 1h.

Serveur

Ici comme avec le serveur de tile pas besoin de serveur pgsql. Voici à quoi ressemble le dossier (~10Go):

├── france.osrm
├── france.osrm.cell_metrics
├── france.osrm.cells
├── france.osrm.cnbg
├── france.osrm.cnbg_to_ebg
├── france.osrm.datasource_names
├── france.osrm.ebg
├── france.osrm.ebg_nodes
├── france.osrm.edges
├── france.osrm.enw
├── france.osrm.fileIndex
├── france.osrm.geometry
├── france.osrm.icd
├── france.osrm.maneuver_overrides
├── france.osrm.mldgr
├── france.osrm.names
├── france.osrm.nbg_nodes
├── france.osrm.partition
├── france.osrm.properties
├── france.osrm.ramIndex
├── france.osrm.restrictions
├── france.osrm.timestamp
├── france.osrm.tld
├── france.osrm.tls
├── france.osrm.turn_duration_penalties
├── france.osrm.turn_penalties_index
└── france.osrm.turn_weight_penalties

Il suffit ensuite de lancer une nouvelle commande de l'image docker pour lancer le serveur:

docker run -t -i -p 5000:5000 -v "${PWD}:/data" --name osrm osrm/osrm-backend osrm-routed --algorithm mld /data/france.osrm

Et pour tester de manière un peu plus visuelle, une image docker est proposée avec une map dans laquelle il est possible de cliquer pour sélectionner le point de départ et d'arrivée. La map en elle même ne provient pas de notre serveur local, ni le geocoding, mais les résultats de routing oui.

docker run -ti --rm -p 9966:9966 osrm/osrm-frontend