NeahStable/scripts/deploy-prod.sh
2026-01-18 20:28:07 +01:00

91 lines
2.9 KiB
Bash
Executable File

#!/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 build --no-cache app
echo "🔄 Démarrage des services de base (PostgreSQL, Redis)..."
docker-compose -f docker-compose.prod.yml 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 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 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 run --rm app npx prisma migrate deploy
echo "🚀 Démarrage de l'application..."
docker-compose -f docker-compose.prod.yml 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 ""