From 1d051383298415700c58d19f6737524c7ecc6b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Fri, 15 May 2026 18:27:28 +0200 Subject: [PATCH] =?UTF-8?q?docs=20:=20deployment.md=20=E2=80=94=20bouton?= =?UTF-8?q?=20Mettre=20=C3=A0=20jour=20(sudoers)=20+=20flux=20trending?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- README.md | 30 +----------- docs/deployment.md | 115 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 28 deletions(-) create mode 100644 docs/deployment.md diff --git a/README.md b/README.md index 85c5eda..9519714 100644 --- a/README.md +++ b/README.md @@ -143,35 +143,9 @@ php database/migrate.php ### Via le bouton admin ("Mettre à jour") -L'interface d'administration propose un bouton **Mettre à jour** qui déclenche un déploiement complet (clone fresh, permissions, Composer, migrations SQL, répertoire de sessions). Ce bouton appelle `sudo /usr/local/bin/folio-upgrade.sh` depuis PHP (`www-data`). +L'interface d'administration propose un bouton **Mettre à jour** qui déclenche un déploiement complet via `sudo /usr/local/bin/folio-upgrade.sh`. Une configuration sudoers est requise une fois par serveur. -**Configuration requise une fois sur chaque serveur :** - -```bash -# 1. Installer le script (adapté à votre serveur) -sudo install -o root -m 750 /var/www/mon-site/scripts/server/folio-upgrade.sh \ - /usr/local/bin/folio-upgrade.sh - -# 2. Éditer APP_DIR et REPO_URL dans le script installé -sudo nano /usr/local/bin/folio-upgrade.sh - -# 3. Autoriser www-data à l'exécuter sans mot de passe -echo "www-data ALL=(root) NOPASSWD: /usr/local/bin/folio-upgrade.sh" \ - | sudo tee /etc/sudoers.d/folio-upgrade -sudo chmod 440 /etc/sudoers.d/folio-upgrade - -# 4. Vérifier la syntaxe -sudo visudo -c -``` - -Le script est dans `scripts/server/folio-upgrade.sh`. Les deux variables à adapter en tête de fichier : - -| Variable | Description | -|---|---| -| `APP_DIR` | Chemin absolu du document root (ex. `/var/www/mon-site`) | -| `REPO_URL` | URL du dépôt Git Folio | - -Sans cette configuration, le bouton retourne une erreur `sudo: a password is required`. +→ Voir **[docs/deployment.md](docs/deployment.md)** pour la procédure complète. ## Structure du projet diff --git a/docs/deployment.md b/docs/deployment.md new file mode 100644 index 0000000..2a5a333 --- /dev/null +++ b/docs/deployment.md @@ -0,0 +1,115 @@ +# Déploiement et mise à jour + +## Mise à jour via le bouton admin + +L'interface d'administration propose un bouton **Mettre à jour** (onglet Dashboard). Il appelle `sudo /usr/local/bin/folio-upgrade.sh` depuis PHP (`www-data`) et exécute la séquence complète : + +1. Sauvegarde du `.env` +2. `git clone --depth=1` dans un répertoire temporaire +3. Remplacement atomique du répertoire applicatif +4. `chown -R www-data:www-data` + `chmod g+rwX,o=` +5. Restauration du `.env` +6. `composer install --no-dev --optimize-autoloader` +7. `php database/migrate.php` (migrations SQL) +8. Création de `.sessions/` avec les bons droits +9. `git config --system --add safe.directory` + +### Pré-requis serveur (à faire une fois) + +```bash +# 1. Installer le script (copié depuis le dépôt) +sudo install -o root -m 750 /var/www/mon-site/scripts/server/folio-upgrade.sh \ + /usr/local/bin/folio-upgrade.sh + +# 2. Adapter APP_DIR et REPO_URL en tête du script +sudo nano /usr/local/bin/folio-upgrade.sh + +# 3. Créer la règle sudoers (www-data sans mot de passe) +echo "www-data ALL=(root) NOPASSWD: /usr/local/bin/folio-upgrade.sh" \ + | sudo tee /etc/sudoers.d/folio-upgrade +sudo chmod 440 /etc/sudoers.d/folio-upgrade + +# 4. Vérifier la syntaxe sudoers +sudo visudo -c +``` + +Variables à configurer dans le script : + +| Variable | Exemple | +|---|---| +| `APP_DIR` | `/var/www/lan.acegrp.abonnel-www` | +| `REPO_URL` | `https://git.abonnel.fr/cedricAbonnel/folio.git` | + +> **Sans cette configuration**, le bouton retourne : +> `sudo: a terminal is required to read the password` + +### Fonctionnement du cache de mise à jour + +Le résultat de la dernière mise à jour est conservé dans `DATA_PATH/.upgrade-log` et affiché en `
` dans l'admin. + +--- + +## Mise à jour manuelle + +Si le bouton admin n'est pas configuré ou si une mise à jour d'urgence est nécessaire : + +```bash +# Sauvegarde du .env +cp /var/www/mon-site/.env /tmp/.env.bak + +# Clone fresh +sudo rm -rf /var/www/mon-site +sudo git clone --depth=1 https://git.abonnel.fr/cedricAbonnel/folio.git /var/www/mon-site + +# Permissions +sudo chown -R www-data:www-data /var/www/mon-site +sudo chmod -R g+rwX,o= /var/www/mon-site + +# Restaurer .env +cp /tmp/.env.bak /var/www/mon-site/.env + +# Dépendances et migrations +cd /var/www/mon-site +composer install --no-dev --optimize-autoloader +php database/migrate.php + +# Répertoire de sessions +sudo mkdir -p /var/www/mon-site/.sessions +sudo chown www-data:www-data /var/www/mon-site/.sessions +sudo chmod 700 /var/www/mon-site/.sessions + +# Autoriser git (accès multi-utilisateurs) +sudo git config --system --add safe.directory /var/www/mon-site +``` + +--- + +## Flux RSS des tendances (`/trending`) + +Le flux RSS des articles les plus consultés est alimenté par `TrendingParser` qui lit les logs Apache. + +- **Source** : `GET /trending?period=` — parse les logs et écrit `DATA_PATH/_cache/trending_.json` +- **Consommateurs** (lecture seule du cache) : page d'accueil (rubrique "Meilleures audiences") et `/tendances` + +### Périodes disponibles + +| Paramètre | Fenêtre | Cache TTL | +|---|---|---| +| `10m` | 10 min | 2 min | +| `20m` | 20 min | 4 min | +| `30m` | 30 min | 6 min | +| `1h` | 1 heure | 12 min | +| `8h` | 8 heures | 96 min | +| `1d` | 24 heures | 5 h | +| `7d` | 7 jours | 8 h | +| `14d` | 14 jours | 8 h | +| `30d` | 30 jours | 8 h | +| `1y` | 1 an | 8 h | + +### Prérequis + +`www-data` doit appartenir au groupe `adm` pour lire `/var/log/apache2/` : + +```bash +sudo usermod -aG adm www-data +```