#!/bin/bash # ============================================================================= # deploy.sh — Deploiement en production pour ServerControl # Usage : ./deploy.sh (depuis la racine du projet, apres un git pull) # ============================================================================= # ── Couleurs ────────────────────────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' ok() { echo -e "${GREEN} [OK]${NC} $1"; } info() { echo -e "${CYAN} [>>]${NC} $1"; } warn() { echo -e "${YELLOW} [!!]${NC} $1"; } fail() { echo -e "${RED} [ERR]${NC} $1"; exit 1; } echo "" echo -e "${CYAN} ======================================${NC}" echo -e "${CYAN} ServerControl — Deploiement prod ${NC}" echo -e "${CYAN} ======================================${NC}" echo "" # ── 0. Verifications ────────────────────────────────────────────────────────── [ ! -f "bin/console" ] && fail "Lance ce script depuis la racine du projet Symfony." command -v composer &>/dev/null || fail "Composer introuvable dans le PATH." # detecter PHP : cherche php8.4 > php8.3 > php8.2 > php PHP_BIN="" for bin in php8.4 php8.3 php8.2 php; do command -v "$bin" &>/dev/null && { PHP_BIN="$bin"; break; } done [ -z "$PHP_BIN" ] && fail "Aucun binaire PHP trouvé dans le PATH." info "PHP détecté : $PHP_BIN ($($PHP_BIN -r 'echo PHP_VERSION;' 2>/dev/null))" # verifier .env.local et proposer de le creer s'il manque if [ ! -f ".env.local" ]; then echo "" warn ".env.local introuvable — ce fichier est obligatoire en production." echo "" read -p " Veux-tu le créer maintenant ? (o/N) " -n 1 -r; echo "" if [[ $REPLY =~ ^[Oo]$ ]]; then echo "" read -p " DATABASE_URL (ex: postgresql://user:pass@127.0.0.1:5432/servercontrol?serverVersion=16&charset=utf8) : " DB_URL read -p " APP_SECRET (chaine aleatoire, min 32 chars) : " APP_SEC read -p " MAILER_DSN (ex: smtp://user:pass@sandbox.smtp.mailtrap.io:2525) : " MAILER cat > .env.local <> .env.local ok "APP_ENV=prod ajouté." fi export APP_ENV=prod export APP_DEBUG=0 echo "" # ── 1. Dependances Composer ─────────────────────────────────────────────────── info "Installation des dependances (sans dev, sans scripts)..." # --no-scripts evite que les @auto-scripts Symfony tournent ici # les warnings PHP deprecated de Composer sont redirigés vers /dev/null composer install \ --no-dev \ --optimize-autoloader \ --no-interaction \ --no-scripts \ --quiet \ 2>/dev/null ok "Dependances installées." # ── 2. Cache : suppression ──────────────────────────────────────────────────── info "Suppression du cache..." # on supprime manuellement pour eviter les erreurs si le cache est corrompu rm -rf var/cache/prod 2>/dev/null || true $PHP_BIN bin/console cache:clear --env=prod --no-debug 2>&1 | grep -v "^$" | tail -2 ok "Cache supprimé." # ── 3. Migrations base de données ───────────────────────────────────────────── info "Migrations Doctrine..." $PHP_BIN bin/console doctrine:migrations:migrate \ --no-interaction \ --env=prod \ 2>&1 | grep -v "^\s*$" ok "Migrations OK." # ── 4. Assets (asset-mapper) ────────────────────────────────────────────────── info "Compilation des assets..." $PHP_BIN bin/console asset-map:compile --env=prod 2>&1 | grep -v "^\s*$" | tail -3 ok "Assets compilés." # ── 5. Prechauffage du cache ────────────────────────────────────────────────── info "Prechauffage du cache prod..." $PHP_BIN bin/console cache:warmup --env=prod --no-debug 2>&1 | grep -v "^\s*$" | tail -2 ok "Cache prechauffé." # ── 6. Permissions sur var/ ─────────────────────────────────────────────────── info "Permissions sur var/..." chmod -R 775 var/ 2>/dev/null && ok "Permissions OK." || warn "Impossible de modifier var/ (pas grave si le webserver y a déjà accès)." # ── 7. Redemarrage PHP-FPM ──────────────────────────────────────────────────── # Descommente la ligne correspondant a ta version de PHP sur le serveur : # sudo systemctl restart php8.4-fpm && ok "php8.4-fpm redemarré." || warn "Echec restart php8.4-fpm." # sudo systemctl restart php8.3-fpm && ok "php8.3-fpm redemarré." || warn "Echec restart php8.3-fpm." # sudo systemctl restart php8.2-fpm && ok "php8.2-fpm redemarré." || warn "Echec restart php8.2-fpm." echo "" echo -e "${GREEN} ======================================${NC}" echo -e "${GREEN} Deploiement terminé avec succès ! ${NC}" echo -e "${GREEN} ======================================${NC}" echo ""