|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
|
|
|
CONTAINER_NAME="waste-classifier-app" |
|
|
IMAGE_NAME="waste-classifier" |
|
|
PORT=8501 |
|
|
|
|
|
|
|
|
RED='\033[0;31m' |
|
|
GREEN='\033[0;32m' |
|
|
YELLOW='\033[1;33m' |
|
|
BLUE='\033[0;34m' |
|
|
NC='\033[0m' |
|
|
|
|
|
|
|
|
log_info() { |
|
|
echo -e "${BLUE}ℹ️ $1${NC}" |
|
|
} |
|
|
|
|
|
log_success() { |
|
|
echo -e "${GREEN}✅ $1${NC}" |
|
|
} |
|
|
|
|
|
log_warning() { |
|
|
echo -e "${YELLOW}⚠️ $1${NC}" |
|
|
} |
|
|
|
|
|
log_error() { |
|
|
echo -e "${RED}❌ $1${NC}" |
|
|
} |
|
|
|
|
|
|
|
|
check_docker() { |
|
|
if ! command -v docker &> /dev/null; then |
|
|
log_error "Docker n'est pas installé. Veuillez l'installer d'abord." |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
if ! command -v docker-compose &> /dev/null; then |
|
|
log_error "Docker Compose n'est pas installé. Veuillez l'installer d'abord." |
|
|
exit 1 |
|
|
fi |
|
|
} |
|
|
|
|
|
|
|
|
build_image() { |
|
|
log_info "Construction de l'image Docker..." |
|
|
|
|
|
|
|
|
if [ ! -f "app.py" ]; then |
|
|
log_error "Fichier app.py non trouvé" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
if [ ! -f "requirements.txt" ]; then |
|
|
log_error "Fichier requirements.txt non trouvé" |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
|
|
|
docker-compose build --no-cache |
|
|
|
|
|
log_success "Image Docker construite avec succès" |
|
|
} |
|
|
|
|
|
|
|
|
start_container() { |
|
|
log_info "Démarrage du conteneur..." |
|
|
|
|
|
|
|
|
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then |
|
|
log_warning "Le conteneur est déjà en cours d'exécution" |
|
|
return 0 |
|
|
fi |
|
|
|
|
|
|
|
|
docker-compose up -d |
|
|
|
|
|
|
|
|
log_info "Attente du démarrage du conteneur..." |
|
|
sleep 10 |
|
|
|
|
|
|
|
|
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then |
|
|
log_success "Conteneur démarré avec succès" |
|
|
log_info "Interface disponible sur: http://localhost:$PORT" |
|
|
else |
|
|
log_error "Échec du démarrage du conteneur" |
|
|
exit 1 |
|
|
fi |
|
|
} |
|
|
|
|
|
|
|
|
stop_container() { |
|
|
log_info "Arrêt du conteneur..." |
|
|
docker-compose down |
|
|
log_success "Conteneur arrêté" |
|
|
} |
|
|
|
|
|
|
|
|
restart_container() { |
|
|
log_info "Redémarrage du conteneur..." |
|
|
stop_container |
|
|
start_container |
|
|
} |
|
|
|
|
|
|
|
|
show_logs() { |
|
|
log_info "Affichage des logs..." |
|
|
docker-compose logs -f |
|
|
} |
|
|
|
|
|
|
|
|
clean_docker() { |
|
|
log_info "Nettoyage des ressources Docker..." |
|
|
|
|
|
|
|
|
docker-compose down |
|
|
|
|
|
|
|
|
if docker images -q $IMAGE_NAME | grep -q .; then |
|
|
docker rmi $IMAGE_NAME |
|
|
log_success "Image supprimée" |
|
|
fi |
|
|
|
|
|
|
|
|
docker volume prune -f |
|
|
|
|
|
|
|
|
docker image prune -f |
|
|
|
|
|
log_success "Nettoyage terminé" |
|
|
} |
|
|
|
|
|
|
|
|
show_help() { |
|
|
echo "Usage: $0 [COMMAND]" |
|
|
echo "" |
|
|
echo "Commands:" |
|
|
echo " build Construire l'image Docker" |
|
|
echo " start Démarrer le conteneur" |
|
|
echo " stop Arrêter le conteneur" |
|
|
echo " restart Redémarrer le conteneur" |
|
|
echo " logs Afficher les logs" |
|
|
echo " clean Nettoyer les ressources Docker" |
|
|
echo " status Afficher le statut du conteneur" |
|
|
echo " help Afficher cette aide" |
|
|
echo "" |
|
|
echo "Exemples:" |
|
|
echo " $0 build && $0 start # Construire et démarrer" |
|
|
echo " $0 logs # Voir les logs en temps réel" |
|
|
echo " $0 clean # Nettoyer tout" |
|
|
} |
|
|
|
|
|
|
|
|
show_status() { |
|
|
log_info "Statut du conteneur:" |
|
|
docker ps -f name=$CONTAINER_NAME --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" |
|
|
|
|
|
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then |
|
|
log_success "Conteneur en cours d'exécution" |
|
|
log_info "Interface: http://localhost:$PORT" |
|
|
else |
|
|
log_warning "Conteneur arrêté" |
|
|
fi |
|
|
} |
|
|
|
|
|
|
|
|
main() { |
|
|
|
|
|
check_docker |
|
|
|
|
|
|
|
|
case "${1:-help}" in |
|
|
build) |
|
|
build_image |
|
|
;; |
|
|
start) |
|
|
start_container |
|
|
;; |
|
|
stop) |
|
|
stop_container |
|
|
;; |
|
|
restart) |
|
|
restart_container |
|
|
;; |
|
|
logs) |
|
|
show_logs |
|
|
;; |
|
|
clean) |
|
|
clean_docker |
|
|
;; |
|
|
status) |
|
|
show_status |
|
|
;; |
|
|
help|--help|-h) |
|
|
show_help |
|
|
;; |
|
|
*) |
|
|
log_error "Commande inconnue: $1" |
|
|
show_help |
|
|
exit 1 |
|
|
;; |
|
|
esac |
|
|
} |
|
|
|
|
|
|
|
|
main "$@" |
|
|
|