Home Media Stack


Docker
Docker Networks
Oracle Cloud
Cloudflare
Nginx Reverse Proxy
Wireguard
PiHole
Sonarr
Plex
Jackett
Transmission
Authelia

A home media stack project to make life easier. As I enjoy shows and anime, I've set up a home media stack to make it easier to watch and manage everything.

Project Overview


  • Hosted on oracle cloud
  • Services proxies through Cloudflare
  • Sonarr indexer in conjunction with Jackett
  • Wireguard traffic through DNS sinkhole (Pi-hole) container for adblocking
  • Plex for media management
  • All services are containerized using Docker and running on single machine
  • All exposed services secured with Authelia

Sample Images


home media stack 0home media stack 1home media stack 2

My Configurations


Full network configuration details are not shared for obvious reasons :)

Authelia Compose File

--- version: "3.8" services: authelia: container_name: authelia image: authelia/authelia:latest restart: unless-stopped ports: - 9091:9091 volumes: - ${PWD}/data/authelia/config:/config environment: TZ: "America/New_York" networks: default: name: swag external: true

Sonarr Compose File

version: "2.1" services: sonarr: image: lscr.io/linuxserver/sonarr:latest container_name: sonarr environment: - PUID=1000 - PGID=1000 - TZ=Europe/London volumes: - ~/sonarr/config:/config - ~/plex/tv:/tv #optional - ~/plex/movies/:/movies - ~/plex/downloads:/downloads #optional restart: unless-stopped jackett: image: lscr.io/linuxserver/jackett:latest container_name: jackett environment: - PUID=1000 - PGID=1000 - TZ=Europe/London - AUTO_UPDATE=true #optional - RUN_OPTS=<run options here> #optional volumes: - ./jackett/config:/config - ./jackett/downloads:/downloads ports: - 9117:9117 restart: unless-stopped networks: default: name: swag external: true

Jupyter Compose File

--- version: "3.8" services: jupyter: image: jupyter/datascience-notebook:latest container_name: jupyter stdin_open: true tty: true environment: JUPYTER_ENABLE_LAB: true JUPYTER_TOKEN: "" volumes: - ./work:/home/jovyan/work:rw networks: default: name: swag external: true

Swag Compose File

--- version: "3.8" services: swag: container_name: swag image: lscr.io/linuxserver/swag:latest stdin_open: true tty: true cap_add: - NET_ADMIN restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ${PWD}/data/nginx/snippets:/config/nginx/snippet - ${PWD}/data/nginx/site-confs:/config/nginx/site-confs - ${PWD}/config:/config environment: TZ: "America/New_York" DOCKER_MODS: "linuxserver/mods:nginx-proxy-confs" PUID: 1000 PGID: 1000 URL: lefan.ca VALIDATION: dns DNSPLUGIN: cloudflare SUBDOMAINS: wildcard networks: default: name: swag external: true

Jupyter Compose File

--- version: "3.8" services: jupyter: image: jupyter/datascience-notebook:latest container_name: jupyter stdin_open: true tty: true environment: JUPYTER_ENABLE_LAB: true JUPYTER_TOKEN: "" volumes: - ./work:/home/jovyan/work:rw networks: default: name: swag external: true