FireWatch / docker-entrypoint.sh
rinogeek's picture
first commit
e9d86db
#!/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 "$@"