360TechEnv commited on
Commit
6559561
·
verified ·
1 Parent(s): ce475c5

Upload README_DOCKER.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README_DOCKER.md +359 -0
README_DOCKER.md ADDED
@@ -0,0 +1,359 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 🐳 Déploiement Docker - Classificateur de Déchets IA
2
+
3
+ Guide complet pour dockeriser et déployer l'interface de classification de déchets avec Docker.
4
+
5
+ ## 📋 Prérequis
6
+
7
+ 1. **Docker** : Installé sur votre machine
8
+ 2. **Docker Compose** : Pour la gestion des services
9
+ 3. **Modèles entraînés** : Assurez-vous que vos modèles v1 et v2 sont disponibles
10
+
11
+ ## 🚀 Démarrage rapide
12
+
13
+ ### 1. Construction et lancement automatique
14
+
15
+ ```bash
16
+ # Construire l'image et démarrer le conteneur
17
+ ./run_docker.sh build && ./run_docker.sh start
18
+
19
+ # Ou en une seule commande
20
+ docker-compose up --build -d
21
+ ```
22
+
23
+ ### 2. Accès à l'interface
24
+
25
+ Ouvrez votre navigateur à l'adresse : `http://localhost:8501`
26
+
27
+ ## 🔧 Commandes disponibles
28
+
29
+ ### Script de gestion
30
+
31
+ ```bash
32
+ # Construire l'image Docker
33
+ ./run_docker.sh build
34
+
35
+ # Démarrer le conteneur
36
+ ./run_docker.sh start
37
+
38
+ # Arrêter le conteneur
39
+ ./run_docker.sh stop
40
+
41
+ # Redémarrer le conteneur
42
+ ./run_docker.sh restart
43
+
44
+ # Voir les logs en temps réel
45
+ ./run_docker.sh logs
46
+
47
+ # Vérifier le statut
48
+ ./run_docker.sh status
49
+
50
+ # Nettoyer les ressources Docker
51
+ ./run_docker.sh clean
52
+
53
+ # Afficher l'aide
54
+ ./run_docker.sh help
55
+ ```
56
+
57
+ ### Commandes Docker Compose
58
+
59
+ ```bash
60
+ # Démarrer en arrière-plan
61
+ docker-compose up -d
62
+
63
+ # Voir les logs
64
+ docker-compose logs -f
65
+
66
+ # Arrêter
67
+ docker-compose down
68
+
69
+ # Reconstruire et redémarrer
70
+ docker-compose up --build -d
71
+
72
+ # Voir le statut
73
+ docker-compose ps
74
+ ```
75
+
76
+ ## 📁 Structure des fichiers
77
+
78
+ ```
79
+ code/
80
+ ├── app.py # Interface Streamlit principale
81
+ ├── requirements.txt # Dépendances Python
82
+ ├── Dockerfile # Configuration Docker
83
+ ├── docker-compose.yml # Configuration Docker Compose
84
+ ├── .dockerignore # Fichiers à ignorer lors du build
85
+ ├── run_docker.sh # Script de gestion Docker
86
+ ├── README_DOCKER.md # Cette documentation
87
+ └── models/ # Dossier des modèles (créé automatiquement)
88
+ ├── waste_classifier_v1.h5
89
+ └── waste_classifier_v2.h5
90
+ ```
91
+
92
+ ## ⚙️ Configuration
93
+
94
+ ### Variables d'environnement
95
+
96
+ Vous pouvez configurer l'application via des variables d'environnement :
97
+
98
+ ```bash
99
+ # URLs des modèles
100
+ export MODEL_V1_URL="https://votre-url.com/model_v1.h5"
101
+ export MODEL_V2_URL="https://votre-url.com/model_v2.h5"
102
+
103
+ # Port de l'application
104
+ export STREAMLIT_SERVER_PORT=8501
105
+ ```
106
+
107
+ ### Fichier docker-compose.yml
108
+
109
+ ```yaml
110
+ version: '3.8'
111
+
112
+ services:
113
+ waste-classifier:
114
+ build: .
115
+ ports:
116
+ - "8501:8501"
117
+ volumes:
118
+ - model_cache:/app/models
119
+ environment:
120
+ - MODEL_V1_URL=https://votre-url.com/model_v1.h5
121
+ - MODEL_V2_URL=https://votre-url.com/model_v2.h5
122
+ restart: unless-stopped
123
+ ```
124
+
125
+ ## 🔄 Gestion des modèles
126
+
127
+ ### Option 1 : Modèles locaux
128
+
129
+ 1. Créez le dossier `models/`
130
+ 2. Copiez vos modèles :
131
+ ```bash
132
+ mkdir -p models
133
+ cp training_output/training/models/waste_classifier_best.h5 models/waste_classifier_v1.h5
134
+ cp training_output_v2/v2.0/training/v2.0/models/waste_classifier_v2.0_best.h5 models/waste_classifier_v2.h5
135
+ ```
136
+
137
+ ### Option 2 : Téléchargement automatique
138
+
139
+ L'application télécharge automatiquement les modèles depuis les URLs configurées.
140
+
141
+ ### Option 3 : Volume Docker
142
+
143
+ Les modèles sont persistés dans un volume Docker pour éviter les re-téléchargements.
144
+
145
+ ## 📊 Monitoring et logs
146
+
147
+ ### Voir les logs
148
+
149
+ ```bash
150
+ # Logs en temps réel
151
+ ./run_docker.sh logs
152
+
153
+ # Ou avec docker-compose
154
+ docker-compose logs -f
155
+ ```
156
+
157
+ ### Vérifier la santé
158
+
159
+ ```bash
160
+ # Statut du conteneur
161
+ ./run_docker.sh status
162
+
163
+ # Health check
164
+ docker inspect waste-classifier-app | grep -A 10 Health
165
+ ```
166
+
167
+ ### Métriques de performance
168
+
169
+ ```bash
170
+ # Utilisation des ressources
171
+ docker stats waste-classifier-app
172
+
173
+ # Informations détaillées
174
+ docker inspect waste-classifier-app
175
+ ```
176
+
177
+ ## 🐛 Dépannage
178
+
179
+ ### Problèmes courants
180
+
181
+ 1. **Port déjà utilisé**
182
+ ```bash
183
+ # Changer le port dans docker-compose.yml
184
+ ports:
185
+ - "8502:8501" # Utiliser le port 8502
186
+ ```
187
+
188
+ 2. **Modèles non trouvés**
189
+ - Vérifiez que les modèles sont dans le dossier `models/`
190
+ - Vérifiez les URLs dans les variables d'environnement
191
+
192
+ 3. **Erreur de mémoire**
193
+ ```bash
194
+ # Augmenter la limite de mémoire
195
+ docker run --memory=4g waste-classifier
196
+ ```
197
+
198
+ 4. **Conteneur ne démarre pas**
199
+ ```bash
200
+ # Voir les logs d'erreur
201
+ docker-compose logs
202
+
203
+ # Redémarrer proprement
204
+ ./run_docker.sh clean
205
+ ./run_docker.sh build
206
+ ./run_docker.sh start
207
+ ```
208
+
209
+ ### Nettoyage
210
+
211
+ ```bash
212
+ # Nettoyer tout (conteneurs, images, volumes)
213
+ ./run_docker.sh clean
214
+
215
+ # Nettoyer seulement les conteneurs arrêtés
216
+ docker container prune -f
217
+
218
+ # Nettoyer les images non utilisées
219
+ docker image prune -f
220
+ ```
221
+
222
+ ## 🚀 Déploiement en production
223
+
224
+ ### 1. Build pour la production
225
+
226
+ ```bash
227
+ # Build avec optimisations
228
+ docker build -t waste-classifier:prod --target production .
229
+ ```
230
+
231
+ ### 2. Déploiement sur un serveur
232
+
233
+ ```bash
234
+ # Copier les fichiers sur le serveur
235
+ scp -r . user@server:/path/to/app/
236
+
237
+ # Sur le serveur
238
+ cd /path/to/app
239
+ ./run_docker.sh build
240
+ ./run_docker.sh start
241
+ ```
242
+
243
+ ### 3. Configuration Nginx (optionnel)
244
+
245
+ ```nginx
246
+ server {
247
+ listen 80;
248
+ server_name votre-domaine.com;
249
+
250
+ location / {
251
+ proxy_pass http://localhost:8501;
252
+ proxy_set_header Host $host;
253
+ proxy_set_header X-Real-IP $remote_addr;
254
+ }
255
+ }
256
+ ```
257
+
258
+ ## 🔒 Sécurité
259
+
260
+ ### 1. Utilisateur non-root
261
+
262
+ Le conteneur s'exécute avec un utilisateur non-root pour la sécurité.
263
+
264
+ ### 2. Variables d'environnement sensibles
265
+
266
+ ```bash
267
+ # Utiliser un fichier .env
268
+ echo "MODEL_V1_URL=https://votre-url-secure.com/model_v1.h5" > .env
269
+ echo "MODEL_V2_URL=https://votre-url-secure.com/model_v2.h5" >> .env
270
+ ```
271
+
272
+ ### 3. Limitation des ressources
273
+
274
+ ```yaml
275
+ # Dans docker-compose.yml
276
+ services:
277
+ waste-classifier:
278
+ deploy:
279
+ resources:
280
+ limits:
281
+ memory: 2G
282
+ cpus: '1.0'
283
+ ```
284
+
285
+ ## 📈 Optimisations
286
+
287
+ ### 1. Image multi-stage
288
+
289
+ ```dockerfile
290
+ # Stage 1: Build
291
+ FROM python:3.11-slim as builder
292
+ # ... installation des dépendances
293
+
294
+ # Stage 2: Production
295
+ FROM python:3.11-slim
296
+ # ... copie des fichiers nécessaires
297
+ ```
298
+
299
+ ### 2. Cache des dépendances
300
+
301
+ ```dockerfile
302
+ # Copier requirements.txt d'abord pour utiliser le cache Docker
303
+ COPY requirements.txt .
304
+ RUN pip install -r requirements.txt
305
+ ```
306
+
307
+ ### 3. Compression des modèles
308
+
309
+ ```python
310
+ # Dans votre script d'entraînement
311
+ model.save('model_compressed.h5', include_optimizer=False)
312
+ ```
313
+
314
+ ## 🌐 Intégration avec d'autres services
315
+
316
+ ### 1. Base de données
317
+
318
+ ```yaml
319
+ # Ajouter dans docker-compose.yml
320
+ services:
321
+ database:
322
+ image: postgres:13
323
+ environment:
324
+ POSTGRES_DB: waste_classifier
325
+ volumes:
326
+ - db_data:/var/lib/postgresql/data
327
+
328
+ waste-classifier:
329
+ depends_on:
330
+ - database
331
+ environment:
332
+ - DATABASE_URL=postgresql://user:pass@database:5432/waste_classifier
333
+ ```
334
+
335
+ ### 2. Redis pour le cache
336
+
337
+ ```yaml
338
+ services:
339
+ redis:
340
+ image: redis:alpine
341
+ ports:
342
+ - "6379:6379"
343
+
344
+ waste-classifier:
345
+ depends_on:
346
+ - redis
347
+ environment:
348
+ - REDIS_URL=redis://redis:6379
349
+ ```
350
+
351
+ ## 📞 Support
352
+
353
+ - **Logs** : `./run_docker.sh logs`
354
+ - **Statut** : `./run_docker.sh status`
355
+ - **Nettoyage** : `./run_docker.sh clean`
356
+
357
+ ---
358
+
359
+ **Bon déploiement Docker ! 🐳**