docs: ajouter README avec guide d'installation (v1.4.0) Fixes #55.
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
git clone https://git.abonnel.fr/cedricAbonnel/folio mon-site
cd mon-site
composer install --no-dev
2. Configurer l'environnement
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 |
DATA_PATH |
Chemin absolu vers le répertoire des articles (ex. /srv/data/mon-site). Par défaut : <racine>/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_PATHhors 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
createdb monsite
4. Initialiser le schéma et jouer les migrations
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
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/mon-site/public
<Directory /var/www/mon-site/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Le fichier public/.htaccess gère le routage via mod_rewrite. AllowOverride All est requis.
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
# 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.
Le script
scripts/setup.shautomatise 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_PATH/site_settings.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
git pull
composer install --no-dev
php database/migrate.php
Structure du projet
├── 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)
├── 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).