From 5828aac4f52d9daced834ef4bb11a6a775606f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Thu, 14 May 2026 09:49:40 +0200 Subject: [PATCH 1/2] docs: ajouter README avec guide d'installation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Couvre prérequis, installation pas-à-pas (clone, .env, BDD, migrations, vhost Apache/Nginx, permissions), paramètres du site, mise à jour et structure du projet. Fixes #55. Co-Authored-By: Claude Sonnet 4.6 --- README.md | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..31d1ab9 --- /dev/null +++ b/README.md @@ -0,0 +1,146 @@ +# Folio + +Moteur de blog PHP minimaliste — articles Markdown, authentification SSO (OIDC) ou lien magique, commentaires, recherche, flux RSS. + +--- + +## Prérequis + +- PHP ≥ 8.2 avec les extensions `pdo`, `pdo_pgsql`, `mbstring`, `openssl` +- PostgreSQL ≥ 14 +- Composer +- Apache avec `mod_rewrite` (ou Nginx — voir ci-dessous) + +## Installation + +### 1. Cloner et installer les dépendances + +```bash +git clone https://git.abonnel.fr/cedricAbonnel/folio mon-site +cd mon-site +composer install --no-dev +``` + +### 2. Configurer l'environnement + +```bash +cp .env.example .env +``` + +Remplir les valeurs dans `.env` : + +| Variable | Description | +|---|---| +| `APP_URL` | URL publique du site (`https://example.com`) | +| `ADMIN_EMAIL` | Email de l'administrateur principal | +| `SESSION_NAME` | Nom du cookie de session — doit être unique par instance | +| `OIDC_ISSUER` / `OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` | SSO OpenID Connect | +| `DB_DSN` / `DB_USER` / `DB_PASS` | Connexion PostgreSQL | +| `SMTP_*` | Serveur email sortant (commentaires, contact, lien magique) | +| `CONTACT_EMAIL` | Destinataire du formulaire de contact | + +### 3. Créer la base de données + +```bash +createdb monsite +``` + +### 4. Initialiser le schéma et jouer les migrations + +```bash +php database/migrate.php +``` + +Ce script crée toutes les tables et applique les migrations dans l'ordre. À relancer après chaque mise à jour. + +### 5. Configurer le vhost Apache + +```apache + + ServerName example.com + DocumentRoot /var/www/mon-site/public + + + AllowOverride All + Require all granted + + +``` + +Le fichier `public/.htaccess` gère le routage via `mod_rewrite`. `AllowOverride All` est requis. + +
+Nginx + +```nginx +server { + listen 443 ssl; + server_name example.com; + root /var/www/mon-site/public; + index index.php; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + fastcgi_pass unix:/run/php/php8.2-fpm.sock; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + include fastcgi_params; + } +} +``` + +
+ +### 6. Permissions fichiers + +```bash +chown -R www-data:www-data data/ +chmod 640 .env +``` + +PHP-FPM tourne en `www-data`. Le `.env` doit être lisible par `www-data` mais pas par les autres (`640`, owner `user:www-data`). + +### 7. Paramètres du site + +Au premier lancement, se connecter en tant qu'admin et aller dans **Administration → Paramètres du site** pour définir le titre, le claim, la langue et la licence. + +Ou créer directement `data/site_settings.json` : + +```json +{ + "site_title": "Mon site", + "site_claim": "Un blog propulsé par Folio", + "site_lang": "fr-FR", + "site_license_label": "CC BY 4.0", + "site_license_url": "https://creativecommons.org/licenses/by/4.0/", + "posts_per_page": 12 +} +``` + +--- + +## Mise à jour + +```bash +git pull +composer install --no-dev +php database/migrate.php +``` + +## Structure du projet + +``` +├── config/ Configuration (charge .env, définit APP_URL) +├── data/ Articles, cache, settings (non versionné) +├── database/ Schéma SQL et runner de migrations +├── docs/ Documentation technique +├── public/ Racine web (index.php, assets, .htaccess) +├── src/ Code applicatif (PSR-4, App\) +└── templates/ Vues PHP +``` + +## Licence + +[MIT](LICENSE) From 3965be6854a5ff21553c6d57922734338c17ac1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Fri, 15 May 2026 09:36:37 +0200 Subject: [PATCH 2/2] =?UTF-8?q?docs=20:=20mettre=20=C3=A0=20jour=20README?= =?UTF-8?q?=20=E2=80=94=20DATA=5FPATH,=20permissions,=20setup.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajouter DATA_PATH dans le tableau des variables .env avec note prod - Étape 6 : permissions sur DATA_PATH (hors document root) au lieu de data/ - Étape 7 : référencer $DATA_PATH/site_settings.json - Mentionner scripts/setup.sh - Structure : retirer data/ (géré par DATA_PATH), ajouter scripts/ Co-Authored-By: Claude Sonnet 4.6 --- README.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 31d1ab9..4154806 100644 --- a/README.md +++ b/README.md @@ -34,11 +34,14 @@ Remplir les valeurs dans `.env` : | `APP_URL` | URL publique du site (`https://example.com`) | | `ADMIN_EMAIL` | Email de l'administrateur principal | | `SESSION_NAME` | Nom du cookie de session — doit être unique par instance | +| `DATA_PATH` | Chemin absolu vers le répertoire des articles (ex. `/srv/data/mon-site`). Par défaut : `/data` | | `OIDC_ISSUER` / `OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` | SSO OpenID Connect | | `DB_DSN` / `DB_USER` / `DB_PASS` | Connexion PostgreSQL | | `SMTP_*` | Serveur email sortant (commentaires, contact, lien magique) | | `CONTACT_EMAIL` | Destinataire du formulaire de contact | +> En production, placer `DATA_PATH` **hors du document root** (ex. `/srv/data/mon-site`) pour que les articles ne soient pas accessibles directement via le serveur web. + ### 3. Créer la base de données ```bash @@ -96,17 +99,24 @@ server { ### 6. Permissions fichiers ```bash -chown -R www-data:www-data data/ +# Répertoire des articles +mkdir -p /srv/data/mon-site +chown -R www-data:www-data /srv/data/mon-site + +# .env lisible par www-data uniquement +chown user:www-data .env chmod 640 .env ``` -PHP-FPM tourne en `www-data`. Le `.env` doit être lisible par `www-data` mais pas par les autres (`640`, owner `user:www-data`). +PHP-FPM tourne en `www-data`. Le `.env` doit être lisible par `www-data` mais pas par les autres. + +> Le script `scripts/setup.sh` automatise la vérification des prérequis, la création des répertoires et les droits. ### 7. Paramètres du site Au premier lancement, se connecter en tant qu'admin et aller dans **Administration → Paramètres du site** pour définir le titre, le claim, la langue et la licence. -Ou créer directement `data/site_settings.json` : +Ou créer directement `$DATA_PATH/site_settings.json` : ```json { @@ -132,15 +142,17 @@ php database/migrate.php ## Structure du projet ``` -├── config/ Configuration (charge .env, définit APP_URL) -├── data/ Articles, cache, settings (non versionné) +├── config/ Configuration (charge .env, définit APP_URL et DATA_PATH) ├── database/ Schéma SQL et runner de migrations ├── docs/ Documentation technique ├── public/ Racine web (index.php, assets, .htaccess) -├── src/ Code applicatif (PSR-4, App\) +├── scripts/ Scripts utilitaires (setup.sh, migrations de contenu) +├── src/ Code applicatif └── templates/ Vues PHP ``` +Les articles sont stockés dans `DATA_PATH` (hors dépôt git). + ## Licence [MIT](LICENSE)