Why Your Homelab Needs a Documentation Wiki
Every homelab accumulates complexity. VLAN assignments, firewall rules, Docker compose stacks, ZFS pool layouts, backup schedules, Proxmox bridge configurations — you remember them today, but will you remember them six months from now after a RouterOS update? Your homelab documentation should live somewhere searchable, editable, and organized, not scattered across sticky notes and SSH history.
BookStack is a free and open-source wiki platform built on PHP and Laravel. It organizes content in a clean hierarchy: Shelf → Book → Chapter → Page. That maps naturally to how homelab knowledge is structured — group related documentation on shelves, create a book per project or subsystem, write detailed pages per configuration.
This guide covers everything you need to run BookStack in Docker Compose on your homelab: MariaDB backend, Traefik reverse proxy with automatic HTTPS, LDAP authentication for team access, and a practical backup strategy.
Why BookStack Over Other Documentation Tools
BookStack is not the only documentation tool in the self-hosted space. Here is how it compares:
- BookStack: Hierarchical out of the box, WYSIWYG + Markdown editor, built-in search, role-based permissions, LDAP/OAuth/SAML authentication, PDF export, no build step
- Wiki.js: Modular and extensible, Git-backed storage, but requires a Node.js runtime and client-side rendering that can feel sluggish on lower-end hardware
- Docusaurus: Static site generator — excellent for developer docs but requires a build step and Git-based workflow; covered in a previous post
- Outline: Modern UI and real-time editing, but requires MinIO/S3 object storage and a Redis instance, adding operational overhead
For a homelab, BookStack wins because it has no external dependencies beyond a database. The linuxserver.io Docker image keeps maintenance near zero, the WYSIWYG editor means you do not need Markdown fluency to contribute, and the hierarchical shelf/book/chapter/page model mirrors real infrastructure organization.
Prerequisites
- Docker and Docker Compose v2 installed on a Linux host
- A working reverse proxy (Traefik or Nginx) for HTTPS termination
- Port 80 and 443 or internal reverse proxy network access
Deploying BookStack with Docker Compose
The standard setup uses two containers: MariaDB for database storage and the linuxserver.io BookStack image.
Create a directory and the compose file:
|
|
|
|
Replace change-this-root-password and change-this-db-password with strong random values:
|
|
For production, consider using Docker secrets or an .env file excluded from version control instead of hardcoding passwords in the compose file.
Start the stack:
|
|
Wait for the health check to pass and the BookStack container to initialize the database schema. The first startup takes 30–60 seconds.
Traefik Reverse Proxy Configuration
The compose file above assumes Traefik runs on an external traefik network. If you use a different reverse proxy, adjust the network and labels accordingly.
For Nginx Proxy Manager or plain Nginx, add an upstream block:
|
|
Note that BookStack serves on port 80 inside the container. If you need to bind to a host port instead of using a reverse proxy network, add ports: - "6875:80" to the bookstack service.
Initial Setup and Configuration
Access your BookStack instance at the configured domain. Navigate to /register to create the first admin account.
Once logged in, go to Settings → Features to configure:
- Site name: “GnTech Homelab Docs” or whatever fits your lab
- Allow registration: Disable after creating accounts for team members
- Default language: Set per user or globally
Configuring LDAP Authentication
If you run a directory service (Active Directory, OpenLDAP, or Authentik), BookStack supports LDAP SSO out of the box. Add these environment variables to the bookstack service:
|
|
Restart the stack after adding LDAP config:
|
|
Users authenticate with their domain credentials. BookStack maps their LDAP group memberships to roles automatically.
Configuring SMTP for Email Notifications
BookStack can send password reset emails and page notifications. Configure SMTP under Settings → Mail, or inject via environment variables:
|
|
Organizing Your Homelab Documentation
A well-structured wiki is easier to maintain. Here is a suggested hierarchy for homelab documentation:
📚 Networking (Shelf)
├── VLAN Layout (Book)
│ ├── VLAN IDs and Purposes (Page)
│ ├── Firewall Rules (Page)
│ └── DHCP Scopes (Page)
├── MikroTik Config (Book)
│ ├── RouterOS 7 Setup (Page)
│ ├── BGP Peering (Page)
│ └── WireGuard VPN (Page)
└── DNS Records (Book)
├── Internal Zones (Page)
└── Pi-hole / Unbound (Page)
📚 Proxmox (Shelf)
├── Host Configuration (Book)
├── VM Templates (Book)
└── Backup Strategy (Book)
├── PBS Setup (Page)
└── Offsite Replication (Page)
📚 Docker (Shelf)
├── Compose Stacks (Book)
├── Networking (Book)
└── Security (Book)
BookStack supports code blocks with syntax highlighting for configs, inline image uploads for network diagrams, and file attachments for PDF documentation. The search bar indexes all page content including code blocks, so you can find that one firewall rule or compose override file in seconds.
Backup and Maintenance
BookStack stores content in MariaDB and file uploads in the /config volume. A complete backup requires both.
Automated Database Backup
Create a systemd timer or cron job to dump the database daily:
|
|
Make it executable and set up a cron entry:
|
|
Restore Procedure
|
|
Updating BookStack
Since we use the linuxserver.io image, updating is straightforward:
|
|
The image auto-runs database migrations on startup, so the schema stays current. Check the BookStack release notes before major version bumps.
Conclusion
BookStack turns the chore of documentation into a habit. With Docker Compose, you go from zero to a fully functional homelab wiki in under ten minutes. Traefik handles TLS, LDAP handles authentication, and a five-line backup script protects your data.
Start by documenting your VLAN layout and firewall rules — the things you most frequently reference. Then expand into Proxmox configs, Docker compose stacks, and recovery procedures. Your future self will thank you.
Related reading: