Skip to content
/ homelab Public

πŸ€– homelab deployment via docker compose (made easy)

License

Notifications You must be signed in to change notification settings

juftin/homelab

Repository files navigation

homelab

homelab

homelab deployment via docker compose (made easy)

docs docs pre-commit semantic-release Gitmoji

What is homelab?

homelab is a collection of services that can be deployed from your home server and accessed securely from anywhere in the world. Ultimately everything is deployed into a single docker compose application. Each service belongs to a docker compose profile - and the Makefile contains everything you need to get started and manage your homelab.

  • core: The core profile is the base of this project, it includes a traefik reverse proxy and OAuth service that allows you to access all of your services via a single domain name securely behind HTTPS and protected with Google OAuth.
  • media: The media profile includes services like Plex, Sonarr, Radarr, and Ombi that allow you to request, download, organize, and stream media to your devices. This profile is perfect for those who want to have a media server in their homelab.
  • utilities: The utilities profile includes services like Watchtower and Portainer that are designed to help you manage your homelab, monitor your services, and keep your containers up-to-date.
  • miscellaneous: The miscellaneous profile is disabled by default. It includes services like ChatGPT Next Web and LibreOffice Online that don't fit into the other profiles. These services are great for improving your productivity and adding some fun to your homelab.

How does it work?

This repository is a large docker compose project that allows you to deploy a variety of services to your homelab.

At the root of this repository is a docker-compose.yaml file that defines the entire homelab project - it uses the include directive to pull in individual service docker compose files from the apps directory.

.
β”œβ”€β”€ docker-compose.yaml                     # Main Docker Compose File
β”œβ”€β”€ .env                                    # Environment Variables and Configuration
β”œβ”€β”€ Makefile                                # Makefile for common tasks and docker compose wrappers
β”œβ”€β”€ secrets                                 # Secret Files
β”‚   β”œβ”€β”€ cloudflare_api_key.secret           # Cloudflare API Key
β”‚   └── google_oauth.secret                 # Google OAuth Credentials and Whitelist
β”œβ”€β”€ apps                                    # Individual Service Docker Compose Files
β”‚   β”œβ”€β”€ plex.yaml
β”‚   β”œβ”€β”€ radarr.yaml
β”‚   β”œβ”€β”€ ombi.yaml
β”‚   β”œβ”€β”€ sonarr.yaml
β”‚   β”œβ”€β”€ oauth.yaml
β”‚   β”œβ”€β”€ chat-gpt-next-web.yaml
β”‚   β”œβ”€β”€ watchtower.yaml
β”‚   └── traefik                             # Traefik Reverse Proxy
β”‚       β”œβ”€β”€ docker-compose.yaml             # Traefik Docker Compose File
β”‚       └── rules                           # Traefik Middlewares and Rules
β”‚           β”œβ”€β”€ middlewares-chains.yml
β”‚           β”œβ”€β”€ middlewares.yml
β”‚           └── tls-opts.yml
└── appdata                                 # Application Data Persistent Volumes
    β”œβ”€β”€ plex                                # Each individual service has its own subdirectory
    β”œβ”€β”€ sonarr
    β”œβ”€β”€ oauth
    β”œβ”€β”€ traefik
    β”œβ”€β”€ chat-gpt-next-web
    β”œβ”€β”€ utilities
    └── watchtower

Configuration

All services are configured via a .env file at the root of the project and a few secret files in the secrets directory. These files are used to define settings and credentials for all services that are deployed. You can copy the example files to get started:

cp docs/example.env .env
cp -r docs/example-secrets/ secrets/

See the docs for more information on configuration and getting started.