home prod
I’ve been running Plex, Sonarr, Radarr, Lidarr, NZBget, Ombi, and more for a long time at home. It’s lived on my QNAP goofynewton
for as long as I’ve had it. I’m getting ready to migrate everything over to my NVMe NAS (more power and consolidation - to include my Frigate/Compreface/DoubleTake setup), so I figured I should document how everything worked in Docker before I migrate to NixOS to host it all. Don’t worry my NixOS friends, I’ll be sure to update with a part 2 describing that setup and configuration once I have it all working.
Scope
The scope of this post will include everything that I’m running for our Home Production network:
- Reverse Proxy with automatic HTTPS
- Plex (migrating to Jellyfin)
- Jellyfin
- Sonarr
- Radarr
- Lidarr
- TDARR
- NZBGet
- Home Assistant
- Frigate
- CompreFace
- Double Take
- Pihole
- and more….
docker-compose.yml
Below you’ll find a redacted version of my Docker Compose file.
---
version: "2.1"
services:
swag:
image: lscr.io/linuxserver/swag:latest
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- URL=wes.today
- VALIDATION=http
- SUBDOMAINS=wesflix,sonarr,radarr,nzbget,ombi,ha
- [email protected]
- ONLY_SUBDOMAINS=true
- STAGING=false
volumes:
- /mnt/appdata/swag:/config
ports:
- 443:443
- 80:80 #optional
restart: unless-stopped
syncthing:
image: lscr.io/linuxserver/syncthing:latest
container_name: syncthing
hostname: goofynewton #optional
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /mnt/appdata/syncthing/:/config
- /home/wk/mediacenter:/mediacenter
- /media/home:/homes
- /mnt/appdata:/appdata
- /media/.hidden:/hidden
ports:
- 8384:8384
- 22000:22000/tcp
- 22000:22000/udp
- 21027:21027/udp
restart: unless-stopped
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=1000
- PGID=1000
- VERSION=docker
- PLEX_CLAIM=FIXME_MOVETOENV # optional
volumes:
- /mnt/appdata/plex:/config
- /media/shows:/tv
- /media/movies:/movies
- /media/music:/music
- /media/kids:/kids
- /media/kids_movies:/kids_movies
restart: unless-stopped
sonarr:
image: lscr.io/linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /mnt/appdata/sonarr:/config
- /media/shows/shows:/shows
- /mnt/appdata/downloads:/downloads
- /media/kids:/kids
ports:
- 8989:8989
restart: unless-stopped
radarr:
image: lscr.io/linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /mnt/appdata/radarr:/config
- /media/movies/movies:/movies
- /media/kids_movies:/kids_movies
- /mnt/appdata/downloads:/downloads
ports:
- 7878:7878
restart: unless-stopped
nzbget:
image: lscr.io/linuxserver/nzbget:latest
container_name: nzbget
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /mnt/appdata/nzbget:/config
- /mnt/appdata/downloads:/downloads
ports:
- 6789:6789
restart: unless-stopped
tautulli:
image: lscr.io/linuxserver/tautulli:latest
container_name: tautulli
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /mnt/appdata/tautulli:/config
ports:
- 8181:8181
restart: unless-stopped
ombi:
image: lscr.io/linuxserver/ombi:latest
container_name: ombi
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /mnt/appdata/ombi:/config
ports:
- 3579:3579
restart: unless-stopped
tdarr:
image: ghcr.io/haveagitgat/tdarr:latest
container_name: tdarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- UMASK_SET=002
- serverIP=10.80.0.20
- serverPort=8266
- webUIPort=8265
- internalNode=true
- nodeID=tdarr-mgmt
volumes:
- /mnt/appdata/tdarr/server:/app/server
- /mnt/appdata/tdarr/configs:/app/configs
- /mnt/appdata/tdarr/logs:/app/logs
- /media:/media
- /mnt/transcode:/temp
ports:
- 8265:8265
- 8266:8266
- 8267:8267
- 8268:8268
restart: unless-stopped
homeassistant:
image: lscr.io/linuxserver/homeassistant:latest
container_name: homeassistant
depends_on:
- ha_postgres
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /mnt/appdata/homeassistant:/config
- /run/dbus:/run/dbus:ro
ports:
- 8123:8123
restart: unless-stopped
mdns-reflector:
image: monstrenyatko/mdns-repeater
container_name: mdns-reflector
restart: unless-stopped
command: mdns-repeater-app -f $MDNS_REPEATER_INTERFACES
env_file: env/mdns.env
network_mode: "host"
ha_mq:
container_name: ha_mq
image: nanomq/nanomq:0.6.6
ports:
- 1883:1883
restart: always
ha_esphome:
image: esphome/esphome:latest
devices:
- "/dev/bus/usb:/dev/bus/usb"
privileged: true
container_name: ha_esphome
volumes:
- /mnt/appdata/ha_esphome/config:/config:rw
- /etc/localtime:/etc/localtime:ro
environment:
- ESPHOME_DASHBOARD_USE_PING=true
ports:
- 6053:6053
- 6152:6052
- 6123:6123
restart: unless-stopped
ha_postgres:
container_name: ha_postgres
image: postgres:14.5
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "FIXME_MOVETOENV" ]
timeout: 45s
interval: 10s
retries: 10
restart: always
environment:
- POSTGRES_USER=FIXME_MOVETOENV
- POSTGRES_PASSWORD=FIXME_MOVETOENV
- APP_DB_USER=FIXME_MOVETOENV
- APP_DB_PASS=FIXME_MOVETOENV
- APP_DB_NAME=ha_db
volumes:
- /mnt/appdata/ha_postgres/init/:/docker-entrypoint-initdb.d/
- /mnt/appdata/ha_postgres/data/:/var/lib/postgresql/data/
ports:
- 5432:5432
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80/tcp"
environment:
TZ: 'America/New_York'
WEBPASSWORD: 'FIXME_MOVETOENV'
volumes:
- '/mnt/appdata/pihole/etc-pihole:/etc/pihole'
- '/mnt/appdata/pihole/etc-dnsmasq.d:/etc/dnsmasq.d'
restart: unless-stopped
wolrelay:
init: true
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5000"]
interval: 1m30s
timeout: 10s
retries: 3
network_mode: host
image: wolrelay:latest
build:
context: ./WOLRelay
dockerfile: Dockerfile