script
This commit is contained in:
316
DEPLOYMENT_GUIDE.md
Normal file
316
DEPLOYMENT_GUIDE.md
Normal file
@@ -0,0 +1,316 @@
|
||||
# Guide de Déploiement - Linux BenchTools
|
||||
|
||||
## Modifications Apportées
|
||||
|
||||
### 1. Backend API
|
||||
- ✅ **Schémas Pydantic mis à jour** ([backend/app/schemas/hardware.py](backend/app/schemas/hardware.py))
|
||||
- `RAMInfo` : Ajout de `used_mb`, `free_mb`, `shared_mb`
|
||||
- `StorageDevice` : `capacity_gb` changé de `int` à `float`
|
||||
|
||||
- ✅ **API endpoint mis à jour** ([backend/app/api/benchmark.py](backend/app/api/benchmark.py))
|
||||
- Sauvegarde des nouveaux champs RAM
|
||||
|
||||
- ✅ **Modèles de base de données** ([backend/app/models/](backend/app/models/))
|
||||
- `HardwareSnapshot` : Nouveaux champs RAM
|
||||
- `DiskSMART` : Nouveau modèle pour données SMART (créé mais pas encore utilisé)
|
||||
|
||||
### 2. Docker
|
||||
- ✅ **Service iperf3 ajouté** ([docker-compose.yml](docker-compose.yml))
|
||||
- Port 5201 TCP/UDP exposé
|
||||
|
||||
### 3. Script Client
|
||||
- ✅ **Script bench.sh complètement réécrit** ([scripts/bench.sh](scripts/bench.sh))
|
||||
- Génère le payload JSON directement
|
||||
- Collecte toutes les données hardware
|
||||
- Exécute les benchmarks
|
||||
- Envoie au serveur API
|
||||
|
||||
## Déploiement
|
||||
|
||||
### Étape 1: Arrêter les Services
|
||||
|
||||
```bash
|
||||
cd /home/gilles/Documents/vscode/serv_benchmark
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### Étape 2: Appliquer la Migration Base de Données
|
||||
|
||||
Si la base de données existe déjà :
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
python3 apply_migration.py
|
||||
```
|
||||
|
||||
**OU** si vous préférez partir de zéro (⚠️ PERTE DE DONNÉES) :
|
||||
|
||||
```bash
|
||||
rm -f backend/data/data.db
|
||||
```
|
||||
|
||||
### Étape 3: Démarrer les Services
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
Vérifier les logs :
|
||||
|
||||
```bash
|
||||
docker-compose logs -f backend
|
||||
docker-compose logs iperf3
|
||||
```
|
||||
|
||||
### Étape 4: Tester le Serveur iperf3
|
||||
|
||||
Depuis un client :
|
||||
|
||||
```bash
|
||||
iperf3 -c 10.0.1.97 -p 5201
|
||||
```
|
||||
|
||||
Vous devriez voir le test de bande passante s'exécuter.
|
||||
|
||||
### Étape 5: Exécuter le Script Bench
|
||||
|
||||
Depuis un client Linux :
|
||||
|
||||
```bash
|
||||
# Option 1: Télécharger et exécuter
|
||||
curl -sSL https://gitea.maison43.duckdns.org/gilles/serv_benchmark/raw/branch/main/scripts/bench.sh | sudo bash
|
||||
|
||||
# Option 2: Exécuter localement
|
||||
cd /chemin/vers/serv_benchmark
|
||||
sudo bash scripts/bench.sh
|
||||
```
|
||||
|
||||
**Note** : Le script `bench.sh` a les paramètres serveur codés en dur :
|
||||
- `SERVER_URL="10.0.1.97:8007"`
|
||||
- `API_TOKEN="29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a"`
|
||||
- `IPERF_SERVER="10.0.1.97"`
|
||||
|
||||
Pour les modifier, éditez le fichier ou passez-les en variables d'environnement.
|
||||
|
||||
## Vérification
|
||||
|
||||
### 1. Vérifier la Base de Données
|
||||
|
||||
```bash
|
||||
sqlite3 backend/data/data.db
|
||||
|
||||
# Lister les tables
|
||||
.tables
|
||||
|
||||
# Vérifier les colonnes de hardware_snapshots
|
||||
PRAGMA table_info(hardware_snapshots);
|
||||
|
||||
# Voir les derniers benchmarks
|
||||
SELECT id, device_id, global_score, run_at FROM benchmarks ORDER BY run_at DESC LIMIT 5;
|
||||
|
||||
# Voir les données RAM détaillées
|
||||
SELECT
|
||||
d.hostname,
|
||||
h.ram_total_mb,
|
||||
h.ram_used_mb,
|
||||
h.ram_free_mb,
|
||||
h.ram_shared_mb
|
||||
FROM hardware_snapshots h
|
||||
JOIN devices d ON h.device_id = d.id
|
||||
ORDER BY h.captured_at DESC
|
||||
LIMIT 5;
|
||||
```
|
||||
|
||||
### 2. Vérifier l'API
|
||||
|
||||
```bash
|
||||
# Tester l'endpoint
|
||||
curl http://10.0.1.97:8007/docs
|
||||
|
||||
# Voir les devices
|
||||
curl http://10.0.1.97:8007/api/devices
|
||||
```
|
||||
|
||||
### 3. Consulter le Frontend
|
||||
|
||||
Ouvrir dans un navigateur :
|
||||
```
|
||||
http://10.0.1.97:8087
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Erreur: HTTP 422 "Input should be a valid integer"
|
||||
|
||||
**Solution** : Cette erreur a été corrigée en changeant `capacity_gb` de `int` à `float` dans le schéma.
|
||||
|
||||
Si vous rencontrez encore cette erreur :
|
||||
1. Vérifiez que le backend a bien été redémarré après les modifications
|
||||
2. Vérifiez les logs : `docker-compose logs backend`
|
||||
|
||||
### Port 5201 déjà utilisé
|
||||
|
||||
```bash
|
||||
# Trouver le processus
|
||||
sudo lsof -i :5201
|
||||
|
||||
# Arrêter le service Docker iperf3
|
||||
docker-compose stop iperf3
|
||||
```
|
||||
|
||||
### Script bench.sh ne trouve pas les dépendances
|
||||
|
||||
```bash
|
||||
# Installer manuellement
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y curl jq sysbench fio iperf3 dmidecode smartmontools ethtool
|
||||
```
|
||||
|
||||
### Base de données verrouillée (SQLite locked)
|
||||
|
||||
```bash
|
||||
# Arrêter tous les services
|
||||
docker-compose down
|
||||
|
||||
# Supprimer les locks
|
||||
rm -f backend/data/data.db-shm backend/data/data.db-wal
|
||||
|
||||
# Redémarrer
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## Structure des Données Envoyées
|
||||
|
||||
Le script `bench.sh` envoie un payload JSON avec cette structure :
|
||||
|
||||
```json
|
||||
{
|
||||
"device_identifier": "hostname",
|
||||
"bench_script_version": "1.1.0",
|
||||
"hardware": {
|
||||
"cpu": {
|
||||
"vendor": "GenuineIntel",
|
||||
"model": "Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz",
|
||||
"cores": 4,
|
||||
"threads": 4,
|
||||
...
|
||||
},
|
||||
"ram": {
|
||||
"total_mb": 7771,
|
||||
"used_mb": 6123, // NOUVEAU
|
||||
"free_mb": 923, // NOUVEAU
|
||||
"shared_mb": 760, // NOUVEAU
|
||||
"slots_total": 4,
|
||||
"slots_used": 4,
|
||||
"ecc": false,
|
||||
"layout": [...]
|
||||
},
|
||||
"storage": {
|
||||
"devices": [
|
||||
{
|
||||
"name": "/dev/sda",
|
||||
"type": "SSD",
|
||||
"capacity_gb": 447.1, // FLOAT maintenant
|
||||
...
|
||||
}
|
||||
],
|
||||
"partitions": []
|
||||
},
|
||||
"network": {
|
||||
"interfaces": [...]
|
||||
},
|
||||
"motherboard": {...},
|
||||
"os": {...}
|
||||
},
|
||||
"results": {
|
||||
"cpu": {
|
||||
"events_per_sec": 1206.65,
|
||||
"duration_s": 10.0,
|
||||
"score": 12.06
|
||||
},
|
||||
"memory": {...},
|
||||
"disk": {...},
|
||||
"network": {...},
|
||||
"gpu": null,
|
||||
"global_score": 10.85
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Prochaines Étapes
|
||||
|
||||
### À Implémenter
|
||||
|
||||
1. **Données SMART des disques**
|
||||
- Le modèle `DiskSMART` existe mais n'est pas encore utilisé
|
||||
- Modifier `bench.sh` pour collecter les données SMART
|
||||
- Adapter l'API pour sauvegarder dans `disk_smart_data`
|
||||
|
||||
2. **Wake-on-LAN**
|
||||
- Ajouter le champ dans le schéma `NetworkInterface`
|
||||
- Collecter dans `bench.sh`
|
||||
- Afficher dans le frontend
|
||||
|
||||
3. **Frontend**
|
||||
- Afficher les nouvelles données RAM
|
||||
- Graphiques d'utilisation
|
||||
- Dashboard SMART pour la santé des disques
|
||||
|
||||
4. **Amélioration du script bench.sh**
|
||||
- Supporter les arguments en ligne de commande
|
||||
- Mode verbose/debug
|
||||
- Retry automatique en cas d'échec
|
||||
|
||||
## Logs Utiles
|
||||
|
||||
### Backend
|
||||
```bash
|
||||
docker-compose logs -f backend
|
||||
```
|
||||
|
||||
### iperf3
|
||||
```bash
|
||||
docker-compose logs -f iperf3
|
||||
```
|
||||
|
||||
### Tous les services
|
||||
```bash
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
## Performance
|
||||
|
||||
Le script `bench.sh` prend environ **3-5 minutes** pour :
|
||||
- Collecter toutes les données hardware (30s)
|
||||
- Benchmark CPU (10s)
|
||||
- Benchmark RAM (10s)
|
||||
- Benchmark Disk (2-3 minutes avec fio)
|
||||
- Benchmark Network (optionnel, 20s)
|
||||
|
||||
## Sécurité
|
||||
|
||||
⚠️ **Le token API est codé en dur dans le script** :
|
||||
```bash
|
||||
API_TOKEN="29855796dacf5cfe75ff9b02d6adf3dd0f9c52db5b53e7abfb4c0df7ece1be0a"
|
||||
```
|
||||
|
||||
**Recommandations** :
|
||||
- Changer ce token en production
|
||||
- Utiliser des variables d'environnement
|
||||
- Limiter l'accès au serveur API par IP
|
||||
- Utiliser HTTPS en production
|
||||
|
||||
## Support
|
||||
|
||||
Pour toute question ou problème :
|
||||
1. Consulter les logs Docker
|
||||
2. Vérifier le fichier [IMPLEMENTATION_STATUS.md](IMPLEMENTATION_STATUS.md)
|
||||
3. Tester manuellement avec `curl` :
|
||||
|
||||
```bash
|
||||
# Test manuel de l'API
|
||||
curl -X POST http://10.0.1.97:8007/api/benchmark \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
-d @result.json
|
||||
```
|
||||
Reference in New Issue
Block a user