0 Votes

Code source wiki de Photon

Modifié par john le 2026/09/23 19:56

Afficher les derniers auteurs
1 {{toc depth="2"/}}
2
3 Photon est un géocodeur libre basé sur les données OpenStreetMap. Ici, il sert au géocodage inverse de [[Dawarich>>Wiki Batcave John.Infrastructure.ServeurPrincipal.Dawarich.WebHome]] : il transforme des coordonnées GPS en adresse et en nom de lieu, sans envoyer les positions à un service externe et sans limite de requêtes.
4
5 L'image utilisée est ##rtuszik/photon-docker##, une image non officielle qui télécharge l'index, le met à jour et lance Photon. Documentation de référence : [[dépôt GitHub>>https://github.com/rtuszik/photon-docker]].
6
7 == Stack ==
8
9 {{code language="yaml"}}
10 name: photon
11
12 networks:
13 proxy:
14 external: true
15
16 services:
17 photon:
18 image: rtuszik/photon-docker:latest
19 container_name: photon
20 environment:
21 REGION: europe
22 UPDATE_STRATEGY: SEQUENTIAL
23 UPDATE_INTERVAL: 720h
24 LOG_LEVEL: INFO
25 volumes:
26 - photon_data:/photon/data
27 networks:
28 - proxy
29 ports:
30 - "2322:2322"
31 restart: unless-stopped
32
33 volumes:
34 photon_data:
35 {{/code}}
36
37 {{info}}
38 Dawarich joint Photon par le réseau Docker ##proxy## (##photon:2322##). Le port publié sur l'hôte n'est utile que pour interroger Photon depuis une autre machine du réseau local ; il expose une API sans authentification.
39 {{/info}}
40
41 == Choisir la région ==
42
43 La variable ##REGION## détermine la zone couverte par l'index. **Un point situé hors de la zone n'est pas géocodé** : il reste sans adresse dans Dawarich. La région doit donc couvrir tous les endroits où l'on se déplace, voyages compris, et pas seulement le pays où l'on habite.
44
45 {{warning}}
46 Sans variable ##REGION##, l'image télécharge l'index du monde entier (##planet##).
47 {{/warning}}
48
49 L'image propose deux modes d'import, choisis avec ##IMPORT_MODE##.
50
51 === Mode db (par défaut, recommandé) ===
52
53 L'image télécharge un index déjà construit. Une seule région est possible, et seulement parmi celles qui ont un index prêt. C'est le mode utilisé ici.
54
55 |=Niveau|=Valeurs de REGION
56 |Monde|##planet##
57 |Continents|##africa##, ##asia##, ##australia-oceania##, ##europe##, ##north-america##, ##south-america##
58 |Asie|##india## (##in##), ##japan## (##jp##)
59 |Europe|##andorra## (##ad##), ##austria## (##at##), ##denmark## (##dk##), ##france-monacco## (##fr##, ##france##, ##monaco##), ##germany## (##de##), ##luxemburg## (##lu##, ##luxembourg##), ##netherlands## (##nl##), ##russia## (##ru##), ##slovakia## (##sk##), ##spain## (##es##)
60 |Amérique du Nord|##canada## (##ca##), ##mexico## (##mx##), ##usa## (##us##)
61 |Amérique du Sud|##argentina## (##ar##)
62
63 Les valeurs entre parenthèses sont des alias acceptés. L'orthographe ##france-monacco## est bien celle attendue par l'image.
64
65 Un pays absent de cette liste (Royaume-Uni, Italie, Belgique, Suisse, Portugal…) n'a pas d'index prêt : il faut prendre le continent qui le contient, ou passer en mode jsonl.
66
67 === Mode jsonl (expérimental) ===
68
69 L'image construit elle-même l'index à partir des exports OpenStreetMap. Ce mode permet de combiner plusieurs pays et donne accès à des pays européens sans index prêt.
70
71 Pays disponibles **uniquement** en mode jsonl : ##albania## (##al##), ##baltics## (##ee##, ##lt##, ##lv##), ##belarus## (##by##), ##belgium## (##be##), ##bosnia-herzegovina## (##ba##), ##british-islands## (##uk##), ##bulgaria## (##bg##), ##croatia## (##hr##), ##cyprus## (##cy##), ##czech-republic## (##cz##), ##finland## (##fi##), ##georgia## (##ge##), ##greece## (##gr##), ##hungary## (##hu##), ##iceland-faroe## (##is##), ##ireland## (##ie##), ##italy## (##it##), ##kosovo## (##xk##), ##macedonia## (##mk##), ##malta## (##mt##), ##moldova## (##md##), ##montenegro## (##me##), ##norway## (##no##), ##poland## (##pl##), ##portugal## (##pt##), ##romania## (##ro##), ##serbia## (##rs##), ##slovenia## (##si##), ##sweden## (##se##), ##switzerland-liechtenstein## (##ch##), ##turkey## (##tr##), ##ukraine## (##ua##).
72
73 Toutes les régions du mode db sont aussi disponibles en jsonl.
74
75 Exemple pour la France, le Royaume-Uni et le Portugal :
76
77 {{code language="yaml"}}
78 environment:
79 IMPORT_MODE: jsonl
80 REGION: fr,uk,pt
81 LANGUAGES: fr,en
82 REVERSE_ONLY: "TRUE"
83 {{/code}}
84
85 * ##REVERSE_ONLY## construit un index limité au géocodage inverse, environ 60 % plus léger. C'est suffisant pour Dawarich, mais la recherche d'adresse (##/api##) ne fonctionne plus.
86 * ##LANGUAGES## limite les langues importées pour les noms de lieux.
87 * Quand plusieurs pays sont demandés, l'image télécharge le plus petit export qui les contient tous (un continent, ou le monde), puis filtre.
88 * **Pas de mise à jour automatique** : ##UPDATE_STRATEGY## et ##UPDATE_INTERVAL## sont ignorés. Pour reconstruire l'index, ajouter ##FORCE_UPDATE: "TRUE"## ou supprimer le volume.
89 * L'import est long : plusieurs heures pour un continent.
90
91 === Quel choix faire ===
92
93 |=Situation|=Réglage conseillé
94 |Un seul pays, avec index prêt|Mode db, le pays (##REGION: fr##)
95 |Plusieurs pays d'un même continent, dont un sans index prêt|Mode db, le continent ; ou mode jsonl avec la liste des pays si l'espace disque manque
96 |Déplacements sur plusieurs continents|Mode db, ##planet##
97 |Pays sans index prêt, hors Europe|Mode db, le continent
98
99 Ici : ##europe## en mode db, pour couvrir la France, le Royaume-Uni et le Portugal, ces deux derniers n'ayant pas d'index prêt.
100
101 == Espace disque et premier démarrage ==
102
103 Les tailles évoluent avec les données OpenStreetMap et celles annoncées par le dépôt sont approximatives. Ordres de grandeur : environ 61 Go compressés pour ##planet## en mode db, 26 Go pour l'export jsonl du monde.
104
105 Mesure réelle ici pour ##europe## en mode db : environ 29 Go téléchargés, 47 Go une fois extraits, et une heure avant la première réponse de l'API.
106
107 L'image vérifie l'espace disponible avant de télécharger. Pendant le premier téléchargement, le conteneur est marqué ##unhealthy##, c'est normal.
108
109 == Mises à jour de l'index ==
110
111 |=UPDATE_STRATEGY|=Fonctionnement|=Espace nécessaire
112 |##SEQUENTIAL##|Arrête Photon, supprime l'index, télécharge le nouveau, redémarre. Géocodage indisponible pendant l'opération.|1 index
113 |##PARALLEL##|Télécharge le nouvel index en arrière-plan puis bascule. Coupure minimale.|2 index
114 |##DISABLED##|Aucune mise à jour automatique.|1 index
115
116 ##UPDATE_INTERVAL## fixe l'âge minimal de l'index avant de chercher une nouvelle version (##720h## = 30 jours).
117
118 Ici : ##SEQUENTIAL##, pour ne pas avoir à réserver la place de deux index. Si Dawarich demande un géocodage pendant la mise à jour, le point reste sans adresse et peut être regéocodé plus tard.
119
120 == Changer de région ==
121
122 # Modifier ##REGION## (et ##IMPORT_MODE## si besoin) dans la stack.
123 # Arrêter la stack et supprimer le volume de l'ancien index :(((
124 {{code language="bash"}}
125 docker volume ls | grep photon
126 docker volume rm <VOLUME_PHOTON>
127 {{/code}}
128 )))
129 # Redéployer la stack : le nouvel index est téléchargé.
130
131 == Connexion à Dawarich ==
132
133 Sur **les deux** conteneurs ##dawarich_app## et ##dawarich_sidekiq## :
134
135 {{code language="yaml"}}
136 PHOTON_API_HOST: photon:2322
137 PHOTON_API_USE_HTTPS: "false"
138 {{/code}}
139
140 * Les deux conteneurs doivent être sur le même réseau Docker que Photon.
141 * Indiquer seulement l'hôte et le port, sans ##/api## à la fin.
142 * ##PHOTON_API_USE_HTTPS## ne passe à ##true## que si Photon est servi en HTTPS.
143
144 == Vérifier que Photon répond ==
145
146 Depuis le conteneur Dawarich, sans passer par le port publié :
147
148 {{code language="bash"}}
149 docker exec dawarich_app wget -qO- "http://photon:2322/reverse?lat=48.8584&lon=2.2945"
150 {{/code}}
151
152 La réponse est un JSON contenant une adresse. Une erreur de connexion signifie que Photon n'est pas démarré, pas encore prêt, ou pas sur le même réseau. Une réponse vide pour des coordonnées précises signifie que le point est hors de la région choisie.
153
154 Journaux de téléchargement et de démarrage :
155
156 {{code language="bash"}}
157 docker logs -f photon
158 {{/code}}
159
160 == Sauvegarde ==
161
162 L'index n'est pas sauvegardé : il se retélécharge. Seule la stack compte, et elle est dans cette page.