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