fabe5a9f53
Les <form> admin_toggle_featured et duplicate étaient imbriqués dans #bulk-form — HTML invalide, le navigateur soumettait le form parent (suppression) au lieu du bon. Fix : attribut form="id" HTML5 + forms cachés placés après le bulk-form. Ajoute note CSP + nested forms dans consignes.md. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5.5 KiB
5.5 KiB
Consignes — Folio
Architecture
Folio est un moteur de blog PHP.
Dépôts et rôles
| Répertoire local | Rôle | Remote Gitea |
|---|---|---|
~/Projects/folio/ |
Copie du moteur Folio, branche dev. Tout le développement se fait ici. |
git.abonnel.fr/cedricAbonnel/folio |
~/Projects/varlog/ |
Workspace du site varlog (scripts, config). | — |
~/Projects/varlog-data/ |
Articles de varlog.a5l.fr. Sync bidirectionnelle. | cedricAbonnel/varlog |
~/Projects/fr.abonnel.www/ |
Workspace du site abonnel.fr (scripts, config). | — |
~/Projects/fr.abonnel.www-data/ |
Articles de www.abonnel.fr. Sync bidirectionnelle. | cedricAbonnel/abonnel-www |
Environnements
| Site | Rôle | Mise à jour moteur | Articles |
|---|---|---|---|
| varlog.a5l.fr | Test | rsync depuis ~/Projects/folio/ |
varlog-data/ ↔ varlog:/srv/data/folio |
| www.abonnel.fr | Production | Auto (UpdateChecker vérifie version.txt sur Gitea) |
fr.abonnel.www-data/ ↔ abonnel-wiki:/srv/data/folio |
Articles (DATA_PATH)
Les articles ne sont jamais dans le dépôt folio. Ils vivent dans un répertoire séparé, configurable via DATA_PATH dans le .env de chaque instance.
- Serveur varlog :
DATA_PATH=/srv/data/folio - Serveur abonnel.fr :
DATA_PATH=/srv/data/folio - En local pour tester : pointer
DATA_PATHvers~/Projects/varlog-data/
La sync des articles se fait via git (pas rsync) avec les scripts pull-data.sh et push-data.sh.
Workflow moteur
- Travailler sur
devdans~/Projects/folio/ - Tester sur varlog.a5l.fr :
~/Projects/varlog/scripts/sync.sh # puis vérifier sur http://varlog.acegrp.lan (ou varlog.a5l.fr) - Quand
devest stable :- Bumper
public/version.txt(semver) - Ajouter une entrée dans
CHANGELOG.md - Ouvrir une PR
dev→mainsur Gitea
- Bumper
- Merger la PR → abonnel.fr se met à jour automatiquement.
Règle absolue : jamais de commit direct sur main.
Mise à jour du moteur (varlog)
Le poste local n'a pas de base de données. Tout ce qui touche à la DB ou au contenu s'exécute sur le serveur varlog via SSH — les scripts locaux ne font qu'ouvrir une connexion SSH et lancer le PHP distant.
Cycle de développement :
- Modifier le code dans
~/Projects/folio/(local) - Déployer et tester :
# Rsync moteur (folio → varlog) + sync articles bidirectionnel
~/Projects/varlog/scripts/sync.sh
# puis tester sur http://varlog.acegrp.lan
- Si des migrations de schéma BDD sont nécessaires :
~/Projects/varlog/scripts/db-migrate.sh # exécute le PHP sur varlog via SSH
- Si des migrations de contenu sont nécessaires :
~/Projects/varlog/scripts/content-migrate.sh # exécute le PHP sur varlog via SSH
Déploiement complet en une commande (lint + rsync + DB + contenu + commit serveur) :
~/Projects/varlog/scripts/deploy.sh "message de commit"
Chemin serveur : varlog:/var/www/lan.acegrp.varlog/
Mise à jour manuelle du moteur (abonnel.fr)
À utiliser uniquement si l'UpdateChecker échoue :
# Sauvegarde du .env
cp /var/www/lan.acegrp.abonnel-www/.env /tmp/.env.bak
# Clone fresh (en root car /var/www appartient à root)
sudo rm -rf /var/www/lan.acegrp.abonnel-www
sudo git clone --depth=1 https://git.abonnel.fr/cedricAbonnel/folio.git /var/www/lan.acegrp.abonnel-www
# Permissions : www-data propriétaire (PHP-FPM tourne en www-data)
sudo chown -R www-data:www-data /var/www/lan.acegrp.abonnel-www
sudo chmod -R g+rwX,o= /var/www/lan.acegrp.abonnel-www
# Restauration du .env
sudo cp /tmp/.env.bak /var/www/lan.acegrp.abonnel-www/.env
sudo chown www-data:www-data /var/www/lan.acegrp.abonnel-www/.env
# Dépendances et migrations (en tant que www-data car le répertoire lui appartient)
cd /var/www/lan.acegrp.abonnel-www
sudo -u www-data composer install --no-dev --optimize-autoloader
sudo -u www-data php database/migrate.php
# Répertoire de sessions
sudo mkdir -p /var/www/lan.acegrp.abonnel-www/.sessions
sudo chown www-data:www-data /var/www/lan.acegrp.abonnel-www/.sessions
sudo chmod 700 /var/www/lan.acegrp.abonnel-www/.sessions
# Autoriser git à opérer sur ce dépôt (multi-utilisateurs)
sudo git config --system --add safe.directory /var/www/lan.acegrp.abonnel-www
Règles à respecter
- Ne jamais écraser le
.envserveur (ni scp, ni réécriture). Indiquer les variables à l'utilisateur pour qu'il les saisisse lui-même. - Ne jamais versionner
data/,.env, ouvendor/dans le dépôt folio. - Toujours bumper la version et mettre à jour le changelog dans le même commit que la PR.
- Dans les pools PHP-FPM, toujours utiliser
user = www-data/group = www-data.cedrixest un admin ordinaire, pas un compte de service. - CSP : le header
Content-Security-Policyest défini dans la config Apache (varlog/server/apache/lan.acegrp.varlog.conf), pas dans PHP. La directivescript-src 'self'interdit les scripts inline — ne jamais écrire de<script>inline dans les templates ; toujours utiliser des fichiers.jsexternes danspublic/assets/js/. Les erreurs CSP mentionnantcontent.jsviennent d'extensions navigateur bloquées par le CSP (comportement normal, pas un bug Folio). Concernant les formulaires HTML : les<form>imbriqués sont invalides — un bouton submit dans un form imbriqué soumet le form parent. Utiliser l'attribut HTML5form="id-du-form"pour associer un bouton à un form situé hors du form englobant.