Files
serv_benchmark/docs/DEPLOYMENT.md
Gilles Soulier c67befc549 addon
2026-01-05 16:08:01 +01:00

366 lines
7.0 KiB
Markdown
Executable File

# 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
```bash
# 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
```bash
# 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
```bash
./install.sh
```
Le script crée automatiquement :
- `.env` avec un token API aléatoire sécurisé
- Répertoires `backend/data/` et `uploads/`
- Images Docker
- Conteneurs en arrière-plan
### 3. Vérifier le déploiement
```bash
# 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 :
```bash
# .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
```bash
# Modifier .env
BACKEND_PORT=9000
FRONTEND_PORT=9001
# Redémarrer
docker compose down
docker compose up -d
```
### Reverse Proxy (Nginx/Traefik)
#### Exemple Nginx
```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";
}
}
```
```bash
# 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
```bash
# 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
```bash
# Utilisation des ressources
docker stats
# Espace disque
du -sh backend/data uploads
```
## 🔄 Maintenance
### Backup
```bash
#!/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
```bash
# 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
```bash
# 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
```bash
# 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
1. **Token API** : Utiliser un token fort généré aléatoirement
2. **Firewall** : Limiter l'accès aux ports 8007/8087 au réseau local
3. **Reverse Proxy** : Utiliser HTTPS si exposition Internet
4. **Backup** : Backup régulier de la base et des uploads
5. **Mises à jour** : Maintenir Docker et le système à jour
### Firewall (UFW)
```bash
# 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 :
```bash
# Installer Certbot
sudo apt install certbot python3-certbot-nginx
# Obtenir un certificat
sudo certbot --nginx -d bench.votredomaine.com
```
## 📈 Scaling
### Augmenter les performances
```yaml
# docker-compose.yml
services:
backend:
# ...
deploy:
resources:
limits:
cpus: '2'
memory: 2G
reservations:
cpus: '1'
memory: 1G
```
### Multiple workers
Modifier le Dockerfile backend :
```dockerfile
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8007", "--workers", "4"]
```
## 🐛 Troubleshooting
### Port déjà utilisé
```bash
# 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
```bash
# 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
```bash
# 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 `.md` dans 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.sh` exé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 ! 🚀