Installer Tournevia
Installation locale, kit source et serveur Docker avec HTTPS.
Choisir votre installation
| Usage | Installation |
|---|---|
| Évaluation sur votre ordinateur | Docker, accès local sur localhost |
| Équipe sur un VPS ou serveur privé | Docker, domaine HTTPS et comptes nominatifs |
| Hébergement géré | Offre future ; aucun abonnement n’est nécessaire pour Community |
Le kit actuel cible Linux AMD64. Il nécessite Python 3.11+, Docker et Compose 2.24.4+.
Windows, macOS et Linux
- Windows : utilisez Docker Desktop avec des conteneurs Linux, puis PowerShell et
python. - macOS : utilisez Docker Desktop et
python3. L’image AMD64 peut nécessiter l’émulation sur Apple Silicon. Une installation macOS complète n’a pas été validée. - Linux : utilisez Docker Engine avec le plugin Compose et
python3. C’est aussi le chemin d’installation pour un VPS Linux.
Consultez les instructions officielles de Docker Desktop ou de Docker Engine. Leurs conditions sont distinctes de celles de Tournevia.
1. Obtenir et vérifier le kit
Demandez à l’opérateur d’installation l’archive ZIP du candidat et sa somme SHA-256. Aucun téléchargement public supporté n’est encore disponible. Vérifiez leur origine et la somme, puis extrayez l’archive dans un nouveau dossier, par exemple tournevia. Conservez ce kit : ses scripts servent aussi à la maintenance.
Si vous maintenez le code de l’application, consultez Construire un kit candidat.
Depuis ce dossier :
python scripts/release.py verify
python scripts/release.py buildSur macOS/Linux, remplacez python par python3. La construction affiche le nom exact de l’image à utiliser.
2. Préparer le routage
La carte affichée ne calcule pas les trajets. Valhalla doit disposer du graphe routier couvrant votre zone, et être joignable depuis le conteneur worker. VROOM est inclus dans l’image de l’application.
Préparez le graphe Île-de-France depuis le dossier du kit. Le kit fixe l’image Valhalla et l’empreinte SHA-256 de l’extrait dans deploy/engines.json. Cette séquence a été exécutée en PowerShell avec Docker Desktop ; sous Linux, lancez les mêmes commandes Docker depuis un terminal avec python3.
$enginePins = Get-Content deploy/engines.json | ConvertFrom-Json
if (-not (Test-Path deploy/runtime/ile-de-france.osm.pbf)) {
Invoke-WebRequest $enginePins.region_source -OutFile deploy/runtime/ile-de-france.osm.pbf
}
docker pull $enginePins.valhalla_image
docker run --rm --memory 6g --cpus 2 --entrypoint python3 -v "${PWD}/deploy/runtime:/data" -v "${PWD}/deploy:/workspace:ro" $enginePins.valhalla_image /workspace/build_graph.py region
python deploy/configure_matrix.py deploy/runtime/region/valhalla.json deploy/runtime/regional-matrix.json
docker run -d --restart unless-stopped --name france-vrp-valhalla --memory 2g --cpus 2 -p 127.0.0.1:8002:8002 -v "${PWD}/deploy/runtime:/data:ro" --entrypoint valhalla_service $enginePins.valhalla_image /data/regional-matrix.json 2- La première exécution télécharge une fois l’extrait Île-de-France ; un fichier existant est conservé.
build_graph.py regionconstruit les tuiles. Prévoyez plusieurs minutes et plusieurs Go ; il refuse un extrait dont l’empreinte diffère de celle fixée, sauf avec--accept-new-extract, et ne remplace jamais des tuiles existantes.configure_matrix.pyécrit les réglages de matrice attendus par l’application. Il refuse d’écraser un fichier existant.- La dernière commande démarre le service routier sur le port local 8002. Ensuite, utilisez
docker start france-vrp-valhallaetdocker stop france-vrp-valhalla.
Pour mettre à jour le graphe, arrêtez tous les calculs, construisez dans un nouveau dossier, changez le montage et refaites les essais ; ne modifiez jamais les tuiles pendant un calcul. La préparation du graphe demande plus de ressources que l’application : voir Prérequis et dimensionnement.
Pour une installation qui utilise Compose directement, le fichier deploy/docker-compose.routing.yml du kit ajoute le service routier à l’ensemble, sur un réseau interne, sans port publié et avec un contrôle de santé. ROUTING_CONFIG, ROUTING_THREADS et ROUTING_MEMORY choisissent sa configuration et ses ressources ; voir la référence de configuration.
Conservez la date et le hash de l’extrait réellement utilisé. Configurez VALHALLA_URL et ROUTING_DATASET dans le fichier privé de l’installation. Ne rendez pas le service routier public. La couverture du fond de carte ne prouve pas celle du graphe.
Toute la France
Le graphe Île-de-France est celui des essais et des mesures de performance. Pour calculer ailleurs en France métropolitaine, construisez à la place l’extrait France fixé (extracts.france dans deploy/engines.json, 5,1 Go, données du 18 octobre 2026) :
$enginePins = Get-Content deploy/engines.json | ConvertFrom-Json
Invoke-WebRequest $enginePins.extracts.france.source -OutFile deploy/runtime/france.osm.pbf
docker volume create tournevia-france
docker run --rm -v tournevia-france:/data -v "${PWD}/deploy/runtime:/src:ro" alpine:3.20 cp /src/france.osm.pbf /data/
docker run --rm --memory 16g --cpus 8 --entrypoint python3 -v tournevia-france:/data -v "${PWD}/deploy:/workspace:ro" $enginePins.valhalla_image /workspace/build_graph.py region --extract france --jobs 8
docker run -d --restart unless-stopped --name france-vrp-valhalla-france --memory 8g --cpus 4 -p 127.0.0.1:8002:8002 -v tournevia-france:/data:ro --entrypoint valhalla_service $enginePins.valhalla_image /data/france/valhalla.json 4- Sous Windows et macOS, construisez dans un volume Docker : à travers un dossier monté depuis l’hôte, le tri de la construction était trop lent pour aboutir. Sur un hôte Linux, un dossier monté convient.
--jobsrègle le nombre de fils de construction.--max-matrix-km(200 par défaut) est la plus grande distance à vol d’oiseau entre deux points d’un même calcul, dépôt compris.- Donnez la même valeur à
MATRIX_MAX_KM. Un calcul dont les points sont plus éloignés est alors refusé avant sa mise en file d’attente, en nommant les deux lieux les plus éloignés, au lieu d’échouer dans le service routier.
La construction refuse un extrait dont l’empreinte SHA-256 diffère de celle fixée, sauf avec --accept-new-extract ; après une mise à jour, refaites les essais et mettez l’empreinte à jour. Durée, mémoire et disque figurent dans Prérequis et dimensionnement.
Recherche d’adresses (facultatif)
Avec la recherche d’adresses, les champs d’adresse proposent des adresses françaises pendant la saisie, l’adresse choisie place l’épingle et l’import CSV propose des coordonnées pour les lignes qui n’en ont pas ; chaque proposition reste à vérifier à l’entrée. Sans elle, chaque point se place avec une épingle sur la carte ou, à défaut, en saisissant ses coordonnées.
Elle s’active de deux façons :
- Le service public de l’IGN, choisi par un administrateur, sans réglage du serveur ni compte : il le coche pendant la configuration initiale ou dans Paramètres → Recherche d’adresses. La Géoplateforme de l’IGN reçoit alors le texte de chaque adresse recherchée et de chaque ligne importée sans coordonnées, avec la position du dépôt. Il reste désactivé pour chaque entreprise tant qu’un administrateur ne l’a pas choisi.
- Le géocodeur propre à l’installation, indiqué dans
GEOCODER_URL, pour que les adresses ne quittent pas le serveur. Il sert alors à toutes les entreprises.
La surcouche deploy/docker-compose.geocoder.yml du kit exécute addok avec la Base Adresse Nationale sur un réseau interne que seule l’API rejoint, sans port publié ni journal des requêtes. Le kit la documente pour une installation Compose configurée dans .env :
New-Item -ItemType Directory -Force deploy/runtime/geocoder | Out-Null
Invoke-WebRequest https://adresse.data.gouv.fr/data/ban/adresses/latest/addok/addok-france-bundle.zip -OutFile deploy/runtime/geocoder/addok-france-bundle.zip
Expand-Archive deploy/runtime/geocoder/addok-france-bundle.zip deploy/runtime/geocoder/addok-data
docker compose --env-file .env -f deploy/docker-compose.example.yml -f deploy/docker-compose.geocoder.yml up -dLe paquet fait environ 2,5 Go à télécharger et 3,2 Go une fois décompressé, et addok demande au moins 6 Go de mémoire ; le chargement de l’index prend une à deux minutes après chaque démarrage. Renseignez dans GEOCODER_DATASET la source et la date du paquet : l’interface l’affiche à côté des résultats, comme l’exige la Licence Ouverte 2.0. Voir la référence de configuration.
3. Démarrer sur votre ordinateur
Utilisez la commande imprimée par la construction du kit, avec son image exacte :
python scripts/start_local.py --image IMAGE_DU_KIT --port 8007 --directory CHEMIN_PRIVERemplacez les deux valeurs en majuscules. Par exemple, le dossier privé peut se trouver sous votre dossier utilisateur Windows, ou dans ~/tournevia-data sous macOS/Linux.
Le lanceur crée les secrets, la configuration et un lien privé de première utilisation. Seule l’application est publiée sur la boucle locale. Relancer la même installation conserve les données et l’image choisie.
L’adresse Valhalla initiale est http://host.docker.internal:8002, adaptée à un service sur l’hôte Docker Desktop. Sous Linux, renseignez une adresse privée réellement joignable dans workspace.env, puis relancez le même lanceur. Faites de même pour le libellé ROUTING_DATASET. Aucune route ne peut être calculée tant que le routage n’est pas configuré.
Ouvrez le lien privé affiché et configurez l’entreprise comme indiqué à l’étape 5. Ensuite, utilisez simplement http://localhost:8007.
4. Installer sur un VPS avec HTTPS
Si votre serveur fait déjà tourner Coolify, Dokploy ou un autre proxy HTTPS sur les ports 80 et 443, suivez plutôt Installer sur un VPS, pas à pas : Tournevia fonctionne alors derrière ce proxy, qui obtient aussi le certificat. Ce chemin a été exécuté sur un vrai VPS. Les étapes ci-dessous utilisent le proxy HTTPS fourni avec votre propre certificat.
Préparez un domaine pointant vers le serveur, un certificat valide pour ce domaine, un répertoire privé et un service Valhalla accessible sur un réseau privé. Le dossier des certificats doit contenir fullchain.pem et privkey.pem, lisibles par le proxy du conteneur (UID 101), sans rendre la clé accessible à tous.
Construisez le kit sur le serveur ou transférez l’image construite par votre circuit de confiance. Puis, depuis le kit :
python3 scripts/start_server.py --directory /srv/tournevia/private --origin https://planner.example.com --certificates /srv/tournevia/certs --valhalla-url http://routing.internal:8002 --dataset "Votre extrait, sa date et ses hypothèses de vitesse" --image IMAGE_DU_KIT --prepare-onlyRemplacez le domaine, les chemins, l’adresse de routage, le libellé et l’image. Cette première commande valide la configuration sans démarrer les services. Exécutez ensuite la même commande sans --prepare-only pour démarrer.
Le lanceur active le mode partagé et publie uniquement le proxy HTTPS sur le port 443. PostgreSQL et l’API restent privés. Le port 80 n’est pas servi : une adresse http:// n’est pas redirigée, communiquez l’adresse https://. Le lanceur ne commande pas de VPS, ne configure pas le DNS et ne délivre pas de certificat.
Vérifiez ensuite :
- Le navigateur reconnaît le certificat sans avertissement.
- Le lien privé permet de configurer l’entreprise, comme à l’étape 5 ; il n’est jamais partagé avec les exploitants.
- Un compte peut se connecter, enregistrer puis retrouver ses données.
- Un calcul utilise le bon graphe et atteint un résultat vérifiable.
- La sauvegarde et la restauration ont été essayées avant un usage opérationnel.
Un petit VPS peut héberger l’application sans être adapté à la construction du graphe ou à 250 livraisons. Mesurez votre charge ; le service routier peut rester sur une autre machine privée.
5. Configurer l’entreprise
Le lien privé écrit par le lanceur dans private-setup.url contient le code SETUP_TOKEN. Il ouvre la configuration initiale tant que l’installation ne contient ni entreprise ni compte. Sans ce lien, saisissez le code à la deuxième étape, sous Utiliser un code de configuration. Sans SETUP_TOKEN, la configuration reste verrouillée. Il n’existe ni mot de passe par défaut, ni inscription publique.
La configuration compte deux étapes :
- Entreprise et dépôt. Le nom de l’entreprise, le nom du dépôt et son adresse. Avec le géocodeur de l’installation, ou après avoir coché Trouver les adresses avec le service d’adresses de l’IGN (France), le champ d’adresse propose des adresses et l’adresse choisie place l’épingle. Déplacez l’épingle sur l’entrée des véhicules, puis cochez J’ai vérifié cette entrée des véhicules sur la carte : l’espace ne se crée pas sans entrée vérifiée. Les coordonnées peuvent aussi se saisir sous Saisir les coordonnées. Le choix de l’IGN est conservé pour l’entreprise.
- Administrateur. Le nom, l’identifiant et le mot de passe (15 à 128 caractères) du premier administrateur.
Le premier administrateur garde la langue choisie sur l’écran de configuration ; chacun peut ensuite la changer dans ses préférences personnelles.
Un court guide aide ensuite l’administrateur à ajouter les véhicules, choisir le format des numéros de livraison et importer ou saisir les premières livraisons, ou à essayer avec des livraisons d’exemple ; chaque étape peut être passée. Les exemples sont des enregistrements fictifs marqués Exemple, planifiés uniquement avec d’autres exemples, dont les feuilles de route et l’export indiquent qu’ils ne sont pas à suivre sur la route ; un administrateur les retire ensemble dans Paramètres → Données d’exemple. Voir Bien démarrer.
Après l’installation
Préparez vos sauvegardes avec le guide d’exploitation. Le mode local ne doit jamais être exposé à Internet ; pour une équipe, utilisez le mode partagé HTTPS.
En mode local, ouvrez l’adresse affichée par le lanceur, avec localhost ou 127.0.0.1. Une origine de boucle locale IPv6 comme http://[::1]:8007 est refusée au démarrage, car l’API n’est publiée que sur la boucle locale IPv4. Tous les réglages figurent dans la référence de configuration.