Team documentation tends to die in one of two ways: scattered across chat threads nobody can search, or buried in a wiki so clunky that nobody updates it. BookStack is the rare self-hosted wiki that people actually use. Content lives on shelves, in books, in chapters and pages — a structure everyone understands without training. And it barely needs any server.
Why BookStack
- Obvious structure. Books and chapters instead of a flat pile of pages.
- Editing that doesn't scare anyone. A WYSIWYG editor by default, Markdown for those who prefer it.
- Proper permissions. Roles per shelf, book or page — keep HR docs away from contractors.
- Company login. LDAP, SAML2 and OpenID Connect are built in.
- Your data. Everything sits in a MariaDB database and a folder on your server.
It's not the right tool for everything. Developer docs that should change together with code belong in the repository, not in a wiki.
What it needs
BookStack is light. For most teams, Micro-IP — 1 vCPU, 2 GB, $10/month — is more than enough. The dedicated IP is what lets colleagues reach it over HTTPS on your domain. Disk grows with uploaded screenshots and PDFs, not with page count.
Install with Docker Compose
We'll use the widely used LinuxServer.io images. First generate an application key:
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey
Copy the base64:... value it prints. Then create docker-compose.yml:
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
environment:
- PUID=1000
- PGID=1000
- APP_URL=https://wiki.example.com
- APP_KEY=base64:paste-your-key-here
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=bookstack
- DB_USERNAME=bookstack
- DB_PASSWORD=change-me
volumes:
- ./bookstack:/config
ports:
- 127.0.0.1:6875:80
depends_on:
- db
restart: unless-stopped
db:
image: lscr.io/linuxserver/mariadb:latest
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=change-me-too
- MYSQL_DATABASE=bookstack
- MYSQL_USER=bookstack
- MYSQL_PASSWORD=change-me
volumes:
- ./db:/config
restart: unless-stopped
docker compose up -d
docker compose logs -f bookstack
APP_URL must match the address people will use, including https://. Get it wrong and images and links break in odd ways. More on Compose in our stack deployment guide.
HTTPS and first login
Point a subdomain at the server (how), put nginx in front of 127.0.0.1:6875, and add a certificate with certbot — the reverse proxy guide walks through it.
Then log in with the default account: admin@admin.com / password. Change the email and password right away, before you share the link. Everyone else gets their own account or signs in through your identity provider.
Backups
Two things to protect: the database and the uploads inside ./bookstack. A nightly job like this covers the database:
docker compose exec -T db mysqldump -u bookstack -pchange-me bookstack > /var/backups/bookstack.sql
Then back up /var/backups and the compose folder off-site — our restic guide does exactly that. Managed Backups add daily whole-server restore points on top.
Upkeep
Updating is docker compose pull && docker compose up -d. BookStack runs its database migrations on start. Read the release notes before major versions; they're short and clear.
If your team also wants a place for tickets and code, a self-hosted Git server sits nicely next to it on the same kind of plan.
Comments
No comments yet. Be the first.