af0a0bb9d5
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>
80 lines
2.8 KiB
Bash
80 lines
2.8 KiB
Bash
#!/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
|