Homelab
Docker, networking, backups and the things that broke along the way.
- Homelab
How this blog is built: Astro + Cloudflare Pages for the price of a domain
A static site with search, tools, guest authors and ads, costing about €12 a year, with nothing exposed on my home server. The stack, the costs and the security decisions behind it.
- Homelab
Applying for Google AdSense with a brand-new static site: what actually happened
Owning the domain, the code snippet vs ads.txt, verification that failed for reasons that had nothing to do with my site, the EU consent message, and the rules that get accounts banned.
- Homelab
A Cloudflare API token that can't hurt you (least privilege, IP lock, expiry)
How I scoped a Cloudflare API token to one domain, five permissions, my home IP and three months, so automation can manage DNS and redirects without being able to touch billing or the domain itself.
- Homelab
Free email on your own domain with Cloudflare Email Routing (receive-only)
hello@yourdomain forwarding to your normal inbox in five minutes: the DNS records it adds, verifying the destination, and the one privacy catch when you reply.
- Homelab
New DNS record works everywhere except at home? Negative caching
I added www to my domain and it worked on mobile data but not on my home network for half an hour. My own resolver had cached the 'doesn't exist' answer. The one Unbound setting that fixes it.
- Homelab
My network ad blocker broke my own AdSense dashboard
Every button in Google AdSense did nothing. The cause was my AdGuard Home blocking Google's ad domains house-wide. How to confirm it, and how to unblock AdSense for just one PC.
- Homelab
Prowlarr sync keeps failing with HTTP 400? Find the indexer Sonarr and Radarr reject
Prowlarr logged '400 BadRequest' when syncing indexers to Sonarr and Radarr several times a day. The culprit was one indexer that never returns movie or TV results. How to find it using the APIs.
- Homelab
Zigbee2MQTT restarted 22,112 times, and Docker never told me
A container that lost its Docker network after a reboot, couldn't resolve the MQTT broker, and crash-looped for three days. How to spot it and fix it.
- Homelab
Certbot renewal failing every 12 hours: 'bind() to 0.0.0.0:80 failed'
An old certbot setup kept failing because AdGuard and Nginx Proxy Manager own ports 80 and 443. Why standalone renewals break on a busy server, and the DNS-challenge alternative.
- Homelab
My homelab tour: one server, ~30 Docker containers
What runs on my home server, how it's organised with Docker Compose, and the lessons that shaped it.
- Homelab
Docker logs ate 2.4 GB on my server. Here's how to cap them
Docker's json-file logs grow forever by default. Two lines in daemon.json fix it, but only for containers created afterwards.
- Homelab
Docker said 32 GB was reclaimable. The real number was closer to 3
docker system df claimed 92% of my image space could be freed. Checking image by image told a very different story. How to find what's actually unused before you prune anything.
- Homelab
Jellyfin 'fatal player error' after an NVIDIA update: the driver/library mismatch
Ubuntu auto-updated the NVIDIA driver but kept the old kernel module loaded. GPU transcoding broke for weeks. Diagnosis and a reboot script that only reboots when needed.
- Homelab
Why 'docker stop' before a reboot left my whole homelab down for two days
restart: unless-stopped treats an explicit docker stop as 'the user wants this off'. A reboot script that stopped containers first stranded every service, including DNS.
- Homelab
After every internet outage, some sites broke for 15 minutes. Blame Unbound's infra cache
Unbound marks unreachable nameservers as down for 900 seconds by default and serves instant SERVFAILs. CDN-heavy sites suffer most. Three settings fixed it.
- Homelab
My 10-minute homelab health check (and what it caught)
The commands I run to check a Docker homelab: restart counts, failed units, alarms, disks, backups and log noise. On its first run it found a container that had restarted 22,000 times.
- Homelab
Ad blocking for the whole house with AdGuard Home + Unbound in Docker
Network-wide ad and tracker blocking plus your own recursive DNS resolver, with no Google or Cloudflare DNS. Compose file, router setup and the gotchas.
- Homelab
How my Jellyfin + *arr media stack fits together (Docker Compose)
Jellyseerr → Sonarr/Radarr → Prowlarr → qBittorrent → Jellyfin. How the pieces talk to each other, hardlinks, FlareSolverr and the settings that tripped me up.
- Homelab
Backing up a Docker homelab with one script (and no sudo)
A nightly cron job that tars every app's config with a throwaway Alpine container, keeps 7 copies and skips caches. Plus what it doesn't protect you from.
- Homelab
Running a private ChatGPT on a 4 GB GPU: Ollama + Open WebUI + SearXNG
What actually fits on a GTX 1050 Ti, why I baked the context length into the model, and how to give a local LLM web search with self-hosted SearXNG.
- Homelab
My homelab has zero open ports. Here's how I still use it from anywhere
Why I don't port-forward anything, how Tailscale replaces it, how to publish a website safely with Cloudflare Tunnel, and the hardening checklist I actually follow.
- Homelab
Clean music tags from YouTube downloads with yt-dlp (for Navidrome)
How I turned 'ARTIST - TITLE (OFFICIAL VIDEO) 1998.' into proper artist, title and album tags with yt-dlp's --parse-metadata and --replace-in-metadata.