6.9 KiB
Guide de Déploiement - Linux BenchTools
Modifications Apportées
1. Backend API
-
✅ Schémas Pydantic mis à jour (backend/app/schemas/hardware.py)
RAMInfo: Ajout deused_mb,free_mb,shared_mbStorageDevice:capacity_gbchangé deintàfloat
-
✅ API endpoint mis à jour (backend/app/api/benchmark.py)
- Sauvegarde des nouveaux champs RAM
-
✅ Modèles de base de données (backend/app/models/)
HardwareSnapshot: Nouveaux champs RAMDiskSMART: Nouveau modèle pour données SMART (créé mais pas encore utilisé)
2. Docker
- ✅ Service iperf3 ajouté (docker-compose.yml)
- Port 5201 TCP/UDP exposé
3. Script Client
- ✅ Script bench.sh complètement réécrit (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
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à :
cd backend
python3 apply_migration.py
OU si vous préférez partir de zéro (⚠️ PERTE DE DONNÉES) :
rm -f backend/data/data.db
Étape 3: Démarrer les Services
docker-compose up -d
Vérifier les logs :
docker-compose logs -f backend
docker-compose logs iperf3
Étape 4: Tester le Serveur iperf3
Depuis un client :
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 :
# 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
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
# 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 :
- Vérifiez que le backend a bien été redémarré après les modifications
- Vérifiez les logs :
docker-compose logs backend
Port 5201 déjà utilisé
# 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
# 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)
# 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 :
{
"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
-
Données SMART des disques
- Le modèle
DiskSMARTexiste mais n'est pas encore utilisé - Modifier
bench.shpour collecter les données SMART - Adapter l'API pour sauvegarder dans
disk_smart_data
- Le modèle
-
Wake-on-LAN
- Ajouter le champ dans le schéma
NetworkInterface - Collecter dans
bench.sh - Afficher dans le frontend
- Ajouter le champ dans le schéma
-
Frontend
- Afficher les nouvelles données RAM
- Graphiques d'utilisation
- Dashboard SMART pour la santé des disques
-
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
docker-compose logs -f backend
iperf3
docker-compose logs -f iperf3
Tous les services
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 :
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 :
- Consulter les logs Docker
- Vérifier le fichier IMPLEMENTATION_STATUS.md
- Tester manuellement avec
curl:
# 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