#!/bin/bash
# ============================================
# Script d'installation automatique du portfolio Geekbrain.io
# À exécuter SUR LE NAS dans le dossier du projet
# ============================================
set -e # Arrête le script en cas d'erreur
echo "=========================================="
echo "Installation du portfolio Geekbrain.io"
echo "=========================================="
echo ""
# Couleurs pour l'affichage
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Vérifier que Docker est installé et en cours d'exécution
echo "1. Vérification de Docker..."
if ! command -v docker &> /dev/null; then
echo -e "${RED}❌ Docker n'est pas installé. Installez Docker d'abord.${NC}"
exit 1
fi
if ! docker info &> /dev/null; then
echo -e "${RED}❌ Docker n'est pas en cours d'exécution ou vous n'avez pas les permissions.${NC}"
echo " Démarrez Docker : systemctl start docker (ou via l'interface de votre NAS)"
exit 1
fi
echo -e "${GREEN}✓ Docker est opérationnel${NC}"
echo ""
# Vérifier que le docker-compose.yml existe
if [ ! -f "docker/docker-compose.yml" ]; then
echo -e "${RED}❌ Fichier docker/docker-compose.yml introuvable.${NC}"
echo " Assurez-vous d'exécuter ce script depuis la racine du projet."
exit 1
fi
echo "2. Configuration de l'environnement..."
echo ""
# Vérifier si .env existe déjà
if [ -f ".env" ]; then
read -p "Un fichier .env existe déjà. Le remplacer ? (o/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Oo]$ ]]; then
echo "Installation annulée. Conservez votre fichier .env existant."
exit 0
fi
fi
# Créer le fichier .env
ENV_FILE=".env"
# === Demander les valeurs ===
echo "Veuillez renseigner les variables d'environnement :"
echo ""
# DATABASE_URL
read -p "DATABASE_URL (ex: mysql+aiomysql://geekbrain_app:2025Supp@[email protected]:3306/geekbrain_portfolio) : " DATABASE_URL
# SMTP
read -p "SMTP_HOST (ex: smtp.gmail.com) : " SMTP_HOST
read -p "SMTP_PORT (ex: 587) : " SMTP_PORT
read -p "SMTP_USER (ex: [email protected]) : " SMTP_USER
read -s -p "SMTP_PASSWORD (mot de passe d'application Gmail) : " SMTP_PASSWORD
echo ""
# reCAPTCHA
read -p "RECAPTCHA_SITE_KEY (depuis Google) : " RECAPTCHA_SITE_KEY
read -s -p "RECAPTCHA_SECRET (depuis Google) : " RECAPTCHA_SECRET
echo ""
# GitBucket
read -p "GITBUCKET_URL (ex: http://10.0.0.16:8080/api/v3/users/rcairbum/repos) : " GITBUCKET_URL
# Optionnels avec défauts
read -p "CACHE_TTL en secondes (défaut: 300) : " CACHE_TTL
CACHE_TTL=${CACHE_TTL:-300}
read -p "LOG_LEVEL (défaut: INFO) : " LOG_LEVEL
LOG_LEVEL=${LOG_LEVEL:-INFO}
echo ""
echo "3. Création du fichier .env..."
# Écrire le fichier .env
cat > "$ENV_FILE" << EOF
# Configuration de l'application Geekbrain.io
# Généré automatiquement le $(date)
DATABASE_URL=$DATABASE_URL
SMTP_HOST=$SMTP_HOST
SMTP_PORT=$SMTP_PORT
SMTP_USER=$SMTP_USER
SMTP_PASSWORD=$SMTP_PASSWORD
RECAPTCHA_SITE_KEY=$RECAPTCHA_SITE_KEY
RECAPTCHA_SECRET=$RECAPTCHA_SECRET
GITBUCKET_URL=$GITBUCKET_URL
CACHE_TTL=$CACHE_TTL
LOG_LEVEL=$LOG_LEVEL
EOF
echo -e "${GREEN}✓ Fichier .env créé${NC}"
echo ""
# Vérifier que le fichier a été créé
if [ ! -f "$ENV_FILE" ]; then
echo -e "${RED}❌ Erreur : fichier .env non créé${NC}"
exit 1
fi
echo "4. Construction de l'image Docker..."
echo " Cela peut prendre plusieurs minutes (téléchargement de Python, pip install...)"
echo ""
if docker-compose -f docker/docker-compose.yml build; then
echo -e "${GREEN}✓ Image Docker construite avec succès${NC}"
else
echo -e "${RED}❌ Erreur lors de la construction de l'image.${NC}"
echo " Consultez les erreurs ci-dessus."
exit 1
fi
echo ""
echo "5. Démarrage du container..."
echo ""
if docker-compose -f docker/docker-compose.yml up -d; then
echo -e "${GREEN}✓ Container démarré${NC}"
else
echo -e "${RED}❌ Erreur lors du démarrage du container.${NC}"
exit 1
fi
echo ""
echo "6. Vérification..."
sleep 3
# Vérifier que le container est en cours d'exécution
CONTAINER_NAME=$(docker-compose -f docker/docker-compose.yml ps -q web 2>/dev/null)
if [ -z "$CONTAINER_NAME" ]; then
echo -e "${RED}❌ Container non détecté ou arrêté.${NC}"
echo " Vérifiez avec : docker-compose -f docker/docker-compose.yml logs"
exit 1
fi
CONTAINER_STATUS=$(docker inspect -f '{{.State.Running}}' "$CONTAINER_NAME" 2>/dev/null)
if [ "$CONTAINER_STATUS" != "true" ]; then
echo -e "${RED}❌ Container en état d'arrêt.${NC}"
echo " Logs :"
docker-compose -f docker/docker-compose.yml logs web --tail=20
exit 1
fi
echo -e "${GREEN}✓ Container est en cours d'exécution${NC}"
echo ""
# Afficher les logs récents
echo "Logs récents :"
docker-compose -f docker/docker-compose.yml logs --tail=10 web
echo ""
# Test HTTP
echo "7. Test de l'application..."
if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/health | grep -q "200"; then
echo -e "${GREEN}✓ L'application répond correctement (health check 200)${NC}"
echo ""
echo "✅ INSTALLATION RÉUSSIE !"
echo ""
echo "Prochaines étapes :"
echo " 1. Testez dans votre navigateur : http://$(hostname -I | awk '{print $1}'):8000"
echo " (ou http://localhost:8000 depuis le NAS)"
echo " 2. Soumettez le formulaire de contact pour tester"
echo " 3. Configurez Nginx Proxy Manager pour portfolio.geekbrain.io"
echo " 4. Ajoutez le logo dans app/static/assets/images/ si ce n'est pas déjà fait"
echo ""
echo "Pour voir les logs en temps réel :"
echo " docker-compose -f docker/docker-compose.yml logs -f web"
echo ""
echo "Pour arrêter :"
echo " docker-compose -f docker/docker-compose.yml down"
else
echo -e "${YELLOW}⚠ Health check ne répond pas 200.${NC}"
echo " L'application peut être en cours de démarrage, ou il y a un problème."
echo " Vérifiez les logs complets :"
echo " docker-compose -f docker/docker-compose.yml logs web"
fi
echo ""
echo "=========================================="
echo "Fin du script d'installation"
echo "=========================================="