# Améliorations du Déploiement Incus

## Résumé des Améliorations

Ce document décrit toutes les améliorations apportées au déploiement Incus pour le rendre entièrement fonctionnel et robuste.

## 1. Configuration Réseau Améliorée

### Problèmes résolus
- ✅ Configuration DNS persistante dans les conteneurs
- ✅ Configuration automatique des routes par défaut
- ✅ Activation du DHCP et DNS managé dans le réseau Incus
- ✅ Configuration réseau persistante via systemd-resolved

### Améliorations
- Configuration DNS via `/etc/systemd/resolved.conf.d/dns_servers.conf` pour persistance
- Configuration DNS directe dans `/etc/resolv.conf` pour effet immédiat
- Vérification automatique de la connectivité réseau après configuration
- Support de serveurs DNS multiples (8.8.8.8, 1.1.1.1)

## 2. Script de Build Amélioré

### Problèmes résolus
- ✅ Meilleure gestion des erreurs de compilation
- ✅ Support amélioré de la cross-compilation Rust
- ✅ Logs de build sauvegardés pour débogage
- ✅ Continuation du build même si un service échoue

### Améliorations
- Gestion d'erreurs avec `set -euo pipefail`
- Logs de build sauvegardés dans `/tmp/` pour analyse
- Détection automatique de la disponibilité de la cross-compilation
- Compteur d'erreurs pour afficher le nombre de services ayant échoué
- Messages d'erreur plus informatifs avec chemins de logs

## 3. Script de Déploiement Amélioré

### Problèmes résolus
- ✅ Configuration réseau automatique et persistante
- ✅ Vérification de l'état des conteneurs avant configuration
- ✅ Démarrage automatique des services après déploiement
- ✅ Vérifications de santé après déploiement
- ✅ Gestion robuste des erreurs avec continuation

### Améliorations
- Attente intelligente du démarrage des conteneurs (vérification systemd)
- Configuration réseau complète (IP, route, DNS) en une seule passe
- Vérification de connectivité Internet après configuration réseau
- Démarrage automatique des services systemd après déploiement
- Vérification de l'état des services après démarrage
- Messages d'erreur informatifs avec commandes de débogage

## 4. Configuration Réseau Incus

### Améliorations du Makefile
- Configuration automatique du DHCP dans le réseau
- Configuration automatique du DNS managé
- Vérification et mise à jour de la configuration réseau existante
- Vérification des devices du profil avant ajout

### Configuration réseau
```bash
ipv4.address=10.10.10.1/24
ipv4.nat=true
ipv4.dhcp=true
dns.mode=managed
dns.nameservers=8.8.8.8,1.1.1.1
```

## 5. Commandes de Statut et Vérification

### Nouvelle commande `make incus-status`
- Affichage de l'état de tous les conteneurs
- Statut détaillé de chaque service systemd
- Indicateurs visuels (✅/⚠️) pour l'état des services
- Format lisible et coloré

### Script de vérification amélioré
- Tests de connectivité réseau entre conteneurs
- Tests de connectivité Internet
- Vérification des endpoints de santé des services
- Messages d'erreur plus informatifs
- Gestion des timeouts pour éviter les blocages

## 6. Gestion des Erreurs

### Améliorations générales
- Utilisation de `set -euo pipefail` pour détection d'erreurs stricte
- Messages d'erreur informatifs avec suggestions de correction
- Continuation du déploiement même si un service échoue
- Logs sauvegardés pour analyse post-mortem
- Vérifications de santé après chaque étape critique

## 7. Démarrage Automatique des Services

### Améliorations
- Tous les services démarrent automatiquement après déploiement
- Vérification de l'état des services après démarrage
- Messages d'avertissement si un service ne démarre pas
- Commandes suggérées pour déboguer les problèmes

## 8. Configuration Persistante

### Améliorations
- Configuration DNS persistante via systemd-resolved
- Configuration réseau persistante dans les conteneurs
- Routes configurées automatiquement au démarrage
- IP statiques configurées via Incus et dans le conteneur

## Utilisation

### Déploiement complet
```bash
make deploy-incus
```

### Vérification du statut
```bash
make incus-status
```

### Vérification détaillée
```bash
./config/incus/verify-deployment.sh
```

### Déploiement d'un service spécifique
```bash
./config/incus/deploy-service-native.sh backend-api
```

## Résolution de Problèmes

### Service ne démarre pas
```bash
# Vérifier les logs
incus exec veza-backend-api -- journalctl -u veza-backend-api -n 50

# Vérifier le statut
incus exec veza-backend-api -- systemctl status veza-backend-api
```

### Problème de réseau
```bash
# Vérifier la configuration réseau
incus network show veza-network

# Tester la connectivité
incus exec veza-backend-api -- ping -c 2 8.8.8.8
incus exec veza-backend-api -- ping -c 2 10.10.10.10
```

### Rebuild complet
```bash
# Nettoyer
make incus-stop-all
for container in $(incus list -c n --format csv | grep veza-); do
    incus delete $container --force
done

# Rebuild et redéployer
make deploy-incus
```

## Notes Techniques

- Les conteneurs utilisent Ubuntu 22.04 comme image de base
- Tous les services sont gérés via systemd
- Le réseau utilise des adresses IP statiques pour chaque service
- Le DNS est configuré à la fois via Incus et dans les conteneurs
- Les routes sont configurées automatiquement au démarrage

## Prochaines Améliorations Possibles

- [ ] Support de la haute disponibilité
- [ ] Backup automatique des configurations
- [ ] Monitoring automatique des services
- [ ] Auto-scaling basé sur la charge
- [ ] Support de plusieurs environnements (dev, staging, prod)
