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

7.0 KiB
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

# 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 :

  • .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

# 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

  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)

# 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 .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 ! 🚀