Stack request: BookStack — self-hosted documentation wiki
bookstackapp.com — a simple, self-hosted documentation/wiki platform organised into a Books → Chapters → Pages hierarchy, with WYSIWYG + Markdown editing, full-text search, and diagrams.net integration. MIT-licensed.
Why it fits
- Knowledge & docs category — a more structured, documentation-oriented wiki than the existing Wiki.js, with a gentle learning curve. Good fit for course material / handbooks.
- Has built-in local auth (username/password + optional LDAP/OIDC), so it works cleanly behind Cloudflare Access without a mandatory external identity provider — simpler than Outline.
Suggested metadata
| Field |
Value |
| Category |
knowledge |
| Subdomain |
bookstack |
| Image |
lscr.io/linuxserver/bookstack (LinuxServer.io) — multi-arch verified (amd64 + arm64) |
| Port |
container 80 — assign next free host port per the services.yaml collision check |
| Public |
false (behind Cloudflare Access) |
⚠️ Implementation considerations
- Database: MySQL/MariaDB, not Postgres. BookStack requires a MariaDB/MySQL backend — add a dedicated
bookstack-db (MariaDB) sidecar on an internal network. This is the one stack that breaks the "default to Postgres" habit; the per-stack-owns-its-DB rule still applies.
- Pin both the BookStack image and the MariaDB image to specific versions (stateful — pages live in the DB).
APP_URL must be set to the public URL or BookStack's asset/link generation breaks (same class as other reverse-proxied stacks).
Checklist (per CLAUDE.md "Adding New Stacks")
Stack request: BookStack — self-hosted documentation wiki
bookstackapp.com — a simple, self-hosted documentation/wiki platform organised into a Books → Chapters → Pages hierarchy, with WYSIWYG + Markdown editing, full-text search, and diagrams.net integration. MIT-licensed.
Why it fits
Suggested metadata
knowledgebookstacklscr.io/linuxserver/bookstack(LinuxServer.io) — multi-arch verified (amd64 + arm64)false(behind Cloudflare Access)bookstack-db(MariaDB) sidecar on an internal network. This is the one stack that breaks the "default to Postgres" habit; the per-stack-owns-its-DB rule still applies.APP_URLmust be set to the public URL or BookStack's asset/link generation breaks (same class as other reverse-proxied stacks).Checklist (per CLAUDE.md "Adding New Stacks")
stacks/bookstack/docker-compose.yml(BookStack + MariaDB, internal network)services.yaml(pinned version)src/nexus_deploy/services.pyif neededdocs/stacks/bookstack.md+ docs index