Skip to content

Commit

Permalink
✨ stack rename
Browse files Browse the repository at this point in the history
  • Loading branch information
juftin committed Apr 6, 2024
1 parent 6ba4877 commit 2603ec3
Show file tree
Hide file tree
Showing 36 changed files with 239 additions and 182 deletions.
14 changes: 7 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,26 +59,26 @@ core-logs: ## Show the logs for the core services (traefik, oauth2, etc).

.PHONY: media-up
media-up: ## Start just the media services (plex, sonarr, radarr, etc).
docker compose --project-directory "$(ROOT_DIR)" --profile media-center up -d
docker compose --project-directory "$(ROOT_DIR)" --profile media up -d

.PHONY: media-down
media-down: ## Stop just the media services (plex, sonarr, radarr, etc).
docker compose --project-directory "$(ROOT_DIR)" --profile media-center down
docker compose --project-directory "$(ROOT_DIR)" --profile media down

.PHONY: media-logs
media-logs: ## Show the logs for the media services (plex, sonarr, radarr, etc).
docker compose --project-directory "$(ROOT_DIR)" --profile media-center logs -ft
docker compose --project-directory "$(ROOT_DIR)" --profile media logs -ft

.PHONY: Misc Services 🧰

##@ Configuration 🪛

.PHONY: config-acme
config-acme: ## Initialize the acme.json file.
mkdir -p appdata/traefik/traefik/acme/
rm -f appdata/traefik/traefik/acme/acme.json
touch appdata/traefik/traefik/acme/acme.json
chmod 600 appdata/traefik/traefik/acme/acme.json
mkdir -p appdata/core/traefik/acme/
rm -f appdata/core/traefik/acme/acme.json
touch appdata/core/traefik/acme/acme.json
chmod 600 appdata/core/traefik/acme/acme.json

##@ Backup 🗂️

Expand Down
40 changes: 24 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,19 @@
`homelab` is a collection of services that can be deployed from your home server and accessed
securely from anywhere in the world. This project deploys multiple "stacks" of services:

- **`traefik`**: The [traefik] stack is the core of this project, it includes a reverse proxy
- **`core`**: The `core` stack 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-center`**: The `media-center` stack includes services like [Plex], [Sonarr], [Radarr], and
- **`media`**: The `media` stack includes services like [Plex], [Sonarr], [Radarr], and
[Ombi] that allow you to request, download, organize, and stream media to your devices. This stack
is perfect for those who want to have a media server in their homelab.
- **`miscellaneous`**: The `miscellaneous` stack includes services like [pi-hole],
[ChatGPT Next Web], and others that don't fit into the `media-center` stack.
These services are great for improving your home network and adding some fun
to your homelab - they also give you an established pattern for easily adding
new services to your homelab.
- **`utilities`**: The `utilities` stack 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` stack is **disabled by default**.
It includes services like [ChatGPT Next Web] and [LibreOffice Online]
that don't fit into the other stacks. These services are great for improving your
productivity and adding some fun to your homelab.

## How does it work?

