06 Déploiement
Première CloudGate (Golden Sample), industrialisation multi-CG, accès distant frp
Stratégie en 3 phases
- Pilote (Golden Sample) : 1 CloudGate parfaitement configurée à La Bégude, validée end-to-end avec Jean-Marc & Jésus
- Export config + flow LuvitRED sur CloudGate Universe (cloud Option) → version "terega-prod-v1.0"
- Clones : nouvelles CG provisionnées en pulling cette version depuis CloudGate Universe
Phase 1 — Configurer le Golden Sample
1.1 Connexion initiale
Câble Ethernet entre Mac et CG. IP LAN CG migrée à 192.168.42.1 (pour ne pas conflicter avec une Livebox éventuelle 192.168.1.x).
| Web admin | http://192.168.42.1 (admin / @IOTvalley31) |
| LuvitRED canvas | http://192.168.42.1:8080 |
| SSH | sshpass -p '@IOTvalley31' ssh admin@192.168.42.1 + algos legacy |
1.2 Activer LoRa (Cloud Wizard)
Web admin → Configuration → Cloud Wizard → activer LoRa server + LoRa app + Forwarder EU868.
1.3 Déployer le canvas LuvitRED
Importer dans LuvitRED admin → menu Import → From Clipboard → coller le contenu de deploy_flow.json :
# depuis le Mac
sshpass -p '@IOTvalley31' scp -o KexAlgorithms=+diffie-hellman-group1-sha1 \
-o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa \
deploy_flow.json admin@192.168.42.1:/tmp/
# (optionnel) backup du flow.json existant
sshpass -p '@IOTvalley31' ssh -o ... admin@192.168.42.1 \
"cp /etc/luvitred/flow.json /etc/luvitred/flow.json.bak.$(date +%s)"
1.4 Set globals via console Lua ou inject startup
Une seule modification du fn_startup_init avec les vraies valeurs Terega :
global.iobase_host = 'iobase.terega.fr'
global.dap_host = 'dap.indaba.io'
global.iobase_site = 'vandellans'
global.iobase_datasource = 'transportation'
global.iobase_metrics_default = '["50001m_iot_pit002","50001m_iot_tt002"]'
global.asystom_url = 'https://advisor.asystom.cloud'
global.asystom_auth_b64 = '<base64(user:password)>'
global.asystom_network = 'cloudgate-terega-01'
global.asystom_client = 'terega'
1.5 Enrôlement DAP (avec Jean-Marc en live)
- Tirer inject
DAP register - Vérifier
DAP_REGISTER_OK device_code=DC...dans le debug - Jean-Marc valide le device dans le portail IoBase
- Tirer inject
DAP get token - Vérifier
DAP_TOKEN_OK+/mnt/data/luvitred/dap_state.jsonécrit
1.6 Test E2E
- Une balise Asystom à proximité, magnet × 3, vérifier Join
- Une trame uplink réelle → tracer la chaîne dans le debug
- POST IoBase 200 visible côté Indaba (Jean-Marc confirme)
- POST Asystom 201 visible côté Advisor (Patrick / Jésus confirme)
- Test offline : débrancher LTE 1 min → trames en queue → rebrancher → replay OK
Phase 2 — Export Golden Sample
2.1 Backup local
# Flow LuvitRED export
curl -b /tmp/lc.cookies http://192.168.42.1:8080/flows > terega-prod-v1.0.flow.json
# Config CG export
http://192.168.42.1 → Configuration → Export → terega-prod-v1.0.tar.gz
# Tokens DAP (NE PAS PARTAGER)
sshpass -p '...' scp ... admin@192.168.42.1:/mnt/data/luvitred/dap_state.json \
./terega-prod-v1.0.dap_state.SECRET.json
2.2 Upload sur CloudGate Universe
Compte IoT Valley → CloudGate Universe → Devices → Configurations → New Version → upload terega-prod-v1.0.tar.gz.
⚠ Compte CloudGate Universe
À ce jour, Pierre n'a pas le compte CloudGate Universe. À demander à Othmane Slaoui (IoT Valley) en amont du déploiement multi-CG.
Phase 3 — Cloner sur d'autres CloudGates
3.1 Provisioning du clone
- Factory reset de la nouvelle CG (web admin → Reset)
- Câble + login admin / @IOTvalley31
- Configuration → Provisioning → Pull from CloudGate Universe → terega-prod-v1.0
- La CG redémarre avec la même config (dont LoRa + forwarder + flow LuvitRED)
3.2 Spécifique au site
Modifier sur la nouvelle CG :
global.cloudgate_device_name→cloudgate-terega-XX(XX = numéro de site)global.iobase_site→ site spécifique (vandellans, nemours, etc.)- Refaire l'enrôlement DAP (le device est nouveau dans IoBase) — Jean-Marc valide
3.3 Enrôler les balises du site
Voir Chap. 05.
Accès distant — frp
Décision tranchée : frp (Fast Reverse Proxy) en TCP reverse. frpc tourne sur la CG, sortie TCP permanente vers un frps public. Permet l'accès SSH + LuvitRED + admin web depuis l'extérieur.
Hosting du frps — 3 options
- VPS Terega : Jean-Marc ouvre un port TCP, hosting interne (idéal mais demande effort IT côté Terega)
- VPS IoT Valley : Othmane héberge (proche du métier, RACI clair)
- VPS White Box (
whiteboxlabs.fr) : Pierre héberge en transitoire (rapide à monter, mais à migrer vers une option "client")
Mise en place frpc sur CG (binaire armv5)
# 1. Récupérer le binaire frp armv5
wget https://github.com/fatedier/frp/releases/.../frp_linux_arm.tar.gz
extract → frpc_linux_arm
# 2. SCP vers la CG
sshpass -p '...' scp -o ... frpc_linux_arm admin@192.168.42.1:/mnt/data/
# 3. Config frpc.toml minimale
[common]
server_addr = whiteboxlabs.fr
server_port = 7000
token = SHARED_SECRET
[ssh]
type = tcp
local_port = 22
remote_port = 6022 # → ssh -p 6022 admin@whiteboxlabs.fr
[admin_web]
type = tcp
local_port = 80
remote_port = 6080
[luvitred]
type = tcp
local_port = 8080
remote_port = 6088
# 4. Service init.d /etc/init.d/frpc
Statut frp
Pas encore déployé. Décision actée + binaire identifié + config esquissée. Reste à : monter le frps (sur quel VPS ?), pousser le frpc + service init.d, tester depuis l'extérieur.
Statut Mission 2 · post-livraison cockpit + docs
| # | Article devis | Statut |
|---|---|---|
| 1 | Uplink push → Asystom | livré + validé |
| 2 | Downlink polling → balise | livré + validé |
| 3 | Payload → IoBase (spec v1.0) | livré + validé |
| 4 | Health → IoBase (11 métriques) | livré + validé |
| 5 | DAP register/Token/refresh | livré + validé (mutex + persist + retry 401) |
| 6 | Historisation 15j offline + replay | livré + validé |
| 7 | Cadrage technique | livré |
| 8 | Workflow + tests intégration | attend prod Terega pour KPI 95% |
| 9 | Procédure création capteurs | livré (Chap. 05) |
| 10 | Documentation livrable | livré (cette doc) |
| 11 | frp accès distant | décision actée, déploiement à faire |
| 12 | Stratégie déploiement multi-CG | documentée, attend compte CloudGate Universe (Othmane) |