---
title: "Installation"
weight: 10
description: "Téléchargement, installation, configuration du serveur web et première connexion."
---

# 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 :

```bash
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).

```bash
node -v
npm -v
```

### Serveur web

- Apache 2.4+ avec `mod_rewrite` activé
- ou Nginx 1.18+

## Installation rapide

```bash
# 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](/marginaliamd/configuration)).

## Installation détaillée

### 1. Téléchargement

Via Git :

```bash
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/`.

```bash
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 :

```bash
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 :

```bash
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](/marginaliamd/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 :

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

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

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

### 6. Serveur web

#### Apache

Configuration du VirtualHost :

```apache
<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 :

```bash
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

```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

```bash
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 :

```sql
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](screenshots/installation-incomplete.webp)

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](screenshots/verifications-systeme.webp)

## Mise à jour

### 1. Sauvegarde

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

### 2. Mise à jour du code

```bash
git pull origin main
```

### 3. Recompilation du frontend

```bash
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.
