Pourquoi self-héberger BookStack sur un VPS
BookStack se distingue par sa simplicité : là où d'autres wikis noient l'utilisateur sous les options, il impose une hiérarchie claire — étagères, livres, chapitres, pages — qui rend la documentation navigable immédiatement. Construit sur Laravel, il est léger et facile à maintenir. Auto-hébergé sur VPS, il garde toute votre documentation interne — procédures, runbooks, base de connaissances client — sur votre propre infrastructure, sans abonnement par utilisateur. Pour une agence qui documente ses projets ou une équipe technique qui centralise ses procédures, c'est un wiki privé que vous contrôlez de bout en bout, avec recherche full-text, gestion fine des permissions et éditeur WYSIWYG ou Markdown.
Bénéfices concrets d'un BookStack auto-hébergé
- Structure claire en étagères/livres/chapitres/pages : documentation navigable sans effort.
- Éditeur WYSIWYG et Markdown au choix, avec diagrammes Draw.io intégrés.
- Permissions granulaires par rôle et par livre pour cloisonner les contenus sensibles.
- Recherche full-text rapide sur l'ensemble de la base de connaissances.
- Authentification LDAP, SAML ou OAuth pour s'intégrer à votre annuaire d'entreprise.
- Empreinte légère : un VPS avec 2 Go de RAM suffit pour une documentation d'équipe.
- Aucun abonnement par utilisateur — un nombre sans limite de membres de contributeurs sans surcoût.
Prérequis matériels et logiciels
BookStack est peu exigeant. Un VPS de 1 à 2 vCPU et 2 Go de RAM minimum héberge confortablement la documentation d'une équipe ; avec BookStack et MariaDB tournant ensemble, réserver 2 Go est le plancher recommandé — en dessous, les migrations Laravel au premier démarrage peuvent échouer par manque de mémoire. La consommation grimpe surtout avec le volume d'images uploadées.
Prévoyez 15 à 25 Go de SSD selon la quantité de pièces jointes. Côté logiciel : Docker 24+ et le plugin Compose v2 (docker compose sans tiret), un sous-domaine wiki.votredomaine.com avec un enregistrement A, et un accès SMTP pour les invitations et notifications par e-mail.
BookStack vs alternatives self-hosted
Faites défiler le tableau
| Outil | Modèle | RAM min. | Point fort |
|---|---|---|---|
| BookStack | Laravel + MariaDB | 2 Go | Hiérarchie livres/chapitres, WYSIWYG |
| Wiki.js | Node.js + DB au choix | 512 Mo | Éditeur moderne, Git sync |
| Outline | Node.js + PostgreSQL | 1 Go | Interface Notion-like, API riche |
| Confluence | SaaS / on-premise | 4 Go+ | Intégration Atlassian, mature |
Déployer BookStack avec Docker Compose et SSL
Préparer le VPS et installer Docker
Connectez-vous en SSH puis installez Docker et le plugin Compose :
curl -fsSL https://get.docker.com | sh apt install docker-compose-plugin mkdir -p /opt/bookstack && cd /opt/bookstackVérifiez :
docker compose versiondoit afficher v2.x ou supérieur. L'image communautairelscr.io/linuxserver/bookstackest la plus répandue et la mieux maintenue pour un déploiement conteneurisé.Créer le fichier docker-compose.yml
Créez
/opt/bookstack/docker-compose.ymlavec les deux services — MariaDB et BookStack — sur un réseau dédié :services: mariadb: image: mariadb:10.11 environment: MYSQL_ROOT_PASSWORD: changeme_root MYSQL_DATABASE: bookstack MYSQL_USER: bookstack MYSQL_PASSWORD: changeme_bk volumes: - ./data/mariadb:/var/lib/mysql networks: [bookstack] bookstack: image: lscr.io/linuxserver/bookstack:latest environment: PUID: 1000 PGID: 1000 APP_URL: https://wiki.votredomaine.com DB_HOST: mariadb DB_USER: bookstack DB_PASS: changeme_bk DB_DATABASE: bookstack MAIL_DRIVER: smtp MAIL_HOST: smtp.votredomaine.com MAIL_PORT: 587 MAIL_FROM: [email protected] MAIL_USERNAME: [email protected] MAIL_PASSWORD: votre_mot_de_passe_smtp ports: - "6875:80" volumes: - ./data/bookstack:/config depends_on: [mariadb] networks: [bookstack] networks: bookstack:APP_URLdoit correspondre exactement à l'URL HTTPS finale. Une valeur incorrecte casse les liens internes et les uploads.Lancer la stack et vérifier les logs
docker compose up -d docker compose logs -f bookstackAu premier démarrage, BookStack exécute automatiquement les migrations Laravel pour créer le schéma de la base. Attendez la ligne
Server running on http://0.0.0.0:80avant de continuer — cela prend 30 à 60 secondes.Configurer le reverse proxy et SSL
Avec Caddy (gestion automatique du certificat) :
wiki.votredomaine.com { reverse_proxy localhost:6875 }Redémarrez Caddy :
systemctl reload caddy.Avec Nginx + Certbot :
server { listen 80; server_name wiki.votredomaine.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name wiki.votredomaine.com; ssl_certificate /etc/letsencrypt/live/wiki.votredomaine.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiki.votredomaine.com/privkey.pem; location / { proxy_pass http://127.0.0.1:6875; 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; } }Obtenez le certificat avec
certbot --nginx -d wiki.votredomaine.com.Première connexion et sécurisation du compte admin
Ouvrez
https://wiki.votredomaine.com. Le compte par défaut est[email protected]avec le mot de passepassword. Changez-les immédiatement dans Paramètres → Profil.Vérifiez ensuite que le SMTP fonctionne : Paramètres → Configuration des e-mails → Envoyer un e-mail de test. Si le test échoue, consultez les logs :
docker compose logs bookstack | grep -i mail.
Configuration avancée : SSO, LDAP et SAML
BookStack prend en charge plusieurs mécanismes d'authentification centralisée, configurables via des variables d'environnement dans le docker-compose.yml.
LDAP / Active Directory : ajoutez les variables AUTH_METHOD=ldap, LDAP_SERVER, LDAP_BASE_DN, LDAP_USER_FILTER et LDAP_VERSION. Les utilisateurs se connectent alors avec leurs identifiants d'entreprise sans compte BookStack séparé.
SAML 2.0 (pour des fournisseurs comme Authentik, Keycloak ou Azure AD) : passez AUTH_METHOD=saml2 et renseignez SAML2_IDP_ENTITYID, SAML2_IDP_SSO et SAML2_IDP_SLO. La documentation officielle de BookStack fournit des exemples par fournisseur.
OAuth social (GitHub, Google, Slack) : chaque fournisseur a sa paire de variables *_APP_ID / *_APP_SECRET. Cette option est utile pour des équipes qui souhaitent éviter la gestion de mots de passe sans déployer un serveur LDAP.
Sauvegarder et restaurer BookStack
Une instance BookStack repose sur trois éléments : la base MariaDB, le dossier uploads (images et pièces jointes) et la valeur APP_KEY dans la configuration. Sans l'APP_KEY, les contenus chiffrés sont irrécupérables après restauration.
Script de sauvegarde quotidienne à placer dans /etc/cron.daily/bookstack-backup :
#!/bin/bash
BACKUP_DIR=/var/backups/bookstack
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d)
docker exec $(docker ps -qf name=mariadb) \
mysqldump -u bookstack -pchangeme_bk bookstack \
> $BACKUP_DIR/bookstack-db-$DATE.sql
tar -czf $BACKUP_DIR/bookstack-uploads-$DATE.tar.gz /opt/bookstack/data/bookstack/uploads
find $BACKUP_DIR -mtime +14 -deleteCopiez ensuite ces archives vers un stockage externe (S3, Backblaze B2, ou le stockage objet de votre VPS). Conservez l'APP_KEY dans un gestionnaire de secrets hors serveur — c'est le seul élément qui ne peut pas être recréé.
Dépannage : erreurs courantes
Quelques erreurs reviennent souvent lors d'une installation fraîche ou d'une mise à jour.
Problèmes fréquents et solutions
- Erreur SMTP « Connection refused » ou timeout : vérifiez que
MAIL_PORTcorrespond au port réel (587 pour STARTTLS, 465 pour SSL). Certains serveurs SMTP bloquent le port 25 sortant. Testez la connectivité depuis le conteneur :docker exec -it bookstack curl -v telnet://smtp.votredomaine.com:587. - Permissions sur
storage/: erreur 500 ou page blanche : le dossier/opt/bookstack/data/bookstackdoit appartenir à l'UID 1000 (variablePUID). Corrigez avecchown -R 1000:1000 /opt/bookstack/data/bookstackpuis redémarrez le conteneur. - Lenteur ou timeout avec MariaDB au démarrage : BookStack attend que MariaDB soit prêt. Si le conteneur BookStack redémarre en boucle les premières secondes, c'est normal. Ajoutez un
healthchecksur le servicemariadbdans le Compose ou attendez 30 secondes avant d'inspecter les logs. - Images qui ne s'affichent pas après déplacement :
APP_URLdoit correspondre exactement à l'URL HTTPS publique. Si vous changez de domaine, mettez à jourAPP_URLdans le Compose, redémarrez le conteneur, puis exécutezphp artisan bookstack:update-urldepuis le conteneur pour mettre à jour les URLs stockées en base. - Migrations bloquées au premier démarrage (OOM) : si le VPS dispose de moins de 2 Go de RAM, les migrations Laravel peuvent être tuées par l'OOM killer. Ajoutez un fichier de swap de 2 Go (
fallocate -l 2G /swapfile && mkswap /swapfile && swapon /swapfile) ou augmentez la RAM du VPS avant de relancer.
Mettre à jour BookStack
L'image lscr.io/linuxserver/bookstack:latest reçoit les nouvelles versions peu après leur publication sur GitHub. Pour mettre à jour :
cd /opt/bookstack
docker compose pull
docker compose up -d
docker compose logs -f bookstackLes migrations de base de données sont appliquées automatiquement au démarrage. Consultez les notes de version BookStack avant toute mise à jour majeure : certaines versions introduisent des changements de schéma ou de configuration.
Astuce de sécurité
Configurez une entrée robots.txt ou protégez votre instance BookStack derrière un pare-feu applicatif si elle contient des procédures internes sensibles. BookStack ne propose pas de mode « intranet seulement » par défaut — l'URL publique est accessible à quiconque connaît l'adresse. Pour une documentation vraiment privée, combinez les permissions granulaires de BookStack avec une règle UFW ou un VPN WireGuard qui restreint l'accès au port 443.
Pour aller plus loin
- Héberger Nextcloud sur VPS — stockage cloud et collaboration documentaire.
- Héberger Gitea sur VPS — forge Git auto-hébergée pour vos équipes de développement.
- Authentik sur VPS — SSO open source pour centraliser l'authentification de BookStack et vos autres apps.