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. - **`llm`**: The `llm` profile is disabled by default. It includes services like [ChatGPT Next Web] that allow you to run a local instance of ChatGPT and other LLMs. This profile is perfect for those who want to experiment with LLMs and AI in their homelab. ## How does it work? This repository is a large [docker compose](https://docs.docker.com/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. ```text . ├── 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: ```shell cp docs/example.env .env cp -r docs/example-secrets/ secrets/ ``` See the [docs](https://juftin.github.io/homelab/) for more information on configuration and getting started. [traefik]: https://github.com/traefik/traefik [OAuth]: https://github.com/thomseddon/traefik-forward-auth [Plex]: https://www.plex.tv/ [Sonarr]: https://github.com/sonarr/sonarr [Radarr]: https://github.com/Radarr/Radarr [Ombi]: https://github.com/Ombi-app/Ombi [ChatGPT Next Web]: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web [Watchtower]: https://github.com/containrrr/watchtower [LibreOffice Online]: https://www.libreoffice.org/ [Portainer]: https://github.com/portainer/portainer [docker compose profile]: https://docs.docker.com/compose/profiles/