From 6d159e7dda2e2b800da8126e1d59d864c4a17676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Fri, 15 May 2026 12:52:06 +0200 Subject: [PATCH] =?UTF-8?q?fix=20:=20ordre=20require=20config=E2=86=92boot?= =?UTF-8?q?strap=20dans=20login=20et=20logout,=20data/site/=20hors=20git?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - public/login/index.php, login/magic.php, logout.php : config/config.php chargé avant bootstrap.php pour que SESSION_NAME soit défini avant session_start() - data/site/ retiré du suivi git (.gitignore corrigé) : contenu site-spécifique déjà présent dans varlog-data/site/ et fr.abonnel.www-data/site/ - CLAUDE.md : chemins articles corrigés (varlog-data/, fr.abonnel.www-data/) - consignes.md : ajouté (architecture, workflow, règles, procédures déploiement) Co-Authored-By: Claude Sonnet 4.6 --- .gitignore | 1 - CLAUDE.md | 8 +-- consignes.md | 108 ++++++++++++++++++++++++++++++++++++++++ data/site/about.json | 18 ------- data/site/about.md | 39 --------------- data/site/legal.json | 18 ------- data/site/legal.md | 43 ---------------- data/site/licenses.json | 18 ------- data/site/licenses.md | 38 -------------- public/login/index.php | 5 +- public/login/magic.php | 5 +- public/logout.php | 8 ++- 12 files changed, 124 insertions(+), 185 deletions(-) create mode 100644 consignes.md delete mode 100644 data/site/about.json delete mode 100644 data/site/about.md delete mode 100644 data/site/legal.json delete mode 100644 data/site/legal.md delete mode 100644 data/site/licenses.json delete mode 100644 data/site/licenses.md diff --git a/.gitignore b/.gitignore index 10f9ce9..e37deed 100644 --- a/.gitignore +++ b/.gitignore @@ -11,5 +11,4 @@ Thumbs.db # Données des sites (articles, config, cache) — propres à chaque workspace data/* !data/.gitkeep -!data/site/ _cache/ diff --git a/CLAUDE.md b/CLAUDE.md index 609a908..47d3329 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,14 +11,16 @@ Il contient uniquement le code du moteur — pas de données, pas de credentials | Répertoire local | Site distant | Rôle | |-----------------|-------------|------| | `~/Projects/folio/` | — | Copie du dépôt Folio (branche DEV). On code ici. | -| `~/Projects/varlog/` | varlog.a5l.fr | Sync bidirectionnelle des articles varlog. Sert de site de test pour le moteur. | -| `~/Projects/fr.abonnel.www/` | www.abonnel.fr | Sync bidirectionnelle des articles abonnel.fr. A aussi servi au déploiement initial. | +| `~/Projects/varlog/` | varlog.a5l.fr | Workspace varlog (scripts de déploiement/sync). Sert de site de test pour le moteur. | +| `~/Projects/varlog-data/` | varlog.a5l.fr | Articles de varlog. Sync bidirectionnelle. | +| `~/Projects/fr.abonnel.www/` | www.abonnel.fr | Workspace abonnel.fr (scripts de déploiement/sync). | +| `~/Projects/fr.abonnel.www-data/` | www.abonnel.fr | Articles de abonnel.fr. Sync bidirectionnelle. | **abonnel.fr** utilise Folio mais se met à jour seul via son UpdateChecker interne (vérifie `version.txt` sur Gitea). Aucune action manuelle nécessaire côté serveur. ## Articles (`data/`) -Les articles ne sont pas versionnés dans ce dépôt. Ils ont leur propre git local dans chaque workspace site (`~/Projects/varlog/data/`, `~/Projects/fr.abonnel.www/data/`), synchronisé de façon bidirectionnelle avec le serveur distant. +Les articles ne sont pas versionnés dans ce dépôt. Ils ont leur propre dépôt git (`~/Projects/varlog-data/`, `~/Projects/fr.abonnel.www-data/`), synchronisé de façon bidirectionnelle avec le serveur distant. ## Modifier le moteur diff --git a/consignes.md b/consignes.md new file mode 100644 index 0000000..01205d5 --- /dev/null +++ b/consignes.md @@ -0,0 +1,108 @@ +# 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_PATH` vers `~/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 + +1. Travailler sur `dev` dans `~/Projects/folio/` +2. Tester sur varlog.a5l.fr : + ```bash + ~/Projects/varlog/scripts/sync.sh + # puis vérifier sur http://varlog.acegrp.lan (ou varlog.a5l.fr) + ``` +3. Quand `dev` est stable : + - Bumper `public/version.txt` (semver) + - Ajouter une entrée dans `CHANGELOG.md` + - Ouvrir une **PR `dev` → `main`** sur Gitea +4. 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 :** +1. Modifier le code dans `~/Projects/folio/` (local) +2. Déployer et tester : + +```bash +# Rsync moteur (folio → varlog) + sync articles bidirectionnel +~/Projects/varlog/scripts/sync.sh +# puis tester sur http://varlog.acegrp.lan +``` + +3. Si des migrations de schéma BDD sont nécessaires : +```bash +~/Projects/varlog/scripts/db-migrate.sh # exécute le PHP sur varlog via SSH +``` + +4. Si des migrations de contenu sont nécessaires : +```bash +~/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) :** +```bash +~/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 : + +```bash +cp /var/www/lan.acegrp.abonnel-www/.env /tmp/.env.bak +rm -rf /var/www/lan.acegrp.abonnel-www +git clone --depth=1 https://cedricAbonnel:TOKEN@git.abonnel.fr/cedricAbonnel/folio.git /var/www/lan.acegrp.abonnel-www +cp /tmp/.env.bak /var/www/lan.acegrp.abonnel-www/.env +cd /var/www/lan.acegrp.abonnel-www && composer install --no-dev --optimize-autoloader +php database/migrate.php +git -C /var/www/lan.acegrp.abonnel-www config user.email 'cedric@abonnel.fr' +git -C /var/www/lan.acegrp.abonnel-www config user.name 'Cédrix' +``` + +--- + +## Règles à respecter + +- Ne **jamais** écraser le `.env` serveur (ni scp, ni réécriture). Indiquer les variables à l'utilisateur pour qu'il les saisisse lui-même. +- Ne **jamais** versionner `data/`, `.env`, ou `vendor/` dans le dépôt folio. +- Toujours bumper la version **et** mettre à jour le changelog dans le même commit que la PR. diff --git a/data/site/about.json b/data/site/about.json deleted file mode 100644 index 3aa3cd5..0000000 --- a/data/site/about.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "a3d8f2c1-7b4e-4f9a-8c3d-2e5a9b6f1d4c", - "slug": "about", - "title": "À propos", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2021-01-16 04:02:40", - "created_at": "2021-01-16 04:02:40", - "updated_at": "2026-05-13 00:00:00", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "" -} diff --git a/data/site/about.md b/data/site/about.md deleted file mode 100644 index fc749f8..0000000 --- a/data/site/about.md +++ /dev/null @@ -1,39 +0,0 @@ -# À propos - -Qui se cache derrière varlog ? - -Je m'appelle **Cédric**. Passionné d'informatique depuis longtemps, je gère un **HomeLab** à la maison — un petit laboratoire personnel où je fais tourner des serveurs, expérimente des configs réseau et casse des choses pour mieux les comprendre. - -varlog est mon carnet de bord technique. J'y documente ce que je fais, ce que j'apprends, et parfois ce qui tourne mal — les incidents sont souvent les meilleures leçons. - -Le blog a été lancé publiquement aux **JDLL 2025** (Journées Du Logiciel Libre), à Lyon. - -## Ce dont je parle ici - -### HomeLab & infrastructure - -Proxmox, virtualisation, domotique (Zigbee, MQTT, Home Assistant), supervision avec Uptime Kuma, auto-hébergement de services (Gitea, Keycloak…), incidents réseau et leurs post-mortems. - -### Réseaux & télécom - -Passionné par les réseaux mobiles (3G/4G/5G/6G), la fibre optique (50G-PON), les stratégies des opérateurs et les infrastructures qui font fonctionner tout ça sans qu'on y pense. - -### Linux & développement - -Debian au quotidien, scripts, administration système, et un peu de PHP — dont ce blog lui-même, développé maison sous le nom de code *Folio*. - -### Numérique & société - -Souveraineté numérique, données personnelles, IA et plateformes qui monétisent nos contenus — des sujets qui m'intéressent autant qu'ils m'inquiètent. - -### Le reste - -Bricolage, travaux, anecdotes techniques, lectures, liseuses Kobo, et quelques billets qui n'entrent dans aucune case. La vie ne se range pas en catégories. - -## Contact - -Vous pouvez me joindre via le [formulaire de contact](/contact). Je lis tous les messages, même si je ne réponds pas toujours vite. - ---- - -Le contenu de ce blog est publié sous licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) sauf mention contraire. Le moteur *Folio* est distribué sous [licence MIT](/LICENSE). diff --git a/data/site/legal.json b/data/site/legal.json deleted file mode 100644 index e59bdfe..0000000 --- a/data/site/legal.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "b2c7e1f4-4a3d-4e8b-9f2a-1d6c8e3f5a7b", - "slug": "legal", - "title": "Mentions légales", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2021-01-16 04:02:40", - "created_at": "2021-01-16 04:02:40", - "updated_at": "2026-05-13 00:00:00", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "" -} diff --git a/data/site/legal.md b/data/site/legal.md deleted file mode 100644 index 48c8597..0000000 --- a/data/site/legal.md +++ /dev/null @@ -1,43 +0,0 @@ -# Mentions légales - -Conformément à la loi n° 2004-575 du 21 juin 2004 pour la confiance dans l'économie numérique (LCEN). - -## Éditeur du site - -**Responsable de publication :** Cédric Abonnel -**Qualité :** Particulier — site personnel non commercial -**Contact :** [formulaire de contact](/contact) - -## Hébergement - -**Type :** Auto-hébergement sur infrastructure personnelle (HomeLab) -**Exploitant :** Cédric Abonnel -**Fournisseur d'accès à internet :** Infrastructure personnelle auto-hébergée - -## Propriété intellectuelle - -Le **contenu éditorial** de ce site (articles, textes, images produites par l'auteur) est publié sous licence [Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/), sauf mention contraire. - -Le **moteur du site** (*Folio*) est un logiciel libre distribué sous [licence MIT](/LICENSE). - -Les composants tiers (Bootstrap, PHPMailer, police Inter…) sont soumis à leurs licences respectives, détaillées sur la [page des licences](/licenses). - -## Données personnelles (RGPD) - -Ce site est un blog personnel **sans publicité, sans pistage, sans système de commentaires** ni inscription publique. - -Les seules données traitées automatiquement sont les **journaux de connexion du serveur web** (adresse IP, horodatage, page demandée), conservés conformément aux obligations légales (article L34-1 du Code des postes et des communications électroniques — durée maximale : 1 an). - -Ces données ne sont ni vendues, ni transmises à des tiers, ni utilisées à des fins commerciales. - -Conformément au RGPD (règlement UE 2016/679), vous disposez d'un droit d'accès, de rectification et de suppression des données vous concernant. Pour exercer ces droits : [formulaire de contact](/contact). - -## Cookies - -Ce site utilise uniquement un **cookie de session technique**, nécessaire au fonctionnement de l'authentification. Il n'est déposé que lors d'une connexion au compte d'administration et n'est pas utilisé à des fins de suivi ou de profilage. Aucun cookie tiers n'est déposé. - -## Responsabilité - -L'éditeur s'efforce de maintenir les informations publiées à jour et exactes, mais ne peut garantir l'exhaustivité ou l'absence d'erreurs du contenu. - -Les liens vers des sites tiers sont fournis à titre informatif. L'éditeur n'est pas responsable du contenu de ces sites externes. diff --git a/data/site/licenses.json b/data/site/licenses.json deleted file mode 100644 index 26eab7d..0000000 --- a/data/site/licenses.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "uuid": "fdff8ad3-d369-4bd7-bbb9-e14d433868d7", - "slug": "licenses", - "title": "Licences", - "author": "cedric@abonnel.fr", - "published": true, - "published_at": "2021-01-16 04:02:40", - "created_at": "2021-01-16 04:02:40", - "updated_at": "2021-01-16 04:02:40", - "revisions": [], - "cover": "", - "files_meta": [], - "external_links": [], - "seo_title": "", - "seo_description": "", - "og_image": "", - "category": "" -} diff --git a/data/site/licenses.md b/data/site/licenses.md deleted file mode 100644 index e3ea570..0000000 --- a/data/site/licenses.md +++ /dev/null @@ -1,38 +0,0 @@ -# Licences - -Composants logiciels utilisés par ce site et leurs licences. - -## Ce site - -| Composant | Licence | Usage | -|-----------|---------|-------| -| **Folio** — moteur de blog PHP | MIT | Moteur de ce blog — par Cédric Abonnel ([voir la licence](/LICENSE)) | -| **Contenu éditorial** | CC BY 4.0 | Articles et textes du blog — [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/) | - -## Bibliothèques (production) - -| Composant | Version | Licence | Usage | -|-----------|---------|---------|-------| -| **Bootstrap** | 5.3.3 | MIT | Framework CSS/JS — auto-hébergé ([voir la licence](/assets/css/LICENSE-Bootstrap.txt)) | -| **PHPMailer** | 6.12.0 | LGPL-2.1 | Envoi d'e-mails SMTP | -| **phpdotenv** | 5.6.2 | BSD-3-Clause | Variables d'environnement | -| **openid-connect-php** | 1.0.2 | Apache-2.0 | Authentification SSO (OIDC) | -| **Police Inter** | v20 | OFL-1.1 | Typographie — auto-hébergée ([voir la licence](/assets/fonts/LICENSE-Inter.txt)) | - -## Outils de développement - -| Composant | Version | Licence | Usage | -|-----------|---------|---------|-------| -| **PHPStan** | 1.12.32 | MIT | Analyse statique PHP | -| **PHP-CS-Fixer** | 3.89.1 | MIT | Formatage du code | -| **Claude Code CLI** | — | Commercial | Outil de développement (Anthropic) — [Conditions d'utilisation](https://www.anthropic.com/legal/aup) | - -## Infrastructure - -| Composant | Licence | Usage | -|-----------|---------|-------| -| **PHP 8.3** | PHP License v3.01 | Langage côté serveur | -| **PostgreSQL** | PostgreSQL License | Base de données relationnelle | -| **Apache HTTP Server** | Apache-2.0 | Serveur web | - - diff --git a/public/login/index.php b/public/login/index.php index 3c84d1f..43c669a 100644 --- a/public/login/index.php +++ b/public/login/index.php @@ -35,9 +35,12 @@ if (!function_exists('url')) { } } +if (!defined('BASE_PATH')) { + define('BASE_PATH', dirname(__DIR__, 2)); +} require_once dirname(__DIR__, 2) . '/vendor/autoload.php'; -require_once dirname(__DIR__, 2) . '/bootstrap.php'; require_once dirname(__DIR__, 2) . '/config/config.php'; +require_once dirname(__DIR__, 2) . '/bootstrap.php'; require_once dirname(__DIR__, 2) . '/src/SiteSettings.php'; require_once dirname(__DIR__, 2) . '/src/mailer.php'; diff --git a/public/login/magic.php b/public/login/magic.php index cc07de7..e43135e 100644 --- a/public/login/magic.php +++ b/public/login/magic.php @@ -5,9 +5,12 @@ // version : 20251011 declare(strict_types=1); +if (!defined('BASE_PATH')) { + define('BASE_PATH', dirname(__DIR__, 2)); +} require_once dirname(__DIR__, 2) . '/vendor/autoload.php'; -require_once dirname(__DIR__, 2) . '/bootstrap.php'; require_once dirname(__DIR__, 2) . '/config/config.php'; +require_once dirname(__DIR__, 2) . '/bootstrap.php'; // si tu as un service pour ouvrir une session diff --git a/public/logout.php b/public/logout.php index 94f2166..110b1d5 100644 --- a/public/logout.php +++ b/public/logout.php @@ -4,12 +4,10 @@ declare(strict_types=1); define('BASE_PATH', realpath(__DIR__ . '/../')); -if (session_status() === PHP_SESSION_NONE) { - session_start(); -} - -require_once BASE_PATH . '/src/auth.php'; +require_once BASE_PATH . '/vendor/autoload.php'; require_once BASE_PATH . '/config/config.php'; +require_once BASE_PATH . '/bootstrap.php'; +require_once BASE_PATH . '/src/auth.php'; $logoutUrl = ssoLogoutUrl();