Self-Hosting Infrastructure¶
My Self-Hosting Philosophy
Take control of your digital life by running your own services on your own infrastructure. This section documents my complete self-hosting setup running from my home in Japan.
Infrastructure Overview¶
All services run on my home server, accessible to the internet through a VPS reverse proxy:
graph TB
DNS["๐ deSEC DNS<br/>benoit.jp.net"] --> Sakura
Internet["๐ Internet"] --> Sakura["โ๏ธ Sakura VPS<br/>HAProxy Load Balancer<br/>Tokyo Region"]
Sakura -->|Tailscale VPN| HomeServer["๐ Home Bare-Metal Server<br/>Ubuntu 24.04 LTS<br/>64GB RAM, 2TB NVMe"]
HomeServer --> Services
subgraph Services["๐ฆ Incus Containers"]
AdGuard["๐ก๏ธ AdGuard Home<br/>DNS + Ad Blocking"] ~~~ Miniflux["๐ฐ Miniflux<br/>RSS Feed Reader"] ~~~ Forgejo["๐ฆ Forgejo<br/>Git Hosting"]
Mastodon["๐ Mastodon<br/>Social Media Instance"] ~~~ Scrutiny["๐ Scrutiny<br/>S.M.A.R.T Monitoring"] ~~~ More["โ And More..."]
end
UptimeKuma["๐ Uptime Kuma<br/>Hetzner VPS, US West"] -.->|monitors| Services
Services ~~~ Updown
Sakura -.->|Pulse ping| Updown["๐ updown.io<br/>External Watchdog"]
HomeServer -.->|Pulse ping| Updown
UptimeKuma -.->|Pulse ping| Updown
Architecture Components¶
โ๏ธ Sakura VPS (Tokyo)¶
- Role: Public-facing reverse proxy and load balancer
- Software: HAProxy for SSL termination and traffic routing
- Location: Tokyo region for optimal Japan connectivity
- Security: Only HAProxy exposed to internet, all services behind VPN
๐ Tailscale VPN¶
- Purpose: Secure encrypted tunnel between VPS and home server
- Benefits: No open ports on home network, zero-trust networking
- Features: Automatic failover, mesh networking, access control
๐ Home Bare-Metal Server¶
- Hardware: Fanless AMD Mini PC Ryzen 5 4500U from Topton (AliExpress)
- OS: Ubuntu 24.04 LTS on 256GB SSD
- Storage: 2TB NVMe for Incus (ZFS pool)
- Network: 1 Gbps Rakuten Hikari fiber (see Internet Connectivity for DS-Lite setup details)
- Backups: Incus persistent volumes backed up via borgmatic to BorgBase.com and TrueNAS storage
๐ DNS โ deSEC¶
- Provider: deSEC.io โ free, privacy-focused DNS hosting
- Domain:
benoit.jp.net - Features: DNSSEC, anycast, API-driven, no tracking
๐ฆ Incus Container Platform¶
- Technology: Community-driven LXD fork for container orchestration
- Benefits: Lightweight virtualization, resource isolation
- Management: Web UI + CLI + Terraform for easy service deployment
- Scalability: Easy to add new services as containers or VMs
๐ Uptime Kuma (Hetzner VPS)¶
- Role: External uptime monitoring for all self-hosted services
- Location: Hetzner VPS, US West region, independent from home infrastructure
- Notifications: Email
๐ updown.io¶
- Role: External watchdog that monitors Uptime Kuma, the Sakura VPS, and the Incus server
- Method: Pulse cron ping from Uptime Kuma, the Sakura VPS, and the Incus server
- Alerting: SMS, ensuring alerts arrive even if all self-hosted services are down
Why This Setup?¶
-
Security First
- Zero home exposure: No ports open on home network
- VPN-only access: All communication encrypted via Tailscale
- Isolated services: Each service runs in its own container
-
Performance & Control
- Local processing: Services run on dedicated bare-metal hardware
- Low latency: Direct access from home network
- Full control: No cloud provider limitations or surprise bills
- Custom optimization: Tuned specifically for my usage patterns
-
Cost Effective
- Minimal cloud costs: Only pay for small VPS proxy
- No per-service fees: Run unlimited services on home hardware
- Long-term savings: One-time hardware investment vs monthly subscriptions
- Resource sharing: Multiple services share same powerful hardware
-
Learning & Fun
- Hands-on experience: Deep understanding of infrastructure
- Experimentation: Try new services without cloud costs
- Problem solving: Troubleshoot and optimize everything
- Community: Share knowledge with fellow self-hosters
Available Services¶
The following self-hosted services are currently running in this infrastructure:
| Service | Container | Purpose | Documentation |
|---|---|---|---|
| ๐ก๏ธ AdGuard Home | adguard |
DNS filtering and ad blocking | Setup Guide |
| ๐ Beszel | beszel |
Server monitoring and metrics | Setup Guide |
| ๐ changedetection.io | changedetection (VM) |
Website change detection and monitoring | Setup Guide |
| ๐ Dawarich | dawarich (VM) |
Self-hosted location history | Setup Guide |
| ๐ฆ Forgejo | forgejo |
Git repository hosting | Setup Guide |
| ๐ฌ Jellyfin | jellyfin |
Media streaming server | Setup Guide |
| ๐ Kanboard | kanboard |
Project management | Setup Guide |
| ๐ง Mailcow | mailcow (VM) |
Email server (SMTP/IMAP) | Setup Guide |
| ๐ Mastodon | mastodon |
Federated social media | Setup Guide |
| ๐ฐ Miniflux | miniflux |
RSS feed reader | Setup Guide |
| ๐ต Navidrome | navidrome |
Music streaming server | Setup Guide |
| ๐ธ PhotoPrism | photoprism |
Photo management | Setup Guide |
| ๐ Scrutiny | scrutiny |
Hard drive monitoring | Setup Guide |
| ๐บ Servarr | arr |
Media automation (Prowlarr, Radarr, Sonarr, qBittorrent) | Setup Guide |
| ๐ Uptime Kuma | Hetzner VPS (Docker) | External uptime monitoring | Setup Guide |
| ๐ Vaultwarden | vaultwarden |
Password manager | Setup Guide |
Operational Procedures¶
| Procedure | Description | Documentation |
|---|---|---|
| ๐พ Backup & Restore | Restore Incus containers and storage volumes from Borg backups | Guide |
Post Mortems¶
Incident write-ups for outages and issues encountered with this infrastructure.
| Date | Incident | Documentation |
|---|---|---|
| 2026-03-26 | nftables Stale Interface Index โ unattended Tailscale upgrade broke exit node forwarding for ~4.5 hours | Post Mortem |
| 2026-03-11 | Bike Crash โ not a server, but still a post mortem | Post Mortem |
Getting Started¶
Interested in building your own self-hosting infrastructure? Here's my recommended approach:
- Start Small: Begin with one service (I recommend AdGuard or Miniflux)
- Learn Containers: Master Docker or Incus for service isolation (Kubernetes is an option too, but I prefer Incus for its simplicity)
- Secure Your Setup: Implement VPN and reverse proxy early
- Document Everything: Keep notes for troubleshooting and rebuilds
- Backup Religiously: Automate backups before you need them
Pro Tips
- Monitor everything: Set up alerting before problems happen
- Version control configs: Keep infrastructure as code
- Test restores regularly: Backups are useless if you can't restore
- Join communities: r/selfhosted and homelab communities are gold mines
- Have fun: The journey is as valuable as the destination!