About Professional
How I Build How I Build Meet the Team
Technology Homelab App Showcase Case Studies
Maverick & Luke Say Hello

Case study

Deploying a Multi-Container Self-Hosted Stack into a Live Production Node with Zero Blast Radius

Standing up a self-hosted Notion alternative on a busy production node without touching its existing shared database, and catching three non-obvious failure modes along the way.

The challenge

The production node already ran a shared database and a number of live apps. I needed to add a self-hosted Notion alternative, a multi-container stack (its own database, cache, and object store, plus web, gateway, and auth services), onto that same node without disturbing any of the existing data or services. The stack also had to fit the house deploy conventions: pinned image versions, excluded from auto-updates, secrets generated on the box, loopback-only binding fronted by an HTTPS reverse proxy, and no app calling an AI provider directly.

Approach

I ran the deploy through a numbered, gated checklist (privileged steps paused for explicit approval) and made isolation the load-bearing decision.

Results

Three non-obvious catches

  1. Split image-version line. The web image was pinned on a separate line from the cloud images, so the first pull failed. The authoritative version source was the container registry, not the releases API that reported a stale number. Pin each image separately, verify at the authoritative registry.
  2. Mail-less login dead-end. The default login is a passwordless magic link that needs SMTP to deliver. With no mail server, signup created the user but the link never arrived, producing a confusing "already registered" loop. The password signup form works fully without mail (auto-confirm), so that's the working path on a mail-less node.
  3. Self-recreating admin account. The auth service recreates its admin user from a configured email on every startup, so that address stayed permanently "taken," even across database wipes. I pointed the admin config at a throwaway address, signed up with the real email, then promoted that account to admin directly.

What this demonstrates