Skip to content

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

๐ŸŒ 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:

  1. Start Small: Begin with one service (I recommend AdGuard or Miniflux)
  2. Learn Containers: Master Docker or Incus for service isolation (Kubernetes is an option too, but I prefer Incus for its simplicity)
  3. Secure Your Setup: Implement VPN and reverse proxy early
  4. Document Everything: Keep notes for troubleshooting and rebuilds
  5. 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!