Connexions SSH avec phpseclib et journal des actions

This commit is contained in:
Yasser Boulayoune 2026-04-07 13:19:00 +02:00
parent 52ecb4204c
commit f508a2fcb5
8 changed files with 11077 additions and 0 deletions

121
deploy.sh Executable file
View file

@ -0,0 +1,121 @@
#!/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 ""