feat : UpdateChecker délègue la mise à jour à un script sudo externe
Le bouton "Mettre à jour" appelle désormais `sudo /usr/local/bin/folio-upgrade.sh` via exec() plutôt que d'exécuter git pull + composer + migrations directement en PHP. Le script shell (template dans scripts/server/) gère la séquence complète : clone fresh, permissions www-data, restauration .env, composer install, migrations SQL, .sessions, safe.directory. Le journal de la dernière mise à jour est conservé dans DATA_PATH/.upgrade-log et affiché en <details> dans l'admin. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env bash
|
||||
# folio-upgrade.sh — déploie Folio à la demande (appelé par PHP via sudo).
|
||||
#
|
||||
# Usage : folio-upgrade.sh <branche>
|
||||
#
|
||||
# Installation sur chaque serveur :
|
||||
# sudo install -o root -m 750 folio-upgrade.sh /usr/local/bin/folio-upgrade.sh
|
||||
#
|
||||
# Autorisation sudo (sans mot de passe) :
|
||||
# echo "www-data ALL=(root) NOPASSWD: /usr/local/bin/folio-upgrade.sh" \
|
||||
# | sudo tee /etc/sudoers.d/folio-upgrade
|
||||
#
|
||||
# ── Configuration (à adapter par site) ───────────────────────────────────────
|
||||
APP_DIR=/var/www/lan.acegrp.abonnel-www
|
||||
REPO_URL=https://git.abonnel.fr/cedricAbonnel/folio.git
|
||||
# ──────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
BRANCH=${1:-main}
|
||||
|
||||
ENV_FILE="$APP_DIR/.env"
|
||||
[ -f "$ENV_FILE" ] || { echo "ERREUR : $ENV_FILE introuvable"; exit 1; }
|
||||
|
||||
DATA_DIR=$(grep -m1 '^DATA_PATH=' "$ENV_FILE" | cut -d= -f2- | tr -d '"'"'" | xargs)
|
||||
[ -n "$DATA_DIR" ] || { echo "ERREUR : DATA_PATH absent du .env"; exit 1; }
|
||||
|
||||
LOG="$DATA_DIR/.upgrade-log"
|
||||
WORK_DIR=$(mktemp -d)
|
||||
trap 'rm -rf "$WORK_DIR"' EXIT
|
||||
|
||||
{
|
||||
echo "=== $(date '+%Y-%m-%d %H:%M:%S') — démarrage ==="
|
||||
echo "Branche : $BRANCH"
|
||||
echo ""
|
||||
|
||||
# 1. Sauvegarder .env avant de toucher APP_DIR
|
||||
cp "$ENV_FILE" "$WORK_DIR/.env.bak" || { echo "ERREUR : sauvegarde .env impossible"; exit 1; }
|
||||
|
||||
# 2. Cloner dans un répertoire de travail (APP_DIR reste intact en cas d'échec du clone)
|
||||
git clone --depth=1 --branch "$BRANCH" "$REPO_URL" "$WORK_DIR/app" \
|
||||
|| { echo "ERREUR : git clone"; exit 1; }
|
||||
|
||||
# 3. Déployer
|
||||
rm -rf "$APP_DIR"
|
||||
mv "$WORK_DIR/app" "$APP_DIR"
|
||||
|
||||
# 4. Permissions (PHP-FPM tourne en www-data)
|
||||
chown -R www-data:www-data "$APP_DIR"
|
||||
chmod -R g+rwX,o= "$APP_DIR"
|
||||
|
||||
# 5. Restaurer .env
|
||||
cp "$WORK_DIR/.env.bak" "$APP_DIR/.env"
|
||||
chown www-data:www-data "$APP_DIR/.env"
|
||||
chmod 640 "$APP_DIR/.env"
|
||||
|
||||
cd "$APP_DIR"
|
||||
|
||||
# 6. Dépendances Composer
|
||||
if command -v composer > /dev/null 2>&1; then
|
||||
sudo -u www-data composer install --no-dev --optimize-autoloader \
|
||||
|| echo "AVERTISSEMENT : composer install a échoué"
|
||||
else
|
||||
echo "AVERTISSEMENT : composer introuvable — dépendances non installées"
|
||||
fi
|
||||
|
||||
# 7. Migrations SQL
|
||||
sudo -u www-data php database/migrate.php \
|
||||
|| echo "AVERTISSEMENT : migrations SQL — vérifier manuellement"
|
||||
|
||||
# 8. Répertoire de sessions PHP
|
||||
mkdir -p "$APP_DIR/.sessions"
|
||||
chown www-data:www-data "$APP_DIR/.sessions"
|
||||
chmod 700 "$APP_DIR/.sessions"
|
||||
|
||||
# 9. Autoriser git pour ce répertoire (accès multi-utilisateurs)
|
||||
git config --system --add safe.directory "$APP_DIR" 2>/dev/null || true
|
||||
|
||||
echo ""
|
||||
echo "=== $(date '+%Y-%m-%d %H:%M:%S') — succès ==="
|
||||
} > "$LOG" 2>&1
|
||||
Reference in New Issue
Block a user