# Bookstack

# Installation de Bookstack avec Docker : wiki personnel et documentation libre

## Contexte du projet

J'ai installé Bookstack sur un vps pour deux usages principaux : la prise de notes personnelles et la création de documentation libre que je partage publiquement (guides d'installation, tutoriels, bonnes pratiques).

**Configuration :**
- Docker et Docker Compose
- Sous-domaine : book.mon-domaine.fr
- Certificat SSL Let's Encrypt

## Pourquoi Bookstack

Bookstack est une plateforme de documentation open source, simple et efficace. Son organisation en Étagères → Livres → Chapitres → Pages permet de structurer clairement la documentation.

**Avantages pour mon usage :**

- **Prise de notes personnelles** : Doc technique, procédures clients ...
- **Documentation libre** : guides techniques que je rends publics pour aider la communauté
- **Éditeur WYSIWYG** : édition visuelle intuitive
- **Gestion des permissions** : pages privées pour mes notes, publiques pour la documentation partagée
- **Export** : PDF, HTML, Markdown pour diffuser facilement
- **Recherche puissante** : retrouver rapidement n'importe quelle information

## Pourquoi Docker

Docker simplifie l'installation en empaquetant Bookstack et sa base de données dans des conteneurs prêts à l'emploi. Au lieu de configurer manuellement PHP, MariaDB, Nginx et toutes les dépendances, Docker gère tout automatiquement. Résultat : installation en 10 minutes, mises à jour simplifiées, et facilité de migration vers un autre serveur.

**Projet Docker officiel :** https://github.com/linuxserver/docker-bookstack

## Préparation du serveur

Connexion SSH et mise à jour :

```bash
ssh debian@votre-ip-serveur
sudo apt update && sudo apt upgrade -y
```

## Installation de Docker

Installation de Docker et Docker Compose :

```bash
# Ajouter le dépôt Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Installation
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
```

Vérification :

```bash
docker --version
docker-compose --version
```

## Configuration Docker Compose

Création de la structure :

```bash
sudo mkdir -p /opt/bookstack
cd /opt/bookstack
sudo nano docker-compose.yml
```

Configuration `docker-compose.yml` :

```yaml
version: '3'

services:
  bookstack-db:
    image: mariadb:10.11
    container_name: bookstack-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: MotDePasseRootSecurise123
      MYSQL_DATABASE: bookstack
      MYSQL_USER: bookstack
      MYSQL_PASSWORD: MotDePasseBookstackSecurise123
    volumes:
      - ./db:/var/lib/mysql
    networks:
      - bookstack-network

  bookstack-app:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack-app
    restart: always
    depends_on:
      - bookstack-db
    environment:
      PUID=1000
      PGID=1000
      TZ=Europe/Paris
      APP_URL=https://book.mon-domaine.fr
      DB_HOST=bookstack-db
      DB_PORT=3306
      DB_DATABASE=bookstack
      DB_USERNAME=bookstack
      DB_PASSWORD=MotDePasseBookstackSecurise123
    volumes:
      - ./bookstack:/config
    ports:
      - "8080:80"
    networks:
      - bookstack-network

networks:
  bookstack-network:
    driver: bridge
```

**Changez les mots de passe** avant de démarrer les conteneurs.

**Explication de la configuration :**

**bookstack-db (Base de données) :**
- `mariadb:10.11` : version stable de MariaDB
- `volumes: ./db` : stocke la base de données dans le dossier local
- Variables d'environnement pour la connexion

