✨ Features: - Backend FastAPI complete (25 Python files) - 5 SQLAlchemy models (Device, HardwareSnapshot, Benchmark, Link, Document) - Pydantic schemas for validation - 4 API routers (benchmark, devices, links, docs) - Authentication with Bearer token - Automatic score calculation - File upload support - Frontend web interface (13 files) - 4 HTML pages (Dashboard, Devices, Device Detail, Settings) - 7 JavaScript modules - Monokai dark theme CSS - Responsive design - Complete CRUD operations - Client benchmark script (500+ lines Bash) - Hardware auto-detection - CPU, RAM, Disk, Network benchmarks - JSON payload generation - Robust error handling - Docker deployment - Optimized Dockerfile - docker-compose with 2 services - Persistent volumes - Environment variables - Documentation & Installation - Automated install.sh script - README, QUICKSTART, DEPLOYMENT guides - Complete API documentation - Project structure documentation 📊 Stats: - ~60 files created - ~5000 lines of code - Full MVP feature set implemented 🚀 Ready for production deployment! 🤖 Generated with Claude Code Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
7.0 KiB
7.0 KiB
Deployment Guide - Linux BenchTools
Guide de déploiement complet pour Linux BenchTools.
📋 Prérequis
Serveur hôte
- OS : Linux (Debian 11+, Ubuntu 20.04+ recommandé)
- RAM : Minimum 512 MB (1 GB recommandé)
- Disque : Minimum 2 GB d'espace libre
- Réseau : Accès réseau local pour les clients
Logiciels requis
- Docker 20.10+
- Docker Compose plugin 2.0+
- Git (optionnel, pour clonage)
Installation des prérequis
# Installer Docker
curl -fsSL https://get.docker.com | sh
# Ajouter l'utilisateur au groupe docker
sudo usermod -aG docker $USER
# Se déconnecter/reconnecter pour appliquer les changements
# ou utiliser:
newgrp docker
# Vérifier l'installation
docker --version
docker compose version
🚀 Déploiement Standard
1. Récupérer le code
# Via Git
git clone https://gitea.maison43.duckdns.org/gilles/linux-benchtools.git
cd linux-benchtools
# Ou télécharger et extraire l'archive
2. Exécuter l'installation
./install.sh
Le script crée automatiquement :
.envavec un token API aléatoire sécurisé- Répertoires
backend/data/etuploads/ - Images Docker
- Conteneurs en arrière-plan
3. Vérifier le déploiement
# Vérifier les conteneurs
docker compose ps
# Tester le backend
curl http://localhost:8007/api/health
# Tester le frontend
curl -I http://localhost:8087
🔧 Déploiement Personnalisé
Configuration avancée
Créez un fichier .env personnalisé avant l'installation :
# .env
API_TOKEN=votre-token-personnalise-securise
DATABASE_URL=sqlite:////app/data/data.db
UPLOAD_DIR=/app/uploads
BACKEND_PORT=8007
FRONTEND_PORT=8087
Ports personnalisés
# Modifier .env
BACKEND_PORT=9000
FRONTEND_PORT=9001
# Redémarrer
docker compose down
docker compose up -d
Reverse Proxy (Nginx/Traefik)
Exemple Nginx
# /etc/nginx/sites-available/benchtools
upstream benchtools_backend {
server localhost:8007;
}
upstream benchtools_frontend {
server localhost:8087;
}
server {
listen 80;
server_name bench.maison43.local;
# Frontend
location / {
proxy_pass http://benchtools_frontend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Backend API
location /api/ {
proxy_pass http://benchtools_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# WebSocket support (si besoin futur)
location /ws/ {
proxy_pass http://benchtools_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# Activer le site
sudo ln -s /etc/nginx/sites-available/benchtools /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
📊 Monitoring et Logs
Consulter les logs
# Tous les services
docker compose logs -f
# Backend uniquement
docker compose logs -f backend
# Dernières 100 lignes
docker compose logs --tail=100 backend
# Logs depuis une date
docker compose logs --since 2025-12-07T10:00:00 backend
Métriques système
# Utilisation des ressources
docker stats
# Espace disque
du -sh backend/data uploads
🔄 Maintenance
Backup
#!/bin/bash
# backup.sh
BACKUP_DIR="./backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
# Backup base de données
docker compose exec backend sqlite3 /app/data/data.db ".backup /app/data/backup.db"
docker cp linux_benchtools_backend:/app/data/backup.db "$BACKUP_DIR/"
# Backup uploads
cp -r uploads "$BACKUP_DIR/"
# Backup .env
cp .env "$BACKUP_DIR/"
echo "Backup créé dans $BACKUP_DIR"
Restore
# Arrêter les services
docker compose down
# Restaurer la base
cp backup/data.db backend/data/data.db
# Restaurer les uploads
cp -r backup/uploads ./
# Redémarrer
docker compose up -d
Mise à jour
# Récupérer les dernières modifications
git pull
# Reconstruire et redémarrer
docker compose up -d --build
# Ou sans interruption (rolling update)
docker compose build
docker compose up -d --no-deps --build backend
docker compose up -d --no-deps --build frontend
Nettoyage
# Supprimer les anciens benchmarks (exemple : > 6 mois)
docker compose exec backend sqlite3 /app/data/data.db \
"DELETE FROM benchmarks WHERE run_at < datetime('now', '-6 months');"
# Nettoyer les images Docker inutilisées
docker image prune -a
# Nettoyer les volumes inutilisés
docker volume prune
🔒 Sécurité
Recommandations
- Token API : Utiliser un token fort généré aléatoirement
- Firewall : Limiter l'accès aux ports 8007/8087 au réseau local
- Reverse Proxy : Utiliser HTTPS si exposition Internet
- Backup : Backup régulier de la base et des uploads
- Mises à jour : Maintenir Docker et le système à jour
Firewall (UFW)
# Autoriser seulement le réseau local
sudo ufw allow from 192.168.1.0/24 to any port 8007
sudo ufw allow from 192.168.1.0/24 to any port 8087
HTTPS avec Let's Encrypt
Si exposé sur Internet :
# Installer Certbot
sudo apt install certbot python3-certbot-nginx
# Obtenir un certificat
sudo certbot --nginx -d bench.votredomaine.com
📈 Scaling
Augmenter les performances
# docker-compose.yml
services:
backend:
# ...
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '1'
memory: 1G
Multiple workers
Modifier le Dockerfile backend :
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8007", "--workers", "4"]
🐛 Troubleshooting
Port déjà utilisé
# Trouver le processus
sudo lsof -i :8007
# Changer le port dans .env
BACKEND_PORT=8008
# Redémarrer
docker compose down && docker compose up -d
Base de données verrouillée
# Arrêter le backend
docker compose stop backend
# Vérifier les processus SQLite
docker compose exec backend sh -c "ps aux | grep sqlite"
# Redémarrer
docker compose start backend
Espace disque plein
# Nettoyer les logs Docker
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
# Nettoyer les anciens benchmarks
docker compose exec backend sqlite3 /app/data/data.db \
"DELETE FROM benchmarks WHERE run_at < datetime('now', '-3 months');"
📞 Support
- Documentation : Fichiers
.mddans le dépôt - Issues : Gitea repository
- Logs :
docker compose logs
✅ Checklist de déploiement
- Docker et Docker Compose installés
- Ports 8007 et 8087 disponibles
- Espaces disque suffisant (>2GB)
install.shexécuté avec succès- Health check OK (
curl localhost:8007/api/health) - Frontend accessible (
http://localhost:8087) - Token API noté en lieu sûr
- Backup configuré
- Firewall configuré (optionnel)
- Reverse proxy configuré (optionnel)
Bon déploiement ! 🚀