Expand All @@ -49,30 +51,34 @@ Ultimately a single docker compose stack is created that deploys everything.
│ ├── cloudflare_api_key.secret # Cloudflare API Key
│ └── google_oauth.secret # Google OAuth Credentials and Whitelist
├── stacks
│ ├── media-center
│ ├── media
│ │ ├── plex.yaml # Each individual service has its own docker compose file
│ │ ├── radarr.yaml
│ | ├── ombi.yaml
│ │ └── sonarr.yaml
│ ├── traefik # Traefik Reverse Proxy and OAuth
│ ├── core # Traefik Reverse Proxy and OAuth
│ │ ├── oauth # OAuth Service
│ │ └── traefik # Traefik Reverse Proxy
│ │ ├── docker-compose.yaml # Traefik Docker Compose File (Traefik Only)
│ │ └── rules # Traefik Middlewares and Rules
│ │ ├── middlewares-chains.yml
│ │ ├── middlewares.yml
│ │ └── tls-opts.yml
│ └── miscellaneous # Non Media Center Services (pihole, chat-gpt-next-web, etc.)
│ └── chat-gpt-next-web.yaml
│ ├── miscellaneous # Non Media Center Services (pihole, chat-gpt-next-web, etc.)
│ │ └── chat-gpt-next-web.yaml
│ └── utilities # Utility Services
│ └── watchtower.yaml
└── appdata # Application Data Persistent Volumes
├── media-center
├── media
│ ├── plex # Each individual service has its own subdirectory
│ └── sonarr
├── traefik
├── core
│ ├── oauth
│ └── traefik
└── miscellaneous
└── chat-gpt-next-web
├── miscellaneous
│ └── chat-gpt-next-web
└── utilities
└── watchtower
```

### Configuration
Expand All @@ -96,4 +102,6 @@ getting started.
[Radarr]: https://github.com/Radarr/Radarr
[Ombi]: https://github.com/Ombi-app/Ombi
[ChatGPT Next Web]: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web
[pi-hole]: https://github.com/pi-hole/pi-hole
[Watchtower]: https://github.com/containrrr/watchtower
[LibreOffice Online]: https://www.libreoffice.org/
[Portainer]: https://github.com/portainer/portainer
60 changes: 35 additions & 25 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,46 @@ include:
#############################################################################
# TRAEFIK (CORE)
#############################################################################
- stacks/traefik/traefik/docker-compose.yaml # Traefik (Reverse Proxy)
- stacks/traefik/duckdns.yaml # DuckDNS (Dynamic DNS)
- stacks/traefik/oauth.yaml # OAuth (Authentication)
- stacks/traefik/socket-proxy.yaml # Docker Socket Proxy (Security)
#############################################################################
# MEDIA CENTER
#############################################################################
- stacks/media-center/watchtower.yaml # Watchtower (Container Updating)
- stacks/media-center/heimdall.yaml # Heimdall (Landing Page)
- stacks/media-center/ombi.yaml # Ombi (Download Requests)
- stacks/media-center/plex.yaml # Plex (Media Server)
- stacks/media-center/tautulli.yaml # Tautulli (Plex Analytics)
- stacks/media-center/sonarr.yaml # Sonarr (TV Show Downloads)
- stacks/media-center/radarr.yaml # Radarr (Movie Downloads)
- stacks/media-center/prowlarr.yaml # Prowlarr (Indexer)
- stacks/media-center/readarr.yaml # Readarr (Ebook Downloads)
- stacks/media-center/calibre.yaml # Calibre (Books Management)
- stacks/media-center/calibre-web.yaml # Calibre Web-UI
- stacks/media-center/transmission.yaml # Transmission (Torrents Behind VPN)
- stacks/media-center/nzbget.yaml # NZBGet (Usenet Downloading)
- stacks/media-center/portainer.yaml # Portainer (Container Management)
- stacks/media-center/sftpgo.yaml # SFTPGo (File Management)

- stacks/core/traefik/docker-compose.yaml # Traefik (Reverse Proxy)
- stacks/core/duckdns.yaml # DuckDNS (Dynamic DNS)
- stacks/core/oauth.yaml # OAuth (Authentication)
- stacks/core/socket-proxy.yaml # Docker Socket Proxy (Security)

#############################################################################
# MEDIA
#############################################################################

- stacks/media/heimdall.yaml # Heimdall (Landing Page)
- stacks/media/plex.yaml # Plex (Media Server)
- stacks/media/sonarr.yaml # Sonarr (TV Show Downloads)
- stacks/media/radarr.yaml # Radarr (Movie Downloads)
- stacks/media/prowlarr.yaml # Prowlarr (Indexer)
- stacks/media/ombi.yaml # Ombi (Download Requests)
- stacks/media/tautulli.yaml # Tautulli (Plex Analytics)
- stacks/media/transmission.yaml # Transmission (Torrents Behind VPN)
- stacks/media/nzbget.yaml # NZBGet (Usenet Downloading)
# - stacks/media/readarr.yaml # Readarr (Ebook Downloads)
# - stacks/media/calibre.yaml # Calibre (Books Management)
# - stacks/media/calibre-web.yaml # Calibre Web-UI

#############################################################################
# UTILITIES
#############################################################################

- stacks/utilities/watchtower.yaml # Watchtower (Container Updating)
# - stacks/utilities/sftpgo.yaml # SFTPGo (File Management)
# - stacks/utilities/pihole.yaml # Pi-hole (DNS Ad-Blocking)
# - stacks/utilities/portainer.yaml # Portainer (Container Management)

#############################################################################
# MISCELLANEOUS
#
# * Note the existing services that are disabled by default.
#############################################################################
- stacks/miscellaneous/pihole.yaml # Pi-hole (DNS Ad-Blocking)
- stacks/miscellaneous/chat-gpt-next-web.yaml # ChatGPT Next Web
- stacks/miscellaneous/chatgpt-in-slack.yaml # ChatGPT Slack Bot

# - stacks/miscellaneous/chat-gpt-next-web.yaml # ChatGPT Next Web
# - stacks/miscellaneous/chatgpt-in-slack.yaml # ChatGPT Slack Bot
# - stacks/miscellaneous/libreoffice.yaml # LibreOffice (Office Suite)

################################################################################
Expand Down
2 changes: 1 addition & 1 deletion docs/applications/traefik.md → docs/applications/core.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Traefik Stack
# Core Stack

## traefik

Expand Down
29 changes: 1 addition & 28 deletions docs/applications/media_center.md → docs/applications/media.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Media Center Stack
# Media Stack

## Table of Contents

Expand All @@ -13,8 +13,6 @@
- [calibre-web](#calibre-web)
- [transmission](#transmission)
- [nzbget](#nzbget)
- [sftpgo](#sftpgo)
- [portainer](#portainer)
- [heimdall](#heimdall)

## plex
Expand Down Expand Up @@ -194,31 +192,6 @@ for many popular VPN providers to make the setup easier.

NZBGet is a binary downloader, which downloads files from Usenet based on information given in nzb-files.

## sftpgo

[![](https://img.shields.io/static/v1?message=drakkan/sftpgo&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/drakkan/sftpgo)
[![](https://img.shields.io/static/v1?message=drakkan/sftpgo&logo=github&label=github)](https://github.com/drakkan/sftpgo)
[![](https://img.shields.io/static/v1?message=sftpgo.com&logo=google+chrome&label=website&color=teal)](https://sftpgo.com)

<img src="https://i.imgur.com/wgtgGWr.png" width="250" alt="SFTPGo Logo">

SFTPGo is a fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support.
It's a fast and reliable solution to access your files with a WebUI, SFTP, and more.

## portainer

[![](https://img.shields.io/static/v1?message=portainer/portainer-ce&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/portainer/portainer-ce)
[![](https://img.shields.io/static/v1?message=portainer/portainer&logo=github&label=github)](https://github.com/portainer/portainer)
[![](https://img.shields.io/static/v1?message=portainer.io&logo=google+chrome&label=website&color=teal)](https://www.portainer.io)

<img src="https://i.imgur.com/CybNVn6.png" width="350" alt="Portainer Logo">

Portainer Community Edition is a lightweight service delivery platform for containerized applications
that can be used to manage Docker, Swarm, Kubernetes and ACI environments. It is designed to be as
simple to deploy as it is to use. The application allows you to manage all your orchestrator
resources (containers, images, volumes, networks and more) through a ‘smart’ GUI and/or
an extensive API.

## heimdall

[![](https://img.shields.io/static/v1?message=linuxserver/heimdall&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/linuxserver/heimdall)
Expand Down
19 changes: 0 additions & 19 deletions docs/applications/miscellaneous.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,5 @@
# Miscellaneous Stack

## pi-hole

[![](https://img.shields.io/static/v1?message=pi-hole/pi-hole&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/pihole/pihole)
[![](https://img.shields.io/static/v1?message=pi-hole/pi-hole&logo=github&label=github)](https://github.com/pi-hole/pi-hole)
[![](https://img.shields.io/static/v1?message=pi-hole.net&logo=google+chrome&label=website&color=teal)](https://pi-hole.net)

<img src="https://i.imgur.com/br5HOpz.png" width="150" alt="Pi-hole Logo">

The Pi-hole is a DNS sinkhole that protects your devices from unwanted content without
installing any client-side software.

!!! info "Admin Password"

The default admin password for pi-hole must be set manually:

```shell
docker compose exec pihole /bin/bash -c "sudo pihole -a -p YourNewPassword"
```

## chat-gtp-next-web

[![](https://img.shields.io/static/v1?message=yidadaa/chatgpt-next-web&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/yidadaa/chatgpt-next-web)
Expand Down
45 changes: 45 additions & 0 deletions docs/applications/utilities.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Utilities Stack

## pi-hole

[![](https://img.shields.io/static/v1?message=pi-hole/pi-hole&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/pihole/pihole)
[![](https://img.shields.io/static/v1?message=pi-hole/pi-hole&logo=github&label=github)](https://github.com/pi-hole/pi-hole)
[![](https://img.shields.io/static/v1?message=pi-hole.net&logo=google+chrome&label=website&color=teal)](https://pi-hole.net)

<img src="https://i.imgur.com/br5HOpz.png" width="150" alt="Pi-hole Logo">

The Pi-hole is a DNS sinkhole that protects your devices from unwanted content without
installing any client-side software.

!!! info "Admin Password"

The default admin password for pi-hole must be set manually:

```shell
docker compose exec pihole /bin/bash -c "sudo pihole -a -p YourNewPassword"
```

## sftpgo

[![](https://img.shields.io/static/v1?message=drakkan/sftpgo&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/drakkan/sftpgo)
[![](https://img.shields.io/static/v1?message=drakkan/sftpgo&logo=github&label=github)](https://github.com/drakkan/sftpgo)
[![](https://img.shields.io/static/v1?message=sftpgo.com&logo=google+chrome&label=website&color=teal)](https://sftpgo.com)

<img src="https://i.imgur.com/wgtgGWr.png" width="250" alt="SFTPGo Logo">

SFTPGo is a fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support.
It's a fast and reliable solution to access your files with a WebUI, SFTP, and more.

## portainer

[![](https://img.shields.io/static/v1?message=portainer/portainer-ce&logo=docker&label=docker&color=blue)](https://hub.docker.com/r/portainer/portainer-ce)
[![](https://img.shields.io/static/v1?message=portainer/portainer&logo=github&label=github)](https://github.com/portainer/portainer)
[![](https://img.shields.io/static/v1?message=portainer.io&logo=google+chrome&label=website&color=teal)](https://www.portainer.io)

<img src="https://i.imgur.com/CybNVn6.png" width="350" alt="Portainer Logo">

Portainer Community Edition is a lightweight service delivery platform for containerized applications
that can be used to manage Docker, Swarm, Kubernetes and ACI environments. It is designed to be as
simple to deploy as it is to use. The application allows you to manage all your orchestrator
resources (containers, images, volumes, networks and more) through a ‘smart’ GUI and/or
an extensive API.
20 changes: 10 additions & 10 deletions docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -429,13 +429,13 @@ Start just the media services (plex, sonarr, radarr, etc).
=== "docker"

```shell
docker compose --profile media-center up -d
docker compose --profile media up -d
```

=== "homelab-compose"

```shell
homelab-compose --profile media-center up -d
homelab-compose --profile media up -d
```

#### media-down
Expand All @@ -457,13 +457,13 @@ Stop just the media services (plex, sonarr, radarr, etc).
=== "docker"

```shell
docker compose --profile media-center down
docker compose --profile media down
```

=== "homelab-compose"

```shell
homelab-compose --profile media-center down
homelab-compose --profile media down
```

#### media-logs
Expand All @@ -485,13 +485,13 @@ Show the logs for the media services (plex, sonarr, radarr, etc).
=== "docker"

```shell
docker compose --profile media-center logs -ft
docker compose --profile media logs -ft
```

=== "homelab-compose"

```shell
homelab-compose --profile media-center logs -ft
homelab-compose --profile media logs -ft
```

### Configuration 🪛
Expand All @@ -515,10 +515,10 @@ Initialize the `acme.json` file for traefik.
=== "bash"

```shell
mkdir -p appdata/traefik/traefik/acme/ && \
rm -f appdata/traefik/traefik/acme/acme.json && \
touch appdata/traefik/traefik/acme/acme.json && \
chmod 600 appdata/traefik/traefik/acme/acme.json
mkdir -p appdata/core/traefik/acme/ && \
rm -f appdata/core/traefik/acme/acme.json && \
touch appdata/core/traefik/acme/acme.json && \
chmod 600 appdata/core/traefik/acme/acme.json
```

### Backup 🗂️
Expand Down
2 changes: 1 addition & 1 deletion docs/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ correct service. It is the first service that you should start with:
## App Deployment

Which apps to deploy are defined in the `docker-compose.yaml` files. For example,
To disable specific apps in the `media-center` stack, you would comment out the `include` directive
To disable specific apps in the `media` stack, you would comment out the `include` directive
in the root `docker-compose.yaml` file.

<details><summary>📄 docker-compose.yaml</summary>
Expand Down
Loading

0 comments on commit 2603ec3

Please sign in to comment.