91 lines
3.1 KiB
Bash
Executable File
91 lines
3.1 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 --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 --yes prisma@6.4.1 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 ""
|