Files
homelab/media-servarr/compose.yml
T

475 lines
14 KiB
YAML

services:
qbittorrent:
container_name: qbittorrent
image: ghcr.io/hotio/qbittorrent
restart: unless-stopped
networks:
- proxy
ports:
- 9400:9400
- 6882:6882
- 6882:6882/udp
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
- WEBUI_PORTS=9400/tcp,9400/udp
volumes:
- /lake/starr/qbittorrent:/config
- /lake:/data
labels:
- traefik.enable=true
- traefik.http.routers.qbittorrent-secure.entrypoints=https
- traefik.http.routers.qbittorrent-secure.rule=Host(`qbit.example.com`)
- traefik.http.routers.qbittorrent-secure.tls=true
- traefik.http.routers.qbittorrent-secure.service=qbittorrent
- traefik.http.services.qbittorrent.loadbalancer.server.port=9400
- traefik.docker.network=proxy
deluge:
container_name: deluge
image: lscr.io/linuxserver/deluge:latest
restart: unless-stopped
networks:
- proxy
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
- DELUGE_LOGLEVEL=error
volumes:
- /lake/starr/deluge:/config
- /lake/downloads/torrents:/downloads
ports:
- 8112:8112
- 6881:6881
- 6881:6881/udp
labels:
- traefik.enable=true
- traefik.http.routers.deluge-secure.entrypoints=https
- traefik.http.routers.deluge-secure.rule=Host(`del.example.com`)
- traefik.http.routers.deluge-secure.tls=true
- traefik.http.routers.deluge-secure.service=deluge
- traefik.http.services.deluge.loadbalancer.server.port=8112
- traefik.docker.network=proxy
plex:
container_name: plex
image: lscr.io/linuxserver/plex:latest
restart: unless-stopped
networks:
- proxy
runtime: nvidia
ports:
- 32400:32400/tcp
- 8324:8324/tcp
- 32469:32469/tcp
- 32410:32410/udp
- 32412:32412/udp
- 32413:32413/udp
- 32414:32414/udp
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
- NVIDIA_VISIBLE_DEVICES=all
- VERSION=docker
- PLEX_CLAIM= #optional get from plex.tv/claim
- ADVERTISE_IP=http://PLEX_SERVER_IP_ADDRESS:32400/
volumes:
- /lake/starr/plexmediaserver:/config
- /lake/media:/media
labels:
- traefik.enable=true
- traefik.http.routers.plex-secure.entrypoints=https
- traefik.http.routers.plex-secure.rule=Host(`plex.example.com`)
- traefik.http.routers.plex-secure.tls=true
- traefik.http.routers.plex-secure.service=plex
- traefik.http.services.plex.loadbalancer.server.port=32400
- traefik.docker.network=proxy
jellyfin:
container_name: jellyfin
image: lscr.io/linuxserver/jellyfin:latest
restart: unless-stopped
networks:
- proxy
runtime: nvidia
ports:
- 8096:8096
- 8920:8920 #optional
- 7359:7359/udp #optional
# - 1900:1900/udp #optional
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
- NVIDIA_VISIBLE_DEVICES=all
- JELLYFIN_PublishedServerUrl=JELLYFIN_SERVER_IP_ADDRESS
volumes:
- /lake/starr/jellyfin:/config
- /lake/media:/media
labels:
- traefik.enable=true
- traefik.http.routers.jellyfin-secure.entrypoints=https
- traefik.http.routers.jellyfin-secure.rule=Host(`jf.example.com`)
- traefik.http.routers.jellyfin-secure.tls=true
- traefik.http.routers.jellyfin-secure.service=jellyfin
- traefik.http.services.jellyfin.loadbalancer.server.port=8096
- traefik.docker.network=proxy
radarr:
container_name: radarr
image: ghcr.io/hotio/radarr
restart: unless-stopped
networks:
- proxy
ports:
- 7878:7878
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
depends_on:
- prowlarr
volumes:
- /etc/localtime:/etc/localtime:ro
- /lake/starr/radarr:/config
- /lake:/data
labels:
- traefik.enable=true
- traefik.http.routers.radarr-secure.entrypoints=https
- traefik.http.routers.radarr-secure.rule=Host(`radarr.example.com`)
- traefik.http.routers.radarr-secure.tls=true
- traefik.http.routers.radarr-secure.service=radarr
- traefik.http.services.radarr.loadbalancer.server.port=7878
- traefik.docker.network=proxy
sonarr:
container_name: sonarr
image: ghcr.io/hotio/sonarr
restart: unless-stopped
networks:
- proxy
ports:
- 8989:8989
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
depends_on:
- prowlarr
volumes:
- /etc/localtime:/etc/localtime:ro
- /lake/starr/sonarr:/config
- /lake:/data
labels:
- traefik.enable=true
- traefik.http.routers.sonarr-secure.entrypoints=https
- traefik.http.routers.sonarr-secure.rule=Host(`sonarr.example.com`)
- traefik.http.routers.sonarr-secure.tls=true
- traefik.http.routers.sonarr-secure.service=sonarr
- traefik.http.services.sonarr.loadbalancer.server.port=8989
- traefik.docker.network=proxy
lidarr:
container_name: lidarr
image: ghcr.io/hotio/lidarr
restart: unless-stopped
networks:
- proxy
ports:
- 8686:8686
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
depends_on:
- prowlarr
volumes:
- /etc/localtime:/etc/localtime:ro
- /lake/starr/lidarr:/config
- /lake:/data
labels:
- traefik.enable=true
- traefik.http.routers.lidarr-secure.entrypoints=https
- traefik.http.routers.lidarr-secure.rule=Host(`lidarr.example.com`)
- traefik.http.routers.lidarr-secure.tls=true
- traefik.http.routers.lidarr-secure.service=lidarr
- traefik.http.services.lidarr.loadbalancer.server.port=8686
- traefik.docker.network=proxy
whisparr:
container_name: whisparr
image: ghcr.io/hotio/whisparr
restart: unless-stopped
networks:
- proxy
ports:
- 6969:6969
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
depends_on:
- prowlarr
volumes:
- /etc/localtime:/etc/localtime:ro
- /lake/starr/whisparr:/config
- /lake:/data
labels:
- traefik.enable=true
- traefik.http.routers.whisparr-secure.entrypoints=https
- traefik.http.routers.whisparr-secure.rule=Host(`whisparr.example.com`)
- traefik.http.routers.whisparr-secure.tls=true
- traefik.http.routers.whisparr-secure.service=whisparr
- traefik.http.services.whisparr.loadbalancer.server.port=6969
- traefik.docker.network=proxy
bazarr:
container_name: bazarr
image: ghcr.io/hotio/bazarr
restart: unless-stopped
networks:
- proxy
ports:
- 6767:6767
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
depends_on:
- radarr
- sonarr
volumes:
- /lake/starr/bazarr:/config
- /lake:/data
labels:
- traefik.enable=true
- traefik.http.routers.bazarr-secure.entrypoints=https
- traefik.http.routers.bazarr-secure.rule=Host(`bazarr.example.com`)
- traefik.http.routers.bazarr-secure.tls=true
- traefik.http.routers.bazarr-secure.service=bazarr
- traefik.http.services.bazarr.loadbalancer.server.port=6767
- traefik.docker.network=proxy
prowlarr:
container_name: prowlarr
image: ghcr.io/hotio/prowlarr
restart: unless-stopped
networks:
- proxy
ports:
- 9696:9696
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
depends_on:
- qbittorrent
volumes:
- /etc/localtime:/etc/localtime:ro
- /lake/starr/prowlarr:/config
labels:
- traefik.enable=true
- traefik.http.routers.prowlarr-secure.entrypoints=https
- traefik.http.routers.prowlarr-secure.rule=Host(`prowlarr.example.com`)
- traefik.http.routers.prowlarr-secure.tls=true
- traefik.http.routers.prowlarr-secure.service=prowlarr
- traefik.http.services.prowlarr.loadbalancer.server.port=9696
- traefik.docker.network=proxy
jackett:
container_name: jackett
image: lscr.io/linuxserver/jackett:latest
restart: unless-stopped
networks:
- proxy
ports:
- 9117:9117
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
- AUTO_UPDATE=true
depends_on:
- qbittorrent
volumes:
- /lake/starr/jackett:/config
- /lake/downloads/torrents:/downloads
labels:
- traefik.enable=true
- traefik.http.routers.jackett-secure.entrypoints=https
- traefik.http.routers.jackett-secure.rule=Host(`jackett.example.com`)
- traefik.http.routers.jackett-secure.tls=true
- traefik.http.routers.jackett-secure.service=jackett
- traefik.http.services.jackett.loadbalancer.server.port=9117
- traefik.docker.network=proxy
seerr:
container_name: seerr
image: ghcr.io/hotio/seerr
restart: unless-stopped
networks:
- proxy
ports:
- 5055:5055
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
- LOG_LEVEL=warn
depends_on:
- radarr
- sonarr
volumes:
- /lake/starr/seerr:/config
labels:
- traefik.enable=true
- traefik.http.routers.seerr-secure.entrypoints=https
- traefik.http.routers.seerr-secure.rule=Host(`seerr.example.com`)
- traefik.http.routers.seerr-secure.tls=true
- traefik.http.routers.seerr-secure.service=seerr
- traefik.http.services.seerr.loadbalancer.server.port=5055
- traefik.docker.network=proxy
tautulli:
container_name: tautulli
image: ghcr.io/hotio/tautulli
restart: unless-stopped
networks:
- proxy
ports:
- 8181:8181
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
volumes:
- /lake/starr/tautulli:/config
labels:
- traefik.enable=true
- traefik.http.routers.tautulli-secure.entrypoints=https
- traefik.http.routers.tautulli-secure.rule=Host(`tautulli.example.com`)
- traefik.http.routers.tautulli-secure.tls=true
- traefik.http.routers.tautulli-secure.service=tautulli
- traefik.http.services.tautulli.loadbalancer.server.port=8181
- traefik.docker.network=proxy
jellystat-db:
container_name: jellystat-db
image: postgres:15.2
restart: unless-stopped
networks:
- proxy
environment:
- POSTGRES_DB=jfstat
- POSTGRES_USER=jfstat
- POSTGRES_PASSWORD=DB_PASSWORD # CHANGE THIS TO A SECURE PASSWORD
volumes:
- /lake/starr/jellystat/db:/var/lib/postgresql/data
jellystat:
container_name: jellystat
image: cyfershepard/jellystat:latest
restart: unless-stopped
networks:
- proxy
ports:
- 3040:3000
environment:
- POSTGRES_USER=jfstat
- POSTGRES_PASSWORD=DB_PASSWORD # CHANGE THIS TO THE SAME SECURE PASSWORD FROM ABOVE
- POSTGRES_IP=jellystat-db
- POSTGRES_PORT=5432
- JWT_SECRET=SUPER_SECRET_STRING # CHANGE THIS TO A RANDOM SECURE STRING
depends_on:
- jellystat-db
- jellyfin
volumes:
- /lake/starr/jellystat:/app/backend/backup-data
labels:
- traefik.enable=true
- traefik.http.routers.jellystat-secure.entrypoints=https
- traefik.http.routers.jellystat-secure.rule=Host(`jellystat.example.com`)
- traefik.http.routers.jellystat-secure.tls=true
- traefik.http.routers.jellystat-secure.service=jellystat
- traefik.http.services.jellystat.loadbalancer.server.port=3000
ytdl_material:
container_name: youtube-dl
image: tzahi12345/youtubedl-material:latest
restart: unless-stopped
networks:
- proxy
ports:
- 8998:17442
environment:
ytdl_mongodb_connection_string: mongodb://ytdl-mongo-db:27017
ytdl_use_local_db: "false"
write_ytdl_config: "true"
depends_on:
- ytdl-mongo-db
volumes:
- /lake/starr/youtube-dl/appdata:/app/appdata
- /lake/media/youtube-music:/app/audio
- /lake/media/youtube:/app/video
- /lake/media/youtube-subscriptions:/app/subscriptions
- /lake/starr/youtube-dl/users:/app/users
labels:
- traefik.enable=true
- traefik.http.routers.youtube-dl-secure.entrypoints=https
- traefik.http.routers.youtube-dl-secure.rule=Host(`ytdl.example.com`)
- traefik.http.routers.youtube-dl-secure.tls=true
- traefik.http.routers.youtube-dl-secure.service=youtube-dl
- traefik.http.services.youtube-dl.loadbalancer.server.port=8686
- traefik.docker.network=proxy
#- traefik.http.routers.youtube-dl-secure.middlewares=authelia@docker # Since yt-dl has no authentication system, you can use authelia or similar
ytdl-mongo-db:
container_name: youtube-dl-mongodb
image: mongo
restart: unless-stopped
networks:
- proxy
logging:
driver: none
volumes:
- /lake/starr/youtube-dl-mongodb/:/data/db
autoscan:
container_name: autoscan
image: ghcr.io/hotio/autoscan
restart: unless-stopped
networks:
- proxy
ports:
- 3030:3030
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
- PLEX_LOGIN=
- PLEX_PASSWORD=
depends_on:
- radarr
- sonarr
- lidarr
volumes:
- /lake/starr/autoscan:/config
- /lake:/data
maintainerr:
container_name: maintainerr
image: ghcr.io/maintainerr/maintainerr:latest
restart: unless-stopped
networks:
- proxy
user: 1000:1000
environment:
- TZ=Asia/Riyadh # CHANGE THIS TO YOUR TIMEZONE
# - DEBUG=true # uncomment to enable debug logs
ports:
- 6246:6246
depends_on:
- radarr
- sonarr
- plex
- seerr
volumes:
- type: bind
source: /lake/starr/maintainerr
target: /opt/data
labels:
- traefik.enable=true
- traefik.http.routers.maintainerr-secure.entrypoints=https
- traefik.http.routers.maintainerr-secure.rule=Host(`maintainerr.example.com`)
- traefik.http.routers.maintainerr-secure.tls=true
- traefik.http.routers.maintainerr-secure.service=maintainerr
- traefik.http.services.maintainerr.loadbalancer.server.port=6246
networks:
proxy:
external: true