Attribution: This article was based on content by @awesome-selfhosted on GitHub.
Original: https://github.com/awesome-selfhosted/awesome-selfhosted

Comprehensive Guide to Running Self-Hosted Services at Home

Introduction

Self-hosting is a powerful way to take control of your digital life, allowing you to run applications and services from the comfort of your own home. With a variety of free software options available, you can create a tailored environment that meets your needs. This guide will provide a reference architecture for running self-hosted services, compare credible options across various categories, and outline a minimal viable setup with a clear growth path.

Key Takeaways

  • Self-hosting empowers you to manage your services, enhancing privacy and control.
  • A reverse proxy is essential for managing traffic and securing your applications.
  • Orchestration tools simplify the management of containers but vary in complexity.
  • Monitoring and backup solutions are crucial for maintaining service reliability.
  • Growth paths allow for scaling from a simple setup to a more complex environment.

Reference Architecture

Below is an ASCII diagram illustrating a basic architecture for a self-hosted environment:

          Internet
              |
        +-------------+
        | Reverse Proxy|  (e.g., Traefik, Caddy)
        +-------------+
              |
     +--------+--------+
     |        |        |
+---------+ +---------+ +---------+
|  App 1  | |  App 2  | |  App 3  |
| (Media) | | (Docs)  | | (Home    |
| (Jellyfin)| | (Wiki.js)| | Assistant) |
+---------+ +---------+ +---------+
     |        |        |
+---------------------+
|  Authentication /   |
|  SSO (e.g., Authelia)|
+---------------------+
     |
+---------------------+
|      Storage        |
| (e.g., TrueNAS)     |
+---------------------+
     |
+---------------------+
|    Monitoring &     |
|    Logs (e.g.,     |
|    Prometheus)      |
+---------------------+

Getting Started

Minimal Viable Setup

To get started with a simple self-hosted setup, you can use Docker and Docker Compose to manage your containers. Below is an example docker-compose.yml file that sets up a reverse proxy using Traefik and a basic web application.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.8'

services:
  reverse-proxy:
    image: traefik:v2.5
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"

  app:
    image: nginx:alpine
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.app.rule=Host(`yourdomain.com`)"
      - "traefik.http.services.app.loadbalancer.server.port=80"

To deploy this setup, save the above configuration in a file named docker-compose.yml, and run the following command in the same directory:

1
docker-compose up -d

This will start Traefik and an Nginx server. Make sure to replace yourdomain.com with your actual domain name.

Key Categories

1. Reverse Proxy / Ingress

Options:

  • Traefik: A modern reverse proxy that integrates seamlessly with Docker. It offers automatic SSL certificate management and dynamic service discovery.

    • Pros: Easy to set up, supports Let’s Encrypt, and integrates well with containerized environments.
    • Cons: Can be overkill for very simple setups.
  • Caddy: A web server that automatically manages HTTPS for your sites.

    • Pros: Simple configuration, automatic HTTPS, and good performance.
    • Cons: Limited community support compared to Nginx.
  • Nginx Proxy Manager: A web interface for managing Nginx reverse proxy configurations.

    • Pros: User-friendly interface, supports SSL, and easy to manage multiple hosts.
    • Cons: Limited flexibility compared to raw Nginx configurations.

2. Authentication and SSO

Options:

  • Authelia: An open-source authentication and authorization server.

    • Pros: Supports 2FA, integrates with multiple services, and provides a robust security model.
    • Cons: More complex to set up compared to simpler solutions.
  • Authentik: A modern identity provider that supports SSO and 2FA.

    • Pros: Easy to use, supports a wide range of protocols, and has a clean UI.
    • Cons: Still in active development, which may introduce instability.
  • OAuth2-Proxy: A reverse proxy that provides authentication using OAuth2.

    • Pros: Lightweight, easy to set up, and integrates well with various OAuth providers.
    • Cons: Limited to OAuth2, which may not suit all use cases.

3. Orchestration

Options:

  • Docker Compose: A tool for defining and running multi-container Docker applications.

    • Pros: Simple syntax, easy to learn, and great for small setups.
    • Cons: Not suitable for large-scale deployments.
  • Portainer: A web-based management UI for Docker.

    • Pros: User-friendly and provides a visual overview of your containers.
    • Cons: Adds an additional layer of complexity.
  • Kubernetes (K8s): A powerful orchestration tool for managing containerized applications at scale.

    • Pros: Highly scalable and robust for large applications.
    • Cons: Steep learning curve and overkill for small setups.

4. Storage + Backups

Options:

  • TrueNAS: A powerful NAS solution with ZFS support.

    • Pros: Excellent data protection, snapshots, and easy management.
    • Cons: Requires dedicated hardware and setup time.
  • ZFS Snapshots: A filesystem that provides high data integrity and backup capabilities.

    • Pros: Efficient storage, data recovery, and snapshots.
    • Cons: Requires understanding of ZFS concepts.
  • Restic: A fast, secure backup program that supports various backends.

    • Pros: Easy to use, efficient deduplication, and supports multiple storage backends.
    • Cons: Requires manual setup and configuration.

5. Monitoring + Logs

Options:

  • Prometheus: A powerful monitoring system and time series database.

    • Pros: Excellent for metrics collection, alerting, and visualization.
    • Cons: Can be complex to set up initially.
  • Loki: A log aggregation system designed to work with Grafana.

    • Pros: Simple to use, integrates seamlessly with Grafana.
    • Cons: Limited querying capabilities compared to traditional logging solutions.
  • Uptime-Kuma: A self-hosted status monitoring solution.

    • Pros: User-friendly interface, supports multiple protocols.
    • Cons: Limited to uptime monitoring.

6. Remote Access

Options:

  • WireGuard: A modern VPN that is simple and fast.

    • Pros: Lightweight, secure, and easy to configure.
    • Cons: Limited GUI support for management.
  • Tailscale: A zero-config VPN that uses WireGuard under the hood.

    • Pros: Extremely easy to set up, works across devices.
    • Cons: Relies on a central server for coordination.

7. Example Applications

Media: Jellyfin

Jellyfin is an open-source media server that allows you to organize and stream your personal media collection. Its popularity stems from its user-friendly interface and extensive customization options.

Home Automation: Home Assistant

Home Assistant is a powerful platform for home automation that integrates with a myriad of devices and services. Its flexibility and community support make it a top choice for smart home enthusiasts.

Documentation: Wiki.js

Wiki.js is a modern and powerful wiki software that allows you to create and manage documentation easily. Its rich features and user-friendly interface make it ideal for personal or team documentation.

Growth Path

Starting with a minimal setup, you can gradually expand your self-hosted environment by adding more services, integrating additional tools, and scaling your infrastructure. Here’s a suggested growth path:

  1. Start Small: Begin with a reverse proxy (like Traefik) and a single application (e.g., Jellyfin).
  2. Add Monitoring: Implement a monitoring solution (like Prometheus) to keep track of your services.
  3. Enhance Security: Introduce an authentication layer (like Authelia) to secure your applications.
  4. Expand Storage: Incorporate a dedicated storage solution (like TrueNAS) for better data management.
  5. Scale Up: Transition to orchestration tools (like Kubernetes) as your needs grow.

Conclusion

Self-hosting can provide greater control over your digital services, enhance privacy, and save costs. By carefully selecting the right tools and following a structured approach, you can create a robust home server environment that meets your needs. This guide serves as a starting point, but the possibilities are vast as you explore the wealth of self-hosted applications available.

Credit: This guide is inspired by the Awesome Self-Hosted list, which provides a comprehensive collection of free software network services and web applications for self-hosting.

References