A Practical Guide to Running Self-Hosted Services at Home

In the age of digital privacy and control, running self-hosted services at home has become increasingly popular. This guide aims to provide a comprehensive overview of setting up a self-hosted environment, including a reference architecture for your home network, comparisons of various tools, and practical advice for a minimal viable setup.

Reference Architecture

Below is a simple ASCII diagram of a self-hosted architecture:

       Internet
          |
    +-----+-----+
    |  Reverse   |
    |    Proxy   |
    +-----+-----+
          |
    +-----+-----+
    |   Auth     |
    +-----+-----+
          |
    +-----+-----+
    |   Apps     |
    +-----+-----+
          |
    +-----+-----+
    |  Storage   |
    +-----+-----+
          |
    +-----+-----+
    | Monitoring  |
    +-------------+

Key Categories and Options

1. Reverse Proxy / Ingress

  • Traefik

    • Pros: Dynamic configuration, excellent for microservices, automatic Let’s Encrypt integration.
    • Cons: Can be complex to configure for beginners.
  • Caddy

    • Pros: Simple setup, automatic HTTPS, user-friendly configuration.
    • Cons: Limited community support compared to Traefik.
  • Nginx Proxy Manager

    • Pros: Easy-to-use web interface, supports basic authentication and SSL.
    • Cons: Less flexibility than Traefik for advanced configurations.

2. Authentication and SSO

  • Authelia

    • Pros: Strong security features, supports 2FA, good for multiple services.
    • Cons: Setup can be complex.
  • Authentik

    • Pros: Modern interface, easy to integrate with other services, supports OAuth2.
    • Cons: Still maturing, may lack some advanced features.
  • OAuth2-Proxy

    • Pros: Simple to set up, integrates well with various OAuth providers.
    • Cons: Limited features compared to full-fledged SSO solutions.

3. Orchestration

  • Docker Compose

    • Pros: Simple YAML configuration, easy to start small.
    • Cons: Not suitable for large-scale deployments.
  • Portainer

    • Pros: User-friendly GUI for managing Docker containers, great for beginners.
    • Cons: Additional resource overhead.
  • Kubernetes (K8s)

    • Pros: Highly scalable, robust orchestration features.
    • Cons: Steep learning curve, requires more resources.

4. Storage and Backups

  • TrueNAS

    • Pros: Comprehensive NAS solution, supports ZFS for snapshots.
    • Cons: Requires dedicated hardware.
  • ZFS Snapshots

    • Pros: Efficient data protection, easy to manage.
    • Cons: More complex to set up and manage.
  • Restic/Borg

    • Pros: Efficient backups, supports deduplication.
    • Cons: Command-line interface may be intimidating for some users.

5. Monitoring and Logs

  • Prometheus/Grafana

    • Pros: Powerful monitoring and visualization, great community support.
    • Cons: Configuration can be complex.
  • Loki

    • Pros: Simple log aggregation, integrates well with Grafana.
    • Cons: Less mature than other log management solutions.
  • Uptime-Kuma

    • Pros: Easy to set up, provides basic uptime monitoring.
    • Cons: Limited features compared to full monitoring stacks.

6. Remote Access

  • WireGuard

    • Pros: Fast, lightweight, easy to set up.
    • Cons: Requires some networking knowledge.
  • Tailscale

    • Pros: Easy to set up, works seamlessly with NAT traversal.
    • Cons: Relies on a centralized service.

Getting Started: Minimal Docker Compose Example

Below is a simple Docker Compose example to get you started with a minimal setup:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
version: '3.8'
services:
  reverse-proxy:
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf

  app:
    image: your-app-image:latest
    networks:
      - internal

networks:
  internal:

Replace your-app-image:latest with the actual image of the application you want to run. You will need to create an nginx.conf file for your reverse proxy configuration.

  1. Media: Jellyfin - A powerful media server that allows you to stream your media library to any device.
  2. Home Automation: Home Assistant - A versatile platform for home automation that integrates with numerous devices and services.
  3. Documentation: Outline/Wiki.js - Great for creating and managing documentation or wikis for personal or collaborative use.

Checklist for Your Self-Hosted Setup

  • Choose a reverse proxy solution.
  • Set up authentication and SSO.
  • Select an orchestration method.
  • Implement storage and backup solutions.
  • Set up monitoring and logging.
  • Configure remote access.
  • Deploy your desired applications.

By following this guide, you can successfully set up and run self-hosted services at home, giving you greater control over your data and applications. Enjoy your journey into the world of self-hosting!

Credit: @gmays on Reddit