#!/bin/bash # ============================================ # Script de déploiement en production # ============================================ # Usage: ./scripts/deploy-prod.sh set -e # Arrêter en cas d'erreur echo "🚀 Déploiement Neah en production..." # Vérifier que Docker est installé if ! command -v docker &> /dev/null; then echo "❌ Docker n'est pas installé. Veuillez l'installer d'abord." exit 1 fi if ! command -v docker-compose &> /dev/null; then echo "❌ Docker Compose n'est pas installé. Veuillez l'installer d'abord." exit 1 fi # Vérifier que le fichier .env.production existe if [ ! -f .env.production ]; then echo "❌ Le fichier .env.production n'existe pas." echo "📝 Créez-le à partir de env.production.example" exit 1 fi # Charger les variables d'environnement export $(cat .env.production | grep -v '^#' | xargs) echo "📦 Build de l'image Docker..." docker-compose -f docker-compose.prod.yml --env-file .env.production build --no-cache app echo "🔄 Démarrage des services de base (PostgreSQL, Redis)..." docker-compose -f docker-compose.prod.yml --env-file .env.production up -d db redis echo "⏳ Attente que les services soient prêts (15 secondes)..." sleep 15 echo "🔍 Vérification de la santé des services..." # Vérifier PostgreSQL if ! docker-compose -f docker-compose.prod.yml --env-file .env.production exec -T db pg_isready -U ${POSTGRES_USER:-neah_user} > /dev/null 2>&1; then echo "❌ PostgreSQL n'est pas prêt" exit 1 fi echo "✅ PostgreSQL est prêt" # Vérifier Redis if ! docker-compose -f docker-compose.prod.yml --env-file .env.production exec -T redis redis-cli -a ${REDIS_PASSWORD} ping > /dev/null 2>&1; then echo "❌ Redis n'est pas prêt" exit 1 fi echo "✅ Redis est prêt" echo "🗄️ Application des migrations Prisma..." docker-compose -f docker-compose.prod.yml --env-file .env.production run --rm app npx prisma migrate deploy echo "🚀 Démarrage de l'application..." docker-compose -f docker-compose.prod.yml --env-file .env.production up -d app echo "⏳ Attente que l'application démarre (10 secondes)..." sleep 10 echo "🔍 Vérification de la santé de l'application..." # Attendre jusqu'à 60 secondes que l'application réponde for i in {1..12}; do if curl -f http://localhost:${APP_PORT:-3000}/api/health > /dev/null 2>&1; then echo "✅ L'application est en ligne et répond" break fi if [ $i -eq 12 ]; then echo "⚠️ L'application ne répond pas encore. Vérifiez les logs:" echo " docker-compose -f docker-compose.prod.yml logs app" exit 1 fi echo " Tentative $i/12..." sleep 5 done echo "" echo "✅ Déploiement terminé avec succès!" echo "" echo "📊 Commandes utiles:" echo " - Voir les logs: docker-compose -f docker-compose.prod.yml logs -f app" echo " - Arrêter: docker-compose -f docker-compose.prod.yml down" echo " - Redémarrer: docker-compose -f docker-compose.prod.yml restart app" echo " - Health check: curl http://localhost:${APP_PORT:-3000}/api/health" echo ""