How My Family Safely Accesses Our Self-Hosted Cloud From Anywhere
Posted on June 23, 2026 • 12 min read • 2,346 wordsSelf-hosting your family’s digital life can feel a bit like building a secret base in your living room. On the surface, it’s just laptops and phones. Underneath, it’s a quiet network of services, tunnels, and certificates that keeps everything running.
Most guides stop at:
“Install Nextcloud, add a domain, done.”
And then you’re left with that uneasy question:
“Did I just put my family’s photos and documents on the internet with a password as the only lock?”
This is the story of how I turned our self-hosted setup into something that feels like magic for my family – tap an icon and it just works – while still being engineered like a professional system under the hood.
From the outside, we look like any other family:
From the inside, those devices are quietly talking to a private little universe of services.
We use:
Offline reality:
So the real problem to solve is:
How can my family use all of this as casually as any cloud app,
while I keep the attack surface small enough that I can sleep at night?
The trick is that my family never sees the hardness of the system.
They tap an icon, and four layers quietly cooperate to make that safe.
Every request to our services passes through one single door: a reverse proxy running at home and on a Hetzner VPS.
Imagine walking into a hotel with hundreds of rooms. You don’t get a map of all doors and keys; you talk to the receptionist. That’s what the proxy does for our services.
I use Nginx Proxy Manager as that receptionist. It:
photos.mydomain.com → PhotoPrism,files.mydomain.com → Nextcloud,chat.mydomain.com → Matrix.Some services live on local hardware, others on the VPS – but from the outside, it all feels like one cohesive cloud.
User Request → Nginx Proxy Manager → Service
↓
- TLS termination
- Rate limiting
- Header injection (X-Frame-Options, Strict-Transport-Security)If a bot hammers the login page, fail2ban and Wazuh block the IP before it even reaches Authentik.
Why this matters for remote access
Without this gatekeeper, we’d have a mess of exposed ports, self-managed certificates and URLs. With it, our family has one neat entry point, and attackers have exactly one heavily guarded front door instead of a whole street of unlocked back doors.
Next, I didn’t want 15 separate logins floating around. So I built one identity that all our services trust.
That identity lives in Authentik – my self-hosted “Sign in with Google”, except it runs on my hardware and follows my rules.
I deliberately split the world into two zones:
For the everyday services my family uses:
This covers Nextcloud, PhotoPrism, Matrix, Listmonk and more.
Every login feels normal: a familiar page, maybe a 2FA prompt, then we’re in. After that, everything just quietly trusts Authentik in the background.
For the things that can break everything if misused:
This covers Wazuh, Semaphore, Portainer, Synology DSM and other control panels.
User opens PhotoPrism (App)
↓
PhotoPrism/nginx redirect to Authentik with proxy forward request
↓
Authentik checks:
- Is there a valid session? (< 30 days old for family zone)
- Is 2FA satisfied? (if policy requires it)
- Is user in allowed group?
↓
Authentik returns authentication header to nginx
↓
nginx validates header and forwards the connection to PhotoPrismThe user sees: one redirect flash, then they’re in. Session persists across all services.
Why this split matters
My family shouldn’t need to re-authenticate every day just because I want tight admin security. If my laptop gets stolen, admin sessions expire in hours, not weeks. And with Authentik, one leaked password doesn’t cascade across services the way 15 separate logins would.
Why this matters for remote access
For my family, remote access feels like one long-lived, safe identity that moves with them from service to service: log in once, then everything works from the café, the van, or the office.
For me as the admin, remote access becomes a narrow, guarded airlock instead of “admin panels on the open web”.
Even with SSO, I didn’t want every internet-origin request to reach a login page. Some services hold data that is simply too sensitive to be “just protected by a password”.
So for those, I added what amounts to a digital badge check at the door.
Certain devices – our phones, my laptop – carry a client certificate issued by my own internal CA (smallstep). They’re like secret ID cards only our devices possess. I’m my own passport office; only devices I trust get a certificate.
When one of us opens PhotoPrism from a random Wi‑Fi:
If the check fails → HTTP 403, no explanation, not even a login prompt.
Client TLS Handshake:
↓
Nginx Proxy Manager checks:
- Does client present a certificate?
- Is it signed by my internal CA (smallstep)?
- Is it not expired? (1-year validity)
↓
If all pass → forward to Authentik
If any fail → HTTP 403 (no explanation)Which services use mTLS:
The conscious trade-off: Nextcloud doesn’t use client certificates because we sometimes wants to share a folder link with friends. External people couldn’t access that link if a certificate were required. So Nextcloud stays on Layer 2 only (Authentik SSO + strong password + 2FA). Public-facing services get less protection, but they’re also less privileged – segmentation matters.
Why this matters for remote access
From the perspective of the wider internet, those mTLS‑protected services almost don’t exist. No certificate, no login form, no error messages hinting at what’s there.
And yet, from our devices, they’re just one tap away – even from a motel Wi‑Fi at midnight.
Finally, there are things I never expose, no matter how strong the authentication: raw storage shares, SSH, internal databases, van sensors.
For those, I use WireGuard as a private, encrypted tunnel.
It runs in two flavours:
WireGuard Site-to-Site:
Home Router (10.20.30.0/24) ↔ Hetzner VPS (10.40.50.0/24)
↓
Services see each other as local network
No NAT traversal, no public portsThis is when I:
My family barely ever touches WireGuard directly. For them, everyday remote access lives in the layers above; WireGuard is my secure backstage entrance.
Why this matters for remote access
Without WireGuard, I’d have to make trade-offs like “open SMB from the internet” or “no direct file access away from home”.
With it, I turn “only reachable from the couch” into “reachable from the van, but still private” – without widening the attack surface.
photos.mydomain.com in Chrome.Total friction: Zero. She clicked once, it opened.
portainer.mydomain.com in Chrome.Why this matters: Someone would need to steal my laptop, my password, and my 2FA tokens in order to access admin panels. And then, I still could simply revoke the certificate and their chance is gone. Layered defence.
This works because Nextcloud deliberately sits outside the mTLS layer. I accept this trade-off and mitigate it with strong passwords, 2FA, and rate limiting.
We gain:
We do not gain superpowers:
Security isn’t a force field. It’s a set of layers that make bad things harder, noisier and easier to notice.
Let me be honest: this setup took me months to build incrementally. I didn’t wake up one day and deploy all four layers at once.
It started simple (Nginx + password) and grew as I learned:
But here’s the thing: It’s reproducible. Every piece is well-documented open-source software with no vendor lock-in:
The “magic” isn’t that I invented something new. It’s how these pieces are arranged so that:
If you’re reading this and thinking:
“I’d love my own family cloud that feels this seamless –
but I don’t want to spend months debugging TLS and VPN configs.”
Then you’re exactly the kind of person I have in mind for this series.
In the next parts, I’ll break down:
And if you’re already running some services and want help turning them into a setup that feels both professional and a little bit like magic:
I’m happy to help you bridge that gap – from “just a homelab” to “a family cloud you can trust.”
The easiest way to reach me is via
info@nextlevel-blog.de
This is part of a series on running your family’s digital life on your own infrastructure. See Part 1: The Service Overview for an impression of what we’re self-hosting.