06 Déploiement

Première CloudGate (Golden Sample), industrialisation multi-CG, accès distant frp

Stratégie en 3 phases

  1. Pilote (Golden Sample) : 1 CloudGate parfaitement configurée à La Bégude, validée end-to-end avec Jean-Marc & Jésus
  2. Export config + flow LuvitRED sur CloudGate Universe (cloud Option) → version "terega-prod-v1.0"
  3. 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 adminhttp://192.168.42.1 (admin / @IOTvalley31)
LuvitRED canvashttp://192.168.42.1:8080
SSHsshpass -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)

  1. Tirer inject DAP register
  2. Vérifier DAP_REGISTER_OK device_code=DC... dans le debug
  3. Jean-Marc valide le device dans le portail IoBase
  4. Tirer inject DAP get token
  5. Vérifier DAP_TOKEN_OK + /mnt/data/luvitred/dap_state.json écrit

1.6 Test E2E

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

  1. Factory reset de la nouvelle CG (web admin → Reset)
  2. Câble + login admin / @IOTvalley31
  3. Configuration → Provisioning → Pull from CloudGate Universe → terega-prod-v1.0
  4. 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 :

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

  1. VPS Terega : Jean-Marc ouvre un port TCP, hosting interne (idéal mais demande effort IT côté Terega)
  2. VPS IoT Valley : Othmane héberge (proche du métier, RACI clair)
  3. 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 devisStatut
1Uplink push → Asystomlivré + validé
2Downlink polling → baliselivré + validé
3Payload → IoBase (spec v1.0)livré + validé
4Health → IoBase (11 métriques)livré + validé
5DAP register/Token/refreshlivré + validé (mutex + persist + retry 401)
6Historisation 15j offline + replaylivré + validé
7Cadrage techniquelivré
8Workflow + tests intégrationattend prod Terega pour KPI 95%
9Procédure création capteurslivré (Chap. 05)
10Documentation livrablelivré (cette doc)
11frp accès distantdécision actée, déploiement à faire
12Stratégie déploiement multi-CGdocumentée, attend compte CloudGate Universe (Othmane)