docs : deployment.md — bouton Mettre à jour (sudoers) + flux trending

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-15 18:27:28 +02:00
parent ee2b8a4ac7
commit 1d05138329
2 changed files with 117 additions and 28 deletions
+115
View File
@@ -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 `<details>` 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=<période>` — parse les logs et écrit `DATA_PATH/_cache/trending_<période>.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
```