121 lines
5.9 KiB
Bash
Executable file
121 lines
5.9 KiB
Bash
Executable file
#!/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 <<EOF
|
|
APP_ENV=prod
|
|
APP_DEBUG=0
|
|
APP_SECRET=${APP_SEC}
|
|
DATABASE_URL="${DB_URL}"
|
|
MAILER_DSN="${MAILER}"
|
|
EOF
|
|
ok ".env.local crée."
|
|
else
|
|
fail "Abandonne. Crée .env.local puis relance le script."
|
|
fi
|
|
fi
|
|
|
|
# s'assurer que APP_ENV=prod est dans .env.local (sinon les commandes console tournent en dev)
|
|
if ! grep -q "APP_ENV=prod" .env.local; then
|
|
warn "APP_ENV=prod absent de .env.local — ajout automatique."
|
|
echo "APP_ENV=prod" >> .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 ""
|