Productivity & PM 2 services 2 GiB RAM 10 GB disk

BookStack

A simple, beautiful wiki - shelves, books, chapters, pages. Confluence calm, on a self-hosted MariaDB.

One-click deploy, from $13/mo on a Miget plan.

BookStack is a wiki people actually enjoy using: content is organized into shelves, books, chapters, and pages, with a friendly WYSIWYG editor (markdown too), full-text search, draw.io diagrams, page revisions, roles and permissions, and an API. It is the calm, approachable alternative to Confluence.

It is a Laravel app backed by a self-hosted MariaDB. The LinuxServer image listens on port 80 with no env var to change it, so this template uses a thin wrapper that patches the nginx config to serve port 5000. Uploads and config sit on one volume, or move them to a Miget Bucket to keep the app near-stateless.

The case for self-hosting is the usual per-seat story: documentation tools bill per person every month. BookStack is one flat plan for the whole team, with the content in a MySQL database you own and can back up like any other.

#what you get

  • Shelves, books, chapters, pages - structure that makes sense
  • WYSIWYG and markdown editors, draw.io diagrams
  • Full-text search, page revisions, roles and permissions
  • Self-hosted MariaDB; optional Miget Bucket for uploads
  • OIDC / LDAP / SAML SSO when you want it
  • MIT-licensed, flat pricing, no per-seat metering

#topology

ServiceRolePublic
bookstackwiki (Laravel + nginx, :5000)yes
dbMariaDB 11 container (content)no

#miget sizing

// this stack needs

2 GiB RAM · 10 GB disk · 2 services

A PHP-FPM + nginx app is comfortable in 1 GiB. Content lives in MySQL; uploads on the config volume (or a Bucket with STORAGE_TYPE=s3). Change the default admin on first login.

Hobby - recommended fit

$13/mo

1 vCPU · 2 GiB · 50 GiB disk

Headroom for your own apps: 2 GiB at $19/mo

Professional - production

$22/mo

1 vCPU · 2 GiB · 10 GiB disk

Dedicated resources, production SLOs - plan details

One Miget plan is a fixed pool of compute - the whole stack (managed databases included) deploys inside it, and anything left over runs your other apps. No per-service or per-seat math.

#vs. the managed service

What the hosted equivalents charge, against the flat Miget plan this stack fits on. Prices as of June 2026, sources linked.

ServicePlanMonthlyWhat you get
BookStack on Miget 2 GiB plan$13this whole stack, flat - no usage meters, and room left for your own apps
NotionBusiness~$200$20/seat/mo at 10 seats
ConfluenceStandard~$60~$6/user/mo at 10 users

BookStack is free software on a flat plan; no per-seat metering.

#vs. other PaaS

Estimated monthly cost of running this exact stack (2 GiB RAM, 10 GB disk, 2 containers) elsewhere, from published June 2026 rates.

PlatformEst. monthlyNotes
Miget $13 flat compose stacks first-class: one deploy, dedicated vCPU, managed Postgres/Valkey, volumes and TLS all included in the plan
Heroku ~$100 no volumes; nothing between 1 GB ($50) and 2.5 GB ($250) dynos - 2 GB containers cost far more than shown
DO App Platform ~$29 no persistent volumes - stateful containers need managed DBs/Spaces (base $5 Spaces included here)
Render ~$28 per-service instances (0.5 GB $7, 2 GB $25) - every container is its own paid service
Railway ~$22 usage-based ($10/GB RAM-mo); vCPU billed separately at $20/vCPU-mo on top
Fly.io ~$13 cheapest sticker price - but burstable shared CPUs (1/16 core; dedicated vCPUs cost ~2-3×), no compose deploys (one app per container, manual wiring), managed DBs billed extra

Estimates assume RAM fully allocated at published on-demand rates - and sticker price isn't the whole comparison: the cheaper rows buy burstable shared CPUs, per-service wiring instead of a compose deploy, and managed databases billed separately. Heroku and DO App Platform have no persistent volumes at all - stateful stacks like this one need workarounds there.

#deploy it

On Miget

  1. Create a Compose Stack in app.miget.com pointing at the templates repository
  2. Set the stack path to bookstack
  3. Set the required variables:
    • APP_KEY, Laravel key (base64:...), pinned - changing it breaks encryption
    • APP_URL, the https domain, matched exactly (no trailing slash)
  4. Deploy. Miget layers compose.miget.yaml (RAM, privacy, volumes, managed services) automatically

Locally first?

Every template is portable, vanilla Docker Compose - the Miget overrides are ignored locally:

git clone https://github.com/deployable-sh/stacks
cd miget-compose-templates/bookstack
docker compose up -d

Same files, same behavior. The template README covers connection strings and scaling notes.

#faq

What does this save vs Confluence?

Confluence Standard is about $5-6/user/month, so a 10-person team runs ~$50-60/month and climbs with headcount. BookStack is one flat plan for everyone, with the content in a MySQL you control.

Can uploads go to object storage?

Yes. Set STORAGE_TYPE=s3 plus the STORAGE_S3_* variables to keep images and attachments in a Miget Bucket. That leaves only the MySQL database as state and makes redeploys clean.

Why the wrapper, and what about the default admin?

The image’s nginx listens on port 80 with no env var, so a thin wrapper patches it to port 5000. On first login change the default admin (admin@admin.com / password) immediately.

Ship BookStack today

One compose stack, 2 GiB of RAM, from $13/month flat, and it runs on your laptop with the same files.