From 63716ca63503419785fd2780a4e4bdeeed4e348f Mon Sep 17 00:00:00 2001 From: steve Date: Mon, 13 Jul 2026 15:30:40 +0200 Subject: [PATCH] =?UTF-8?q?docs(pont):=20module=20Intervention=20(fichinte?= =?UTF-8?q?r)=20=E2=80=94=20pont=20sav-integration=20d=C3=A9ploy=C3=A9=20+?= =?UTF-8?q?=20pr=C3=A9requis=20Dolibarr=20valid=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - décision /interventions (Ticket=403 en prod) documentée - pont rebuildé depuis sav-integration (Port+Adapters, HttpDolibarrClient fichinter) - prérequis Dolibarr: extrafields numero_serie/sav_statut + fix code_client:'-1' (auto) - chaîne prouvée VPS->tunnel->pont->Dolibarr 19, aller-retour réel OK - accès NAS hors LAN via ssh -J navier-vps nas Co-Authored-By: Claude Opus 4.8 (1M context) --- runbooks/vpn-nas-vps-pont-api.md | 52 +++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/runbooks/vpn-nas-vps-pont-api.md b/runbooks/vpn-nas-vps-pont-api.md index 7aa9dc0..db5a571 100644 --- a/runbooks/vpn-nas-vps-pont-api.md +++ b/runbooks/vpn-nas-vps-pont-api.md @@ -104,4 +104,54 @@ Montage : `VPS (client strongSwan) → 160189667.box.freepro.com (Freebox, VPN I - **Vérif OK** : `ping 192.168.10.104` + `curl http://192.168.10.104:4444` → 200. - **Mobile** : même serveur Freebox IKEv2 pour iPhone/Mac nativement (Réglages → VPN → IKEv2). -RESTE : pont (NAS, conteneur :8080) + NPM `api.navier-instruments.com` → `192.168.10.104:8080` + DNS `api.` → 78.138.45.8 (LWS). +> **Accès NAS depuis n'importe quel réseau** : quand on n'est PAS sur le LAN interne, le NAS +> reste joignable via le VPS : `ssh -J navier-vps nas` (ProxyJump — l'auth SSH reste bout‑à‑bout +> avec la clé NAS, seul le TCP transite par le VPS+tunnel). Idem `scp`/`tar | ssh -J navier-vps nas`. + +--- +## ✅ RÉALISÉ (2026-07-13) — Pont SAV sur module INTERVENTION (fichinter), pas Ticket + +**DÉCISION ACTÉE (Steve + Tiago) : le SAV s'écrit en FICHE D'INTERVENTION Dolibarr (module +`Intervention`, endpoints `/interventions`, table `llx_fichinter`), PAS en Ticket.** +Raison : le module Ticket renvoie **403** sur l'instance de prod (`GET /tickets` → 403), alors que +`GET /interventions` → **200**. Validé en direct sur Dolibarr **19**. Cf. commit +`steve-dev #14 « bascule Tickets → fiches d'intervention »`, convergé dans la branche `sav-integration`. + +**Source du pont = branche `sav-integration`** (repo `Ecosystem-Navier`, la plus à jour : pont +modulaire *Port + Adapters* config‑driven ; `HttpDolibarrClient` écrit en `/interventions`, +`/thirdparties`, `/stockmovements`). L'ancien build (`main`) tapait `/tickets` → remplacé. + +### Déploiement du pont (NAS, `/volume1/docker/sav-pont`) +- Image `navier/sav-pont:interv` buildée sur le NAS (`sudo docker build`, node 22 alpine, tsc → dist). + Dossier possédé par SteveC (`chown -R`) pour édition sans sudo ; **docker exige `sudo`** sur DSM 6. +- Conteneur : `sudo docker run -d --name sav-pont --restart unless-stopped -p 8080:8080 + --env-file .env -v /volume1/docker/sav-pont-data:/data navier/sav-pont:interv`. + ⚠️ **`docker restart` NE recharge PAS `--env-file`** → toujours **`rm` + `run`** après un changement `.env`. +- **Volume data** : le pont écrit un magasin de comptes/sessions dans `/data` → le volume + `/volume1/docker/sav-pont-data` doit appartenir à **uid 1000** (`node`) : `sudo chown -R 1000:1000`. + Sinon boucle de crash `EACCES … accounts.tmp`. +- `.env` (secrets jamais affichés) : adapters auto — `DOLIBARR_BASE_URL` + `DOLIBARR_API_KEY` + remplis → **HttpDolibarrClient (fichinter)** ; `TB_BASE_URL` → HttpThingsBoard. Ajoutés vs l'ancien : + `SESSION_SECRET` (HMAC sessions LAN, sinon sessions perdues à chaque redémarrage), `MEDIA_DIR=/data/media`, + `SEED_SUPERVISOR_NAME=Steve` / `SEED_SUPERVISOR_PIN=1234` (**superviseur initial — CHANGER le PIN**). +- Santé : `GET /healthz` → `{"status":"ok","deps":{"dolibarr":"http","thingsboard":"http","media":"local"}}`. + +### Prérequis Dolibarr (fichinter) — appliqués et validés +Conforme au schéma **officiel** (wiki Extrafields / Table llx_extrafields) — pas de bricolage : +- **Module Intervention activé** (`GET /interventions` → 200). Compte technique `cpont-sav` (clé `DOLAPIKEY`). +- **2 extrafields créés** sur l'élément `fichinter` (le pont les écrit en `array_options`) : + `numero_serie` (varchar 128) + `sav_statut` (varchar 64). Créés par : ligne dans `llx_extrafields` + (`elementtype='fichinter'`) **+** colonne ajoutée dans `llx_fichinter_extrafields`. Backup préalable : + `/volume1/docker/dolibarr-extrafields.backup.sql`. Requête `sqlfilters=(ef.numero_serie:=:'…')` → 200. +- **Fix pont `createThirdparty`** : ajout de **`code_client: '-1'`** (numérotation auto). Sans ça, l'API + Dolibarr (addon `mod_codeclient_monkey`) refuse la création de tiers avec `ErrorCustomerCodeRequired`. + `-1` = *« automatic assignment »* **documenté dans la classe `Societe`** du cœur Dolibarr. Poussé sur + `sav-integration` (commit `fix(sav/pont): createThirdparty envoie code_client:'-1'`). +- **Aller‑retour réel validé** : tiers (code auto) + fiche d'intervention avec `numero_serie`/`sav_statut` + créés puis supprimés (POST/GET/DELETE → 200) sur Dolibarr 19. + +### Chaîne complète prouvée +`Mac (ssh -J) → VPS → tunnel IKEv2 → NAS pont :8080 (/interventions fichinter) → Dolibarr 19 réel`. +Le pont **n'est pas exposé publiquement** : l'espace client (VPS) le relaiera en interne via le tunnel. + +RESTE : espace client sur le VPS (proxy interne `/api` → `192.168.10.104:8080`, PAS d'`api.` public).