If you told me a few weeks ago that I would be hosting my own custom website, running a secure personal photo cloud, and managing an AI LLM endpoint—all from a physical box sitting in my living room—I would have told you that sounded like a headache reserved for enterprise network engineers.
But here we are. Today, personaldomain.me is live, secure, and running entirely on my own hardware.
This is the story of how I took control of my data, wrestled with residential internet constraints, and built a bulletproof home network. If you’ve ever dreamed of breaking free from Big Tech clouds and hosting your own digital playground, grab a coffee. Here is how I did it, step-by-step.
🛠️ The Gear (My Digital Foundation)
Every great build needs a solid foundation. Here is the hardware powering my home data center:
- The Brains: A
UGREEN DXP4800 Plus NAS. This sleek 4-bay beast is packed with power, runs Docker like a dream, and serves as the central vault for all my files, photos, and media. - The Gatekeeper: A
TP-Link Deco X68Wi-Fi 6 mesh system. It blankets my entire house in seamless Wi-Fi, though as you’ll read below, its role on our network was about to get a massive upgrade. - The AI Muscle: A dedicated local machine running
Ollama, giving me my own private Large Language Model (LLM) at home.
🛑 The First Hurdle: The “Double NAT” Trap
My journey started with a common problem: I wanted to access my NAS from outside my home. Specifically, I wanted to use Immich (an incredible open-source Google Photos alternative) on my phone while on mobile data.
But I quickly hit a wall. My internet service provider (ISP) had me behind a standard residential setup. My ISP modem was acting as a router, and my Deco was also acting as a router. This is called Double NAT, and it acts like a double-locked door—nothing from the outside world could get in.
The Solution: Going “Bridge Mode”
I called my ISP and requested a public static IP. To make this work, they had to flip my ISP modem into Bridge Mode.
This effectively turned the modem into a “dumb bridge,” passing the raw internet signal straight through. Now, my Deco X68 had to step up, handle the PPPoE/DHCP authentication, and act as the single, primary router for the whole house.
I plugged the modem directly into the Deco’s WAN port, configured the static IP settings (shoutout to /29 subnets and learning that 255.255.255.248 is the magic decimal mask!), and suddenly my home network was directly connected to the worldwide web.
🐳 Diving Into Docker & Guarding the Gates
With a public IP, my home was visible to the internet. This is where security became paramount.
My first instinct was to just open ports for everything. Bad idea. I quickly learned about UPnP (Universal Plug and Play), a setting on routers that lets devices silently open ports to the internet without asking. My NAS had automatically opened port 9999 (its admin panel) to the public!
I immediately disabled UPnP on my Deco. Rule number one of self-hosting: You manually control every single port that opens.
Instead of exposing my raw applications directly, I deployed Nginx Proxy Manager (NPM) in a Docker container on the UGREEN NAS.
[THE INTERNET]
│ (Ports 80 & 443 only)
▼
[Deco Router]
│
▼
[Nginx Proxy Manager] ────► [Website Container] (bitabit.space)
│ ────► [Immich Container] (immich.personaldomain.me)
│ ────► [File Browser] (files.personaldomain.me)
NPM acts like a digital receptionist. I only had to open two ports on my Deco router: 80 (HTTP) and 443 (HTTPS).
When a visitor types momentos.bitabit.space, NPM intercepts the request, secures it with a beautiful, free Let’s Encrypt SSL Certificate (giving me that sweet green padlock 🔒), and routes it internally to Immich.
🚀 Launching personaldomain.me
With the plumbing complete, it was time to make it official. I purchased the domain personaldomain.me and pointed the DNS A-records directly to my brand-new static public IP.
I spun up a lightweight Nginx web server container in Docker to serve a custom HTML landing page. After a few classic permission denied errors (fixed with a quick local chmod terminal dance!), it went live.
Now, when you visit: • https://personaldomain.me — You are greeted by my locally hosted landing page. • https://immich.personaldomain.me — My family can securely back up and view photos on our private cloud with full HTTPS encryption.
🔮 What’s Next? (The Future Is VPN)
Right now, my setup is incredibly secure. My NAS administration panel, the Nginx configuration panel, and my local Ollama AI endpoint are completely inaccessible from the outside world. They only work when I am physically connected to my home Wi-Fi.
But what if I want to query my local AI or manage my NAS while traveling?
Up next on the roadmap: I’m planning to upgrade my main router node to a TP-Link Deco BE25 (a Wi-Fi 7 beast with native WireGuard VPN Server capabilities).
By setting up WireGuard, I’ll be able to activate a secure, encrypted tunnel from my phone or laptop anywhere in the world. It will make my device “virtually” sit inside my living room, allowing me to access my private AI and NAS tools securely without ever exposing their ports to public scanners.
Self-hosting is a journey of continuous learning, troubleshooting, and taking ownership of your digital footprint. It’s hard work, but when you see that padlock icon load on your own domain, running off a machine you own… there’s nothing quite like it.
Stay tuned for the VPN update! 🛰️🔐!