**bookstack-app (Application) :**
- Image officielle LinuxServer.io
- `ports: 8080:80` : Bookstack accessible sur le port 8080
- `APP_URL` : votre domaine (avec https://)
- `TZ` : fuseau horaire
- `volumes: ./bookstack` : stocke les fichiers et configuration

Démarrage des conteneurs :

```bash
cd /opt/bookstack
sudo docker-compose up -d
```

Vérification après 30 secondes :

```bash
sudo docker-compose ps
```

Les deux conteneurs (bookstack-app et bookstack-db) doivent être "Up".

## Configuration DNS

Dans l'interface de votre registrar, ajoutez un enregistrement A :

- Sous-domaine : `book`
- Type : `A`
- Cible : l'IP de votre serveur

La propagation DNS prend entre 5 minutes et 24 heures. Vérification :

```bash
dig book.mon-domaine.fr
```

## Installation de Nginx comme reverse proxy

Nginx sert de passerelle entre Internet et le conteneur Docker :

```bash
sudo apt install nginx certbot python3-certbot-nginx -y
```

Configuration Nginx :

```bash
sudo nano /etc/nginx/sites-available/bookstack
```

```nginx
server {
    listen 80;
    server_name book.mon-domaine.fr;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        client_max_body_size 50M;
    }
}
```

Le paramètre `client_max_body_size 50M` permet l'upload de fichiers volumineux (screenshots, PDF).

Activation :

```bash
sudo ln -s /etc/nginx/sites-available/bookstack /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

## Installation du certificat SSL

```bash
sudo certbot --nginx -d book.mon-domaine.fr
```

Certbot configure automatiquement HTTPS et le renouvellement automatique du certificat tous les 3 mois.

## Première connexion

Accès via navigateur : `https://book.mon-domaine.fr`

**Identifiants par défaut :**
- Email : `admin@admin.com`
- Mot de passe : `password`

**Changez immédiatement ces identifiants :**
1. Avatar en haut à droite → **Settings**
2. **Change Password**
3. Changez l'email administrateur


## Gestion des permissions dans Bookstack

Pour rendre une page publique :

1. Ouvrez la page
2. Cliquez sur les trois points → **Permissions**
3. Activez **Public Access**
4. Choisissez le niveau : **View** (lecture seule pour le public)

Pour garder une page privée, ne cochez pas "Public Access". Seul vous (administrateur) pourrez la voir.

Vous pouvez également créer des **rôles** (éditeur, lecteur) si vous voulez partager certains contenus avec des collaborateurs spécifiques.

## Avantages de Docker pour Bookstack

**Installation simplifiée :**
- 10 minutes au lieu de 1 heure avec installation manuelle
- Pas de configuration PHP/MariaDB/extensions à gérer
- Tout est pré-configuré et optimisé

**Maintenance facilitée :**
Mise à jour en deux commandes :

```bash
cd /opt/bookstack
sudo docker-compose pull
sudo docker-compose up -d
```

**Portabilité :**
Migration vers un autre serveur simplissime : copiez le dossier `/opt/bookstack`, relancez `docker-compose up -d`, c'est tout.

**Isolation :**
Bookstack et sa base de données sont isolés du reste du système. Pas de conflit avec d'autres applications.

## Sauvegardes

Script de sauvegarde simple :

```bash
#!/bin/bash
DATE=$(date +%Y%m%d)
cd /opt/bookstack
sudo tar -czf /backup/bookstack-$DATE.tar.gz bookstack/ db/
```

Cette archive contient tous les fichiers, uploads et la base de données.

Automatisez avec un cron quotidien :

```bash
sudo crontab -e
```

Ajoutez :

```
0 2 * * * /chemin/vers/backup-bookstack.sh
```

## Commandes utiles

Surveillance des conteneurs :

```bash
cd /opt/bookstack
sudo docker-compose ps
sudo docker-compose logs -f bookstack-app
```

Redémarrage :

```bash
sudo docker-compose restart
```

Arrêt/démarrage :

```bash
sudo docker-compose stop
sudo docker-compose start
```

Mise à jour :

```bash
sudo docker-compose pull
sudo docker-compose up -d
```

## Export et partage de documentation

Pour partager un guide publié sur Bookstack :

**Export PDF :**
1. Ouvrez le livre ou la page
2. Trois points → **Export** → **Export as PDF**
3. Partagez le PDF généré

**Lien direct :**
Si la page est publique, copiez simplement l'URL. Les visiteurs peuvent la consulter sans compte.

**Export Markdown :**
Trois points → **Export** → **Export as Markdown**
Pratique pour publier sur GitHub ou un blog.

## Mon retour d'expérience

Bookstack avec Docker est devenu central dans mon organisation. La distinction entre notes privées et documentation publique fonctionne parfaitement grâce au système de permissions.

**Points positifs :**

- Installation Docker ultra-rapide (10 minutes)
- Interface intuitive, pas de courbe d'apprentissage
- Gestion des permissions simple et efficace
- Export PDF propre pour partager des guides
- Recherche rapide et efficace
- Léger et rapide, même sur un petit VPS

**Points d'attention :**

L'éditeur WYSIWYG est excellent pour la documentation technique, mais si vous avez l'habitude de Markdown pur, il peut sembler moins flexible. Il existe un mode Markdown, mais l'éditeur WYSIWYG reste le plus intégré.

Les images uploadées sont stockées dans le conteneur. Pensez à bien sauvegarder le dossier `/opt/bookstack/bookstack`.

## Conclusion

Bookstack avec Docker est la solution idéale pour gérer à la fois de la documentation personnelle et des guides publics. L'installation prend 10 minutes grâce à Docker, et le système de permissions permet de séparer clairement contenu privé et contenu public.

Pour organiser le besoin de documenter et également partager Bookstack offre la flexibilité parfaite.

**Projet officiel :** https://github.com/linuxserver/docker-bookstack