435 lines
13 KiB
YAML
435 lines
13 KiB
YAML
networks:
|
|
nginx-bridge:
|
|
external: true
|
|
|
|
services:
|
|
plex:
|
|
image: plexinc/pms-docker:latest
|
|
container_name: plex
|
|
hostname: plex
|
|
domainname: plex.gbrown.org
|
|
networks: [nginx-bridge]
|
|
group_add: [105, 39]
|
|
ports:
|
|
- 32400:32400/tcp # REQUIRED
|
|
#- 5353:5353/udp # For older Bonjour/Avahi network discovery
|
|
#- 8324:8324/tcp # For Plex Roku App
|
|
- 32410:32410/udp # For network discovery
|
|
- 32412:32412/udp # For network discovery
|
|
- 32413:32413/udp # For network discovery
|
|
- 32414:32414/udp # For network discovery
|
|
#- 1900:1900/udp # For DLNA
|
|
- 32469:32469/tcp # For DLNA
|
|
environment:
|
|
- TZ=America/New_York
|
|
- PLEX_UID=1000
|
|
- PLEX_GID=1000
|
|
- PLEX_CLAIM=${PLEX_CLAIM}
|
|
- ADVERTISE_IP=http://192.168.0.43
|
|
- NVIDIA_VISIBLE_DEVICES=all
|
|
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
|
labels: ["com.centurylinklabs.watchtower.enable=true"]
|
|
volumes:
|
|
- /run:/run
|
|
- ./volumes/plex/config:/config
|
|
- ./volumes/plex/transcode:/transcode
|
|
- /home/gib/Public/Movies:/data/movies
|
|
- /home/gib/Public/TV:/data/tvshows
|
|
- /home/gib/Public/Music:/data/music
|
|
- /home/gib/Public/Audiobooks:/data/audiobooks
|
|
- /home/gib/Public/Podcasts:/data/podcasts
|
|
devices: [/dev/dri:/dev/dri]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
security_opt: ["seccomp:unconfined"]
|
|
runtime: nvidia
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [gpu]
|
|
|
|
jellyfin:
|
|
image: jellyfin/jellyfin
|
|
container_name: jellyfin
|
|
hostname: jellyfin
|
|
domainname: jellyfin.gbrown.org
|
|
networks: [nginx-bridge]
|
|
group_add: [105, 39]
|
|
ports: [7359:7359/udp]
|
|
user: 1000:1000
|
|
environment:
|
|
- JELLYFIN_PublishedServerUrl=https://jellyfin.gbrown.org
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
volumes:
|
|
- ./volumes/jellyfin/config:/config
|
|
- ./volumes/jellyfin/cache:/cache
|
|
- /home/gib/Public/Movies:/data/movies
|
|
- /home/gib/Public/TV:/data/tvshows
|
|
- /home/gib/Public/Music:/data/music
|
|
- /home/gib/Public/Audiobooks:/data/audiobooks
|
|
- /home/gib/Public/Podcasts:/data/podcasts
|
|
- /home/gib/.local/share/fonts:/usr/local/share/fonts/custom:ro
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
devices: [/dev/dri:/dev/dri]
|
|
security_opt: [seccomp:unconfined]
|
|
runtime: nvidia
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [gpu]
|
|
|
|
audiobookshelf:
|
|
image: ghcr.io/advplyr/audiobookshelf:latest
|
|
container_name: audiobookshelf
|
|
hostname: audiobookshelf
|
|
domainname: audio.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [80:80]
|
|
environment: [TZ=America/New_York, PUID=1000, PGID=1000]
|
|
labels: ["com.centurylinklabs.watchtower.enable=true"]
|
|
volumes:
|
|
- ./volumes/audiobookshelf/config:/config
|
|
- ./volumes/audiobookshelf/metadata:/metadata
|
|
- /home/gib/Public/Audiobooks:/audiobooks
|
|
- /home/gib/Public/Podcasts:/podcasts
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
jellyplex-watched:
|
|
image: luigi311/jellyplex-watched:latest
|
|
container_name: jellyplex-watched
|
|
hostname: jellyplex-watched
|
|
networks: [nginx-bridge]
|
|
environment:
|
|
DRYRUN: False
|
|
DEBUG_LEVEL: INFO # Or debug for verbose logging
|
|
RUN_ONLY_ONCE: False
|
|
SLEEP_DURATION: 3600
|
|
REQUEST_TIMEOUT: 300
|
|
MAX_THREADS: 2
|
|
GENERATE_GUIDS: False
|
|
GENERATE_LOCATIONS: True
|
|
USER_MAPPING: '{ "gib": "gibby_b", "adrian": "Adrian"}'
|
|
LIBRARY_MAPPING: '{ "TV Shows": "Shows"}'
|
|
PLEX_BASEURL: http://plex:32400
|
|
PLEX_TOKEN: ${PLEX_TOKEN}
|
|
SSL_BYPASS: False
|
|
JELLYFIN_BASEURL: http://jellyfin:8096
|
|
JELLYFIN_TOKEN: ${JELLYFIN_TOKEN}
|
|
SYNC_FROM_PLEX_TO_JELLYFIN: True
|
|
SYNC_FROM_JELLYFIN_TO_PLEX: True
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
gluetun:
|
|
image: qmcgaw/gluetun:latest
|
|
container_name: gluetun
|
|
hostname: gluetun
|
|
networks: [nginx-bridge]
|
|
cap_add: [NET_ADMIN]
|
|
devices: [/dev/net/tun:/dev/net/tun]
|
|
#ports:
|
|
#- 8000:8000 # HTTP control server
|
|
#- 8080:8080 # For SABnzbd
|
|
#- 6969:6969 # For qBittorrent
|
|
#- 6881:6881 # For torrent connectivity
|
|
#- 6881:6881/udp # For torrent connectivity
|
|
environment:
|
|
- VPN_SERVICE_PROVIDER=private internet access
|
|
- VPN_TYPE=openvpn
|
|
- SERVER_REGIONS=US East
|
|
- OPENVPN_USER=p7671057
|
|
- OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
|
|
- TZ=America/New_York
|
|
- PUID=1000
|
|
- PGID=100
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
restart: unless-stopped
|
|
tty: true
|
|
stdin_open: true
|
|
|
|
sabnzbd:
|
|
image: lscr.io/linuxserver/sabnzbd:latest
|
|
container_name: sabnzbd
|
|
domainname: sabnzbd.gbrown.org
|
|
network_mode: service:gluetun
|
|
environment: [PUID=1000, PGID=1000, TZ=America/New_York]
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
volumes:
|
|
- ./volumes/sabnzbd:/config
|
|
- /home/gib/Public/Downloads:/downloads
|
|
- /home/gib/Public/Downloads/incomplete:/incomplete-downloads
|
|
depends_on: [gluetun]
|
|
restart: unless-stopped
|
|
tty: true
|
|
stdin_open: true
|
|
|
|
qbittorrent:
|
|
image: linuxserver/qbittorrent:latest
|
|
container_name: qbittorrent
|
|
network_mode: service:gluetun
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=America/New_York
|
|
- WEBUI_PORT=6969
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
volumes:
|
|
- ./volumes/qbittorrent:/config
|
|
- /home/gib/Public/Downloads:/downloads
|
|
depends_on: [gluetun]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
qbit-guard:
|
|
image: ghcr.io/gengines/qbit-guard:latest
|
|
container_name: qbitguard
|
|
hostname: qbitguard
|
|
networks: [nginx-bridge]
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
environment:
|
|
- QBIT_HOST=http://gluetun:6969
|
|
- QBIT_USER=gib
|
|
- QBIT_PASS=${QBIT_PASS}
|
|
- QBIT_ALLOWED_CATEGORIES=tv-sonarr,radarr
|
|
- ENABLE_PREAIR_CHECK=1
|
|
- SONARR_URL=http://sonarr:8989
|
|
- SONARR_API_KEY=${SONARR_API_KEY}
|
|
- SONARR_CATEGORIES=tv-sonarr
|
|
- RADARR_URL=http://radarr:7878
|
|
- RADARR_API_KEY=${RADARR_API_KEY}
|
|
- RADARR_CATEGORIES=radarr
|
|
- ENABLE_ISO_CHECK=1
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
seerr:
|
|
image: ghcr.io/seerr-team/seerr:latest
|
|
container_name: seerr
|
|
init: true
|
|
hostname: seerr
|
|
domainname: seerr.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [5055:5055]
|
|
environment: [LOG_LEVEL=debug, TZ=America/New_York]
|
|
volumes: [./volumes/seerr:/app/config]
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
depends_on: [radarr, sonarr]
|
|
healthcheck:
|
|
test: wget --no-verbose --tries=1 --spider http://localhost:5055/api/v1/status || exit 1
|
|
start_period: 20s
|
|
timeout: 3s
|
|
interval: 15s
|
|
retries: 3
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
prowlarr:
|
|
image: lscr.io/linuxserver/prowlarr:latest
|
|
container_name: prowlarr
|
|
hostname: prowlarr
|
|
domainname: prowlarr.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [9696:9696]
|
|
environment: [PUID=1000, PGID=1000, TZ=America/New_York]
|
|
volumes: [./volumes/prowlarr:/config]
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
depends_on: [qbittorrent, sabnzbd]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
lidarr:
|
|
image: lscr.io/linuxserver/lidarr:latest
|
|
container_name: lidarr
|
|
hostname: lidarr
|
|
domainname: lidarr.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [8686:8686]
|
|
environment: [PUID=1000, PGID=1000, TZ=America/New_York]
|
|
volumes:
|
|
- ./volumes/lidarr:/config
|
|
- /home/gib/Public/Music:/music
|
|
- /home/gib/Public/Downloads:/downloads
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
depends_on: [prowlarr, qbittorrent, sabnzbd]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
radarr:
|
|
image: ghcr.io/linuxserver/radarr:latest
|
|
container_name: radarr
|
|
hostname: radarr
|
|
domainname: radarr.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [7878:7878]
|
|
environment: [PUID=1000, PGID=1000, TZ=America/New_York]
|
|
volumes:
|
|
- ./volumes/radarr:/config
|
|
- /home/gib/Public/Movies:/movies
|
|
- /home/gib/Public/Downloads:/downloads
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
depends_on: [prowlarr, qbittorrent, sabnzbd]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
sonarr:
|
|
image: ghcr.io/linuxserver/sonarr:latest
|
|
container_name: sonarr
|
|
hostname: sonarr
|
|
domainname: sonarr.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [8989:8989]
|
|
environment: [PUID=1000, PGID=1000, TZ=America/New_York]
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
volumes:
|
|
- ./volumes/sonarr:/config
|
|
- /home/gib/Public/TV:/tv
|
|
- /home/gib/Public/Downloads:/downloads
|
|
depends_on: [prowlarr, qbittorrent, sabnzbd]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
bazarr:
|
|
image: lscr.io/linuxserver/bazarr:latest
|
|
container_name: bazarr
|
|
hostname: bazarr
|
|
domainname: bazarr.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [6767:6767]
|
|
environment: [PUID=1000, PGID=1000, TZ=America/New_York]
|
|
volumes:
|
|
- ./volumes/bazarr:/config
|
|
- /home/gib/Public/Movies:/movies
|
|
- /home/gib/Public/TV:/tv
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
whisperasr:
|
|
image: onerahmet/openai-whisper-asr-webservice:latest-gpu
|
|
container_name: whisperasr
|
|
hostname: whisperasr
|
|
networks: [nginx-bridge]
|
|
#ports: [9000:9000]
|
|
environment: [TZ=America/New_York, PUID=1000, PGID=1000, ASR_MODEL=small]
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
devices: [/dev/dri:/dev/dri]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
security_opt: ["seccomp:unconfined"]
|
|
runtime: nvidia
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [gpu]
|
|
|
|
unpackerr:
|
|
image: golift/unpackerr:latest
|
|
container_name: unpackerr
|
|
hostname: unpackerr
|
|
networks: [nginx-bridge]
|
|
volumes:
|
|
- /home/gib/Public/Downloads:/downloads
|
|
- /home/gib/Server/Media/volumes/unpackerr:/config
|
|
environment:
|
|
- TZ=America/New_York
|
|
# log lives in its own volume, NOT in /downloads where the *arr apps scan
|
|
- UN_LOG_FILE=/config/unpackerr.log
|
|
- UN_LOG_FILES=4
|
|
- UN_LOG_FILE_MB=5
|
|
- UN_SONARR_0_URL=http://sonarr:8989
|
|
- UN_SONARR_0_API_KEY=${UN_SONARR_0_API_KEY}
|
|
- UN_RADARR_0_URL=http://radarr:7878
|
|
- UN_RADARR_0_API_KEY=${UN_RADARR_0_API_KEY}
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: always
|
|
|
|
metube:
|
|
image: ghcr.io/alexta69/metube:latest
|
|
container_name: metube
|
|
hostname: metube
|
|
domainname: metube.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [8081:8081]
|
|
environment:
|
|
- TZ=America/New_York
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
|
|
volumes:
|
|
- ./volumes/metube:/cookies:rw
|
|
- /home/gib/Public/Downloads:/downloads:rw
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
pinchflat:
|
|
image: ghcr.io/kieraneglin/pinchflat:latest
|
|
container_name: pinchflat
|
|
hostname: pinchflat
|
|
domainname: pinchflat.gbrown.org
|
|
networks: [nginx-bridge]
|
|
#ports: [8945:8945]
|
|
environment: [TZ=America/New_York, PUID=1000, PGID=1000]
|
|
volumes:
|
|
- ./volumes/pinchflat:/config:rw
|
|
- /home/gib/Public/Downloads:/downloads:rw
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
tty: true
|
|
stdin_open: true
|
|
restart: unless-stopped
|
|
|
|
configarr:
|
|
image: ghcr.io/raydak-labs/configarr:latest
|
|
container_name: configarr
|
|
hostname: configarr
|
|
domainname: configarr.gbrown.org
|
|
networks: [nginx-bridge]
|
|
environment: [TZ=America/New_York, PUID=1000, PGID=1000]
|
|
labels: [com.centurylinklabs.watchtower.enable=true]
|
|
volumes:
|
|
- ./volumes/configarr/config:/app/config
|
|
- ./volumes/configarr/repos:/app/repos
|
|
- ./volumes/configarr/cfs:/app/cfs
|
|
- ./volumes/configarr/templates:/app/templates
|
|
depends_on: [radarr, sonarr]
|
|
tty: true
|
|
stdin_open: true
|
|
# Run-to-completion: configarr syncs TRaSH guides into Sonarr/Radarr,
|
|
# prints an execution summary, and exits 0. It has no built-in scheduler
|
|
# (upstream points at Ofelia or cron for that), so `unless-stopped` here
|
|
# meant a completed sync was immediately restarted -- a hot loop of ~9
|
|
# full syncs every 3 minutes. `no` lets it run once per `up` and stop.
|
|
restart: "no"
|
|
# Opt-in only (`docker compose --profile configarr up configarr`). Its templates
|
|
# create the TRaSH profiles and size limits that were removed on 2026-10-28 in
|
|
# favour of four hand-managed profiles (Mini/Standard/HD/UHD), so a plain `up`
|
|
# must never run it. See Media/compact-tv/README.md.
|
|
profiles: [configarr]
|