Skip to Content

Company Wiki

A Production-Grade Company Wiki on a Single Droplet
25 September 2026 by

Client: International Salon Supplies

Role: Engineer (setup & operations)

Period: Jul 2025 – Feb 2026

Status: Production

Tech stack: BookStack, Docker Compose, MySQL 8, Caddy, Bash, rclone, OneDrive, DigitalOcean

A self-hosted internal knowledge base for SOPs and documentation, running on one small DigitalOcean droplet: BookStack behind Caddy with automatic HTTPS, templated config that keeps secrets out of git, and three independent backup layers with a guarded restore script.

The need

Processes at ISS lived in people's heads, email threads and scattered documents. We needed one searchable place for SOPs and technical documentation that staff would actually use, without paying per seat or taking on a lot of maintenance.

Choosing the tool

I trialled Wiki.js and BookStack side by side. BookStack's shelves → books → chapters → pages structure matched how non-technical staff think about documentation, so it won.

Setup

Internet ─► Caddy (80/443, automatic TLS) ─► BookStack (PHP/Laravel) ─► MySQL 8
                                                  │
                                    uploads on host volumes
  • Caddy terminates TLS with automatic certificates and forwards the original protocol, so BookStack generates correct https:// links behind the proxy.
  • PHP limits raised for large attachments.
  • SMTP configured for notifications.
  • Secrets stay out of git. Only docker-compose.yaml.template and .env.template are committed. Real config, SQL dumps and backups are ignored, and placeholder files keep empty upload directories in the repo.

Three layers of backup

  1. Droplet snapshots at the infrastructure level.
  2. Database dumps. A script loads the environment, validates the required variables, runs mysqldump inside the container and writes a timestamped .sql.gz. A companion script enforces retention, keeping only the newest N dumps.
  3. Off-site sync. rclone mirrors the project, including uploads and dumps, to OneDrive on a short cron interval (--fast-list --track-renames).

Restoring is deliberately careful. The script lists available backups with sizes, asks you to pick one, and requires typing yes before it streams the dump back into MySQL.

Evolution

  • Jul 2025: local trial of Wiki.js and BookStack
  • Aug 2025: single-file BookStack setup
  • Sep 2025: production repo with templated config and backup scripts
  • Feb 2026: Caddy added for end-to-end TLS

Takeaway

Self-hosting is cheap. What makes it production-grade is the operating model around it: automatic TLS, secrets hygiene, backups you've tested restoring, and a restore path that's hard to trigger by accident.