#!/bin/bash # Script de dĂ©ploiement PRODUCTION RegisFlow # Utilisation: ./deploy-prod.sh set -e echo "🚀 DĂ©ploiement PRODUCTION RegisFlow" echo "====================================" # VĂ©rifications prĂ©alables echo "🔍 VĂ©rifications prĂ©alables..." # VĂ©rifier que nous sommes en mode production if [ "$NODE_ENV" != "production" ]; then echo "⚠ Variable NODE_ENV non dĂ©finie sur 'production'" read -p "Continuer quand mĂȘme ? (y/N): " -r if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # VĂ©rifier Docker et Docker Compose if ! command -v docker &> /dev/null; then echo "❌ Docker n'est pas installĂ©" exit 1 fi if ! command -v docker-compose &> /dev/null; then echo "❌ Docker Compose n'est pas installĂ©" exit 1 fi # CrĂ©er les rĂ©pertoires de donnĂ©es echo "📁 CrĂ©ation des rĂ©pertoires de donnĂ©es..." mkdir -p data/{postgres,backups,logs,postgres-logs} chmod 755 data data/* # CrĂ©er le fichier .env s'il n'existe pas if [ ! -f .env ]; then echo "📝 CrĂ©ation du fichier .env de production..." cp .env.example .env echo "" echo "⚠ CONFIGURATION OBLIGATOIRE POUR LA PRODUCTION :" echo " 1. Éditez le fichier .env" echo " 2. Changez OBLIGATOIREMENT :" echo " - POSTGRES_PASSWORD" echo " - SESSION_SECRET" echo " 3. Pour gĂ©nĂ©rer SESSION_SECRET :" echo " openssl rand -base64 32" echo "" read -p "Appuyez sur EntrĂ©e aprĂšs avoir configurĂ© .env..." fi # VĂ©rifier les variables critiques echo "🔒 VĂ©rification de la configuration de sĂ©curitĂ©..." source .env if [ "$POSTGRES_PASSWORD" = "CHANGEZ_MOI_EN_PRODUCTION_2024!" ]; then echo "❌ POSTGRES_PASSWORD doit ĂȘtre changĂ© pour la production !" exit 1 fi if [ "$SESSION_SECRET" = "CHANGEZ_MOI_GENERER_UNE_CLE_SECRETE_FORTE" ]; then echo "❌ SESSION_SECRET doit ĂȘtre changĂ© pour la production !" exit 1 fi echo "✅ Configuration de sĂ©curitĂ© validĂ©e" # ArrĂȘter les services existants echo "🛑 ArrĂȘt des services existants..." docker-compose down 2>/dev/null || true # Construire les images echo "🔹 Construction des images de production..." docker-compose build --no-cache # VĂ©rifier l'espace disque echo "đŸ’Ÿ VĂ©rification de l'espace disque..." DISK_USAGE=$(df / | awk 'NR==2{print $5}' | cut -d'%' -f1) if [ "$DISK_USAGE" -gt 80 ]; then echo "⚠ Attention: Espace disque faible ($DISK_USAGE%)" read -p "Continuer ? (y/N): " -r if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # DĂ©marrer les services avec configuration production echo "🚀 DĂ©marrage des services de production..." docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d # Attendre le dĂ©marrage echo "⏳ Attente du dĂ©marrage des services..." sleep 30 # VĂ©rifier la santĂ© des services echo "đŸ„ VĂ©rification de la santĂ© des services..." for i in {1..30}; do if docker-compose ps | grep -q "healthy"; then echo "✅ Services dĂ©marrĂ©s avec succĂšs" break fi if [ $i -eq 30 ]; then echo "❌ Timeout: Les services ne dĂ©marrent pas correctement" echo "📋 Logs des services :" docker-compose logs --tail=20 exit 1 fi sleep 5 done # Test de connectivitĂ© echo "🔗 Test de connectivitĂ©..." if curl -f http://localhost:5000/health &>/dev/null; then echo "✅ Application accessible sur http://localhost:5000" else echo "❌ Application non accessible" docker-compose logs regisflow --tail=20 exit 1 fi # Afficher le statut final echo "" echo "🎉 DÉPLOIEMENT PRODUCTION RÉUSSI !" echo "==================================" echo "đŸ“± Application RegisFlow : http://localhost:5000" echo "đŸ—„ïž PostgreSQL : localhost:5433" echo "📊 Statut des services :" docker-compose ps echo "" echo "📋 Commandes utiles :" echo " - Logs : docker-compose logs -f" echo " - Statut : docker-compose ps" echo " - ArrĂȘt : docker-compose down" echo " - Sauvegarde : docker-compose exec regisflow-db pg_dump -U regisflow regisflow > backup.sql" echo "" echo "⚠ N'oubliez pas de configurer HTTPS avec un reverse proxy pour la production !"