waste-classifier / README_DOCKER.md
360TechEnv's picture
Upload README_DOCKER.md with huggingface_hub
6559561 verified

🐳 Déploiement Docker - Classificateur de Déchets IA

Guide complet pour dockeriser et déployer l'interface de classification de déchets avec Docker.

📋 Prérequis

  1. Docker : Installé sur votre machine
  2. Docker Compose : Pour la gestion des services
  3. Modèles entraînés : Assurez-vous que vos modèles v1 et v2 sont disponibles

🚀 Démarrage rapide

1. Construction et lancement automatique

# Construire l'image et démarrer le conteneur
./run_docker.sh build && ./run_docker.sh start

# Ou en une seule commande
docker-compose up --build -d

2. Accès à l'interface

Ouvrez votre navigateur à l'adresse : http://localhost:8501

🔧 Commandes disponibles

Script de gestion

# Construire l'image Docker
./run_docker.sh build

# Démarrer le conteneur
./run_docker.sh start

# Arrêter le conteneur
./run_docker.sh stop

# Redémarrer le conteneur
./run_docker.sh restart

# Voir les logs en temps réel
./run_docker.sh logs

# Vérifier le statut
./run_docker.sh status

# Nettoyer les ressources Docker
./run_docker.sh clean

# Afficher l'aide
./run_docker.sh help

Commandes Docker Compose

# Démarrer en arrière-plan
docker-compose up -d

# Voir les logs
docker-compose logs -f

# Arrêter
docker-compose down

# Reconstruire et redémarrer
docker-compose up --build -d

# Voir le statut
docker-compose ps

📁 Structure des fichiers

code/
├── app.py                    # Interface Streamlit principale
├── requirements.txt          # Dépendances Python
├── Dockerfile               # Configuration Docker
├── docker-compose.yml       # Configuration Docker Compose
├── .dockerignore           # Fichiers à ignorer lors du build
├── run_docker.sh           # Script de gestion Docker
├── README_DOCKER.md        # Cette documentation
└── models/                 # Dossier des modèles (créé automatiquement)
    ├── waste_classifier_v1.h5
    └── waste_classifier_v2.h5

⚙️ Configuration

Variables d'environnement

Vous pouvez configurer l'application via des variables d'environnement :

# URLs des modèles
export MODEL_V1_URL="https://votre-url.com/model_v1.h5"
export MODEL_V2_URL="https://votre-url.com/model_v2.h5"

# Port de l'application
export STREAMLIT_SERVER_PORT=8501

Fichier docker-compose.yml

version: '3.8'

services:
  waste-classifier:
    build: .
    ports:
      - "8501:8501"
    volumes:
      - model_cache:/app/models
    environment:
      - MODEL_V1_URL=https://votre-url.com/model_v1.h5
      - MODEL_V2_URL=https://votre-url.com/model_v2.h5
    restart: unless-stopped

🔄 Gestion des modèles

Option 1 : Modèles locaux

  1. Créez le dossier models/
  2. Copiez vos modèles :
    mkdir -p models
    cp training_output/training/models/waste_classifier_best.h5 models/waste_classifier_v1.h5
    cp training_output_v2/v2.0/training/v2.0/models/waste_classifier_v2.0_best.h5 models/waste_classifier_v2.h5
    

Option 2 : Téléchargement automatique

L'application télécharge automatiquement les modèles depuis les URLs configurées.

Option 3 : Volume Docker

Les modèles sont persistés dans un volume Docker pour éviter les re-téléchargements.

📊 Monitoring et logs

Voir les logs

# Logs en temps réel
./run_docker.sh logs

# Ou avec docker-compose
docker-compose logs -f

Vérifier la santé

# Statut du conteneur
./run_docker.sh status

# Health check
docker inspect waste-classifier-app | grep -A 10 Health

Métriques de performance

# Utilisation des ressources
docker stats waste-classifier-app

# Informations détaillées
docker inspect waste-classifier-app

🐛 Dépannage

Problèmes courants

  1. Port déjà utilisé

    # Changer le port dans docker-compose.yml
    ports:
      - "8502:8501"  # Utiliser le port 8502
    
  2. Modèles non trouvés

    • Vérifiez que les modèles sont dans le dossier models/
    • Vérifiez les URLs dans les variables d'environnement
  3. Erreur de mémoire

    # Augmenter la limite de mémoire
    docker run --memory=4g waste-classifier
    
  4. Conteneur ne démarre pas

    # Voir les logs d'erreur
    docker-compose logs
    
    # Redémarrer proprement
    ./run_docker.sh clean
    ./run_docker.sh build
    ./run_docker.sh start
    

Nettoyage

# Nettoyer tout (conteneurs, images, volumes)
./run_docker.sh clean

# Nettoyer seulement les conteneurs arrêtés
docker container prune -f

# Nettoyer les images non utilisées
docker image prune -f

🚀 Déploiement en production

1. Build pour la production

# Build avec optimisations
docker build -t waste-classifier:prod --target production .

2. Déploiement sur un serveur

# Copier les fichiers sur le serveur
scp -r . user@server:/path/to/app/

# Sur le serveur
cd /path/to/app
./run_docker.sh build
./run_docker.sh start

3. Configuration Nginx (optionnel)

server {
    listen 80;
    server_name votre-domaine.com;
    
    location / {
        proxy_pass http://localhost:8501;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

🔒 Sécurité

1. Utilisateur non-root

Le conteneur s'exécute avec un utilisateur non-root pour la sécurité.

2. Variables d'environnement sensibles

# Utiliser un fichier .env
echo "MODEL_V1_URL=https://votre-url-secure.com/model_v1.h5" > .env
echo "MODEL_V2_URL=https://votre-url-secure.com/model_v2.h5" >> .env

3. Limitation des ressources

# Dans docker-compose.yml
services:
  waste-classifier:
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '1.0'

📈 Optimisations

1. Image multi-stage

# Stage 1: Build
FROM python:3.11-slim as builder
# ... installation des dépendances

# Stage 2: Production
FROM python:3.11-slim
# ... copie des fichiers nécessaires

2. Cache des dépendances

# Copier requirements.txt d'abord pour utiliser le cache Docker
COPY requirements.txt .
RUN pip install -r requirements.txt

3. Compression des modèles

# Dans votre script d'entraînement
model.save('model_compressed.h5', include_optimizer=False)

🌐 Intégration avec d'autres services

1. Base de données

# Ajouter dans docker-compose.yml
services:
  database:
    image: postgres:13
    environment:
      POSTGRES_DB: waste_classifier
    volumes:
      - db_data:/var/lib/postgresql/data

  waste-classifier:
    depends_on:
      - database
    environment:
      - DATABASE_URL=postgresql://user:pass@database:5432/waste_classifier

2. Redis pour le cache

services:
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"

  waste-classifier:
    depends_on:
      - redis
    environment:
      - REDIS_URL=redis://redis:6379

📞 Support

  • Logs : ./run_docker.sh logs
  • Statut : ./run_docker.sh status
  • Nettoyage : ./run_docker.sh clean

Bon déploiement Docker ! 🐳