/ docs / deploy-prerelease.md
deploy-prerelease.md
  1  # Procédure de Déploiement Préversion — Mesh 17711
  2  
  3  Version: v0.2.1-preview
  4  Date: 2026-03-16
  5  Cible: 2 nœuds AWS eu-west-3 (Paris)
  6  
  7  ## Prérequis
  8  
  9  - Accès SSH aux nœuds (clé Ed25519, user `ops`)
 10  - AWS CLI configuré (profil fmichaud, région eu-west-3)
 11  - Rust toolchain (stable, avec target release)
 12  - `b3sum` installé (BLAKE3 checksums)
 13  
 14  ## Phase 1 — Préparation locale
 15  
 16  ### 1.1 Version bump
 17  
 18  ```bash
 19  # Vérifier la version courante
 20  grep '^version' Cargo.toml
 21  
 22  # Bump si nécessaire (éditer [workspace.package].version)
 23  # Puis régénérer le lock
 24  cargo check --workspace
 25  ```
 26  
 27  ### 1.2 Tests & qualité
 28  
 29  ```bash
 30  # Tests complets
 31  cargo test --workspace
 32  
 33  # Lint
 34  cargo clippy --workspace
 35  
 36  # Vérifier que tous les types suivent la convention 17711
 37  # (17711 après le premier mot CamelCase)
 38  ```
 39  
 40  ### 1.3 Build release
 41  
 42  ```bash
 43  cargo build --release
 44  
 45  # Vérifier les binaires produits
 46  ls -lh target/release/org-17711-mesh-node
 47  ls -lh target/release/org-17711-mesh-cli
 48  
 49  # Checksums BLAKE3
 50  b3sum target/release/org-17711-mesh-node > checksums.txt
 51  b3sum target/release/org-17711-mesh-cli >> checksums.txt
 52  cat checksums.txt
 53  ```
 54  
 55  ## Phase 2 — Vérification infrastructure AWS
 56  
 57  ### 2.1 État des instances
 58  
 59  ```bash
 60  aws ec2 describe-instances --region eu-west-3 \
 61    --instance-ids i-0f76ab47c99d01c99 i-09f04d3ab3e942d04 \
 62    --query 'Reservations[].Instances[].[InstanceId,State.Name,PublicIpAddress]' \
 63    --output table
 64  ```
 65  
 66  Résultat attendu :
 67  | Instance | Type | État | IP |
 68  |---|---|---|---|
 69  | i-0f76ab47c99d01c99 | t3a.medium | running | 13.36.198.97 |
 70  | i-09f04d3ab3e942d04 | t3a.medium | running | 13.39.158.253 |
 71  
 72  ### 2.2 Test SSH
 73  
 74  ```bash
 75  ssh ops@13.36.198.97 'hostname && uname -r'   # node1
 76  ssh ops@35.180.2.36 'hostname && uname -r'      # node2
 77  ```
 78  
 79  ### 2.3 État CoreDNS
 80  
 81  ```bash
 82  ssh ops@13.36.198.97 'systemctl --user status mesh-coredns'
 83  ```
 84  
 85  ## Phase 3 — Déploiement
 86  
 87  ### 3.1 Upload binaires
 88  
 89  ```bash
 90  # Node 1
 91  scp target/release/org-17711-mesh-node ops@15.237.130.70:~/bin/
 92  scp target/release/org-17711-mesh-cli  ops@15.237.130.70:~/bin/
 93  
 94  # Node 2
 95  scp target/release/org-17711-mesh-node ops@35.180.2.36:~/bin/
 96  scp target/release/org-17711-mesh-cli  ops@35.180.2.36:~/bin/
 97  
 98  # Checksums pour vérification
 99  scp checksums.txt ops@15.237.130.70:~/
100  scp checksums.txt ops@35.180.2.36:~/
101  ```
102  
103  ### 3.2 Vérification intégrité sur les nœuds
104  
105  ```bash
106  # Sur chaque nœud
107  ssh ops@15.237.130.70 'cd ~ && b3sum -c checksums.txt'
108  ssh ops@35.180.2.36   'cd ~ && b3sum -c checksums.txt'
109  ```
110  
111  ### 3.3 Restart services
112  
113  ```bash
114  # Node 1
115  ssh ops@15.237.130.70 << 'EOF'
116  systemctl --user daemon-reload
117  systemctl --user restart mesh-node
118  systemctl --user status mesh-node
119  EOF
120  
121  # Node 2
122  ssh ops@35.180.2.36 << 'EOF'
123  systemctl --user daemon-reload
124  systemctl --user restart mesh-node
125  systemctl --user status mesh-node
126  EOF
127  ```
128  
129  ## Phase 4 — Validation
130  
131  ### 4.1 Health check
132  
133  ```bash
134  # Node 1
135  curl -s http://15.237.130.70:17855/health | jq
136  
137  # Node 2
138  curl -s http://35.180.2.36:17855/health | jq
139  ```
140  
141  Réponse attendue :
142  ```json
143  {
144    "status": "healthy",
145    "version": "0.2.1",
146    "node": "node-tygjh62h"
147  }
148  ```
149  
150  ### 4.2 P2P connectivity
151  
152  ```bash
153  # Node 1 voit node 2 ?
154  ssh ops@15.237.130.70 '~/bin/org-17711-mesh-cli status'
155  
156  # Node 2 voit node 1 ?
157  ssh ops@35.180.2.36 '~/bin/org-17711-mesh-cli status'
158  ```
159  
160  ### 4.3 DNS registration
161  
162  ```bash
163  # Vérifier que les nœuds sont enregistrés dans CoreDNS
164  dig @13.36.198.97 node-tygjh62h.mesh.17711.org A +short
165  dig @13.36.198.97 node-4ht8bfek.mesh.17711.org A +short
166  ```
167  
168  ### 4.4 Version check
169  
170  ```bash
171  ssh ops@15.237.130.70 '~/bin/org-17711-mesh-cli --version'
172  ssh ops@35.180.2.36   '~/bin/org-17711-mesh-cli --version'
173  # Doit afficher v0.2.1
174  ```
175  
176  ## Phase 5 — Migration progressive vers Radicle (futur)
177  
178  ### Étape actuelle : SCP direct
179  
180  ```
181  Local build → SCP → Restart service
182  ```
183  
184  ### Étape intermédiaire : Radicle + SCP
185  
186  ```
187  Local build → rad push (artefact) → SCP depuis seed → Restart
188  ```
189  
190  ### Cible : Radicle-native
191  
192  ```
193  Local build → rad push → Seed notifie le nœud → Pull auto → Restart auto
194  ```
195  
196  Le passage se fera progressivement :
197  1. D'abord les sources sur Radicle (clonage, patches)
198  2. Puis les artefacts build sur Radicle (binaires signés)
199  3. Enfin le déploiement auto-piloté par les seeds Radicle des nœuds
200  
201  ## Rollback
202  
203  En cas de problème après déploiement :
204  
205  ```bash
206  # Garder les anciens binaires avant deploy
207  ssh ops@15.237.130.70 'cp ~/bin/org-17711-mesh-node ~/bin/org-17711-mesh-node.bak'
208  
209  # Rollback
210  ssh ops@15.237.130.70 << 'EOF'
211  cp ~/bin/org-17711-mesh-node.bak ~/bin/org-17711-mesh-node
212  systemctl --user restart mesh-node
213  systemctl --user status mesh-node
214  EOF
215  ```
216  
217  ## Ports de référence (Fibonacci)
218  
219  | Service | Port | Formule |
220  |---|---|---|
221  | libp2p P2P | 17711 | F(22) |
222  | CoreDNS | 17800 | F(22) + F(11) |
223  | Gateway API | 17855 | F(22) + F(12) |
224  | Prometheus | 17944 | F(22) + F(13) |
225  | Storage/IPFS | 18088 | F(22) + F(14) |
226  
227  ## Checklist finale
228  
229  - [ ] Version bump v0.2.1 dans Cargo.toml
230  - [ ] `cargo test --workspace` — tous verts
231  - [ ] `cargo build --release` — succès
232  - [ ] Checksums BLAKE3 calculés
233  - [ ] Instances AWS running
234  - [ ] SSH accessible sur les 2 nœuds
235  - [ ] Binaires uploadés + intégrité vérifiée
236  - [ ] Services redémarrés
237  - [ ] Health check OK sur les 2 nœuds
238  - [ ] P2P connectivity OK
239  - [ ] DNS registration OK
240  - [ ] Version v0.2.1 confirmée