#!/bin/bash # Script d'entrée Docker pour FireWatch AI # Créé par Marino ATOHOUN set -e # Couleurs pour les logs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo -e "${BLUE}🔥 FireWatch AI - Démarrage du conteneur${NC}" echo -e "${BLUE}Créé par Marino ATOHOUN${NC}" # Fonction de logging log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" } error() { echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}" } warning() { echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}" } # Attendre que la base de données soit prête (si PostgreSQL) if [ "$DATABASE_URL" ]; then log "Attente de la base de données..." # Extraire l'host et le port de DATABASE_URL if [[ $DATABASE_URL == postgresql* ]]; then DB_HOST=$(echo $DATABASE_URL | sed -n 's/.*@\([^:]*\):.*/\1/p') DB_PORT=$(echo $DATABASE_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p') if [ "$DB_HOST" ] && [ "$DB_PORT" ]; then log "Vérification de la connexion à PostgreSQL ($DB_HOST:$DB_PORT)..." # Attendre que PostgreSQL soit prêt until nc -z $DB_HOST $DB_PORT; do warning "PostgreSQL n'est pas encore prêt - attente..." sleep 2 done log "PostgreSQL est prêt!" fi fi fi # Exécuter les migrations log "Exécution des migrations de base de données..." python manage.py migrate --noinput # Créer un superutilisateur si les variables d'environnement sont définies if [ "$DJANGO_SUPERUSER_USERNAME" ] && [ "$DJANGO_SUPERUSER_EMAIL" ] && [ "$DJANGO_SUPERUSER_PASSWORD" ]; then log "Création du superutilisateur..." python manage.py shell << EOF from django.contrib.auth import get_user_model User = get_user_model() if not User.objects.filter(username='$DJANGO_SUPERUSER_USERNAME').exists(): User.objects.create_superuser('$DJANGO_SUPERUSER_USERNAME', '$DJANGO_SUPERUSER_EMAIL', '$DJANGO_SUPERUSER_PASSWORD') print('Superutilisateur créé avec succès') else: print('Superutilisateur existe déjà') EOF fi # Collecter les fichiers statiques log "Collecte des fichiers statiques..." python manage.py collectstatic --noinput # Vérifier la présence des modèles YOLOv8 log "Vérification des modèles YOLOv8..." if [ -f "models/incendies.pt" ]; then log "✓ Modèle d'incendie trouvé" else warning "✗ Modèle d'incendie non trouvé (models/incendies.pt)" fi if [ -f "models/intrusion.pt" ]; then log "✓ Modèle d'intrusion trouvé" else warning "✗ Modèle d'intrusion non trouvé (models/intrusion.pt)" fi # Créer les répertoires nécessaires log "Création des répertoires nécessaires..." mkdir -p media/uploads/images media/uploads/videos media/results logs # Vérifier les permissions log "Vérification des permissions..." if [ ! -w "media" ]; then error "Pas de permission d'écriture sur le répertoire media" exit 1 fi # Afficher les informations de configuration log "Configuration:" echo " - DEBUG: ${DEBUG:-False}" echo " - ALLOWED_HOSTS: ${ALLOWED_HOSTS:-localhost}" echo " - DATABASE_URL: ${DATABASE_URL:-sqlite:///db.sqlite3}" # Démarrer Celery en arrière-plan si Redis est configuré if [ "$CELERY_BROKER_URL" ]; then log "Démarrage de Celery worker..." celery -A firewatch_project worker --loglevel=info --detach fi log "🚀 Démarrage de l'application FireWatch AI..." # Exécuter la commande passée en argument exec "$@"