| # 🐳 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 | |
| ```bash | |
| # 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 | |
| ```bash | |
| # 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 | |
| ```bash | |
| # 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 : | |
| ```bash | |
| # 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 | |
| ```yaml | |
| 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 : | |
| ```bash | |
| 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 | |
| ```bash | |
| # Logs en temps réel | |
| ./run_docker.sh logs | |
| # Ou avec docker-compose | |
| docker-compose logs -f | |
| ``` | |
| ### Vérifier la santé | |
| ```bash | |
| # Statut du conteneur | |
| ./run_docker.sh status | |
| # Health check | |
| docker inspect waste-classifier-app | grep -A 10 Health | |
| ``` | |
| ### Métriques de performance | |
| ```bash | |
| # 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é** | |
| ```bash | |
| # 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** | |
| ```bash | |
| # Augmenter la limite de mémoire | |
| docker run --memory=4g waste-classifier | |
| ``` | |
| 4. **Conteneur ne démarre pas** | |
| ```bash | |
| # Voir les logs d'erreur | |
| docker-compose logs | |
| # Redémarrer proprement | |
| ./run_docker.sh clean | |
| ./run_docker.sh build | |
| ./run_docker.sh start | |
| ``` | |
| ### Nettoyage | |
| ```bash | |
| # 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 | |
| ```bash | |
| # Build avec optimisations | |
| docker build -t waste-classifier:prod --target production . | |
| ``` | |
| ### 2. Déploiement sur un serveur | |
| ```bash | |
| # 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) | |
| ```nginx | |
| 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 | |
| ```bash | |
| # 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 | |
| ```yaml | |
| # Dans docker-compose.yml | |
| services: | |
| waste-classifier: | |
| deploy: | |
| resources: | |
| limits: | |
| memory: 2G | |
| cpus: '1.0' | |
| ``` | |
| ## 📈 Optimisations | |
| ### 1. Image multi-stage | |
| ```dockerfile | |
| # 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 | |
| ```dockerfile | |
| # Copier requirements.txt d'abord pour utiliser le cache Docker | |
| COPY requirements.txt . | |
| RUN pip install -r requirements.txt | |
| ``` | |
| ### 3. Compression des modèles | |
| ```python | |
| # 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 | |
| ```yaml | |
| # 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 | |
| ```yaml | |
| 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 ! 🐳** | |