Installation

Prérequis

PHP 8.0+

Extensions requises :

Extension Usage
pdo_sqlite Base de données SQLite (recommandé)
pdo_mysql Base de données MySQL (alternative)
json Traitement des données JSON
mbstring Gestion des caractères Unicode

Vérifiez votre version de PHP et les extensions installées :

php -v
php -m | grep -E "(pdo_sqlite|pdo_mysql|json|mbstring)"

Node.js 18+

Requis uniquement pour la compilation du frontend (CSS et JavaScript).

node -v
npm -v

Serveur web

  • Apache 2.4+ avec mod_rewrite activé
  • ou Nginx 1.18+

Installation rapide

# Cloner le dépôt
git clone https://inligit.fr/cap-rel/marginaliamd.git
cd marginaliamd

# Compiler le frontend
cd frontend && npm install && npm run build && cd ..

# Créer les répertoires de données
mkdir -p data/{documents,versions,ratelimit}

# Créer le fichier de configuration
cp htdocs/includes/config.example.php data/config.local.php

Éditez ensuite data/config.local.php avec vos paramètres (voir la page Configuration).

Installation détaillée

1. Téléchargement

Via Git :

git clone https://inligit.fr/cap-rel/marginaliamd.git
cd marginaliamd

Ou via archive : téléchargez l'archive depuis le dépôt et décompressez-la.

2. Compilation du frontend

Le frontend utilise Vite avec TailwindCSS et DaisyUI. Les fichiers compilés sont placés dans htdocs/assets/.

cd frontend
npm install
npm run build
cd ..

Fallback CDN : Si les assets ne sont pas compilés, l'application utilise automatiquement les CDN TailwindCSS et DaisyUI. La compilation locale est cependant recommandée pour la performance et l'autonomie.

3. Répertoires de données

Créez la structure de données en dehors du répertoire web :

mkdir -p data/{documents,versions,ratelimit}

Structure attendue :

marginaliamd/
├── data/               # Hors du document root
│   ├── documents/      # Fichiers Markdown
│   ├── versions/       # Versions archivées
│   ├── ratelimit/      # Données de limitation de débit
│   └── config.local.php
└── htdocs/             # Document root du vhost

4. Configuration

Copiez le fichier de configuration d'exemple :

cp htdocs/includes/config.example.php data/config.local.php

Éditez data/config.local.php. Les paramètres essentiels sont détaillés dans la page Configuration.

Le mécanisme de chargement cherche config.local.php automatiquement dans plusieurs emplacements. L'emplacement recommandé est data/config.local.php.

Variable d'environnement : Pour les déploiements avec symlinks, vous pouvez définir la variable d'environnement MARGINALIA_DATA pointant vers le dossier data/. C'est la méthode la plus fiable.

5. Mot de passe administrateur

Générez le hash bcrypt de votre mot de passe :

php -r "echo password_hash('VotreMotDePasse', PASSWORD_BCRYPT) . PHP_EOL;"

Copiez le résultat dans data/config.local.php :

define('ADMIN_PASSWORD_HASH', '$2y$10$...');

6. Serveur web

Apache

Configuration du VirtualHost :

<VirtualHost *:443>
    ServerName docs.exemple.fr
    DocumentRoot /var/www/marginaliamd/htdocs

    <Directory /var/www/marginaliamd/htdocs>
        AllowOverride All
        Require all granted
    </Directory>

    <Directory /var/www/marginaliamd/data>
        Require all denied
    </Directory>
</VirtualHost>

Activez le site :

sudo a2ensite marginaliamd.conf
sudo a2enmod rewrite
sudo systemctl reload apache2

Un fichier .htaccess est fourni dans htdocs/ pour la réécriture d'URL.

Nginx

server {
    listen 443 ssl;
    server_name docs.exemple.fr;
    root /var/www/marginaliamd/htdocs;
    index view.php index.php;

    location ~ /\. {
        deny all;
    }

    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location / {
        try_files $uri $uri/ /view.php?$query_string;
    }
}

7. Permissions

sudo chown -R www-data:www-data /var/www/marginaliamd
sudo chmod -R 755 /var/www/marginaliamd
sudo chmod -R 775 /var/www/marginaliamd/data

Vérifiez que le répertoire data/ n'est pas accessible depuis le web.

8. Base de données

SQLite (recommandé)

Aucune action requise. La base de données est créée automatiquement lors de la première connexion à l'interface d'administration. Le fichier data/marginalia.db sera généré avec toutes les tables nécessaires.

MySQL

Créez la base de données au préalable :

CREATE DATABASE marginalia CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'marginalia_user'@'localhost' IDENTIFIED BY 'votre_mot_de_passe';
GRANT ALL PRIVILEGES ON marginalia.* TO 'marginalia_user'@'localhost';
FLUSH PRIVILEGES;

Les tables sont créées automatiquement à la première connexion admin.

Première connexion

  1. Accédez à votre instance : https://docs.exemple.fr/
  2. Si des éléments manquent (base de données, répertoires), une alerte s'affiche sur la page d'accueil
  3. Cliquez sur Accès administration ou accédez à https://docs.exemple.fr/admin/
  4. Entrez le mot de passe configuré dans config.local.php
  5. La base de données est initialisée automatiquement

Page d'accueil avec l'alerte d'installation incomplète et le bouton d'accès à l'administration

Rendez-vous ensuite dans Vérifications pour contrôler l'état du système (version PHP, extensions, permissions, base de données).

Page de vérifications système dans l'interface d'administration

Mise à jour

1. Sauvegarde

cp data/marginalia.db data/marginalia.db.backup
cp data/config.local.php data/config.local.php.backup

2. Mise à jour du code

git pull origin main

3. Recompilation du frontend

cd frontend && npm install && npm run build && cd ..

4. Migrations

Les migrations de base de données sont appliquées automatiquement. Consultez le CHANGELOG pour d'éventuelles instructions spécifiques.