Skip to content

Instantly share code, notes, and snippets.

@calops
Created January 19, 2026 11:24
Show Gist options
  • Select an option

  • Save calops/48c59ea5f56beeee2a110de07464fcaa to your computer and use it in GitHub Desktop.

Select an option

Save calops/48c59ea5f56beeee2a110de07464fcaa to your computer and use it in GitHub Desktop.
Tocard Media Center
# Tocard media server
version: "3"
services:
traefik:
container_name: traefik
image: traefik:2.11
restart: unless-stopped
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- $TRAEFIK_DIR/config:/etc/traefik
- $TRAEFIK_DIR/letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "traefik.enable=true"
emby:
container_name: emby
image: emby/embyserver:latest
restart: unless-stopped
privileged: true
volumes:
- $EMBY_DIR/config:/config
- $DATA_SERIES:/data/series
- $DATA_MOVIES:/data/movies
ports:
- 8096:8096 # http
- 8920:8920 # https
- 7359:7359 # emby remote control
- 1900:1900/udp # emby remote control
devices:
- /dev/dri:/dev/dri
labels:
- traefik.enable=true
- traefik.http.routers.emby.rule=Host(`${EMBY_DOMAIN}`)
- traefik.http.routers.emby.entrypoints=web,websecure
- traefik.http.routers.emby.tls.certresolver=letsencrypt
- traefik.http.services.emby.loadbalancer.server.port=${EMBY_PORT}
# - traefik.http.routers.emby.middlewares=auth_coadmin
organizr:
container_name: organizr
image: organizr/organizr:latest
restart: unless-stopped
volumes:
- $ORGANIZR_DIR:/config
labels:
- traefik.enable=true
- traefik.http.routers.organizr.rule=Host(`organizr.tocards.net`)
- traefik.http.routers.organizr.entrypoints=websecure
- traefik.http.routers.organizr.tls.certresolver=letsencrypt
- traefik.http.services.organizr.loadbalancer.server.port=${ORGANIZR_PORT}
- traefik.http.middlewares.auth_admin.forwardauth.address=https://organizr.tocards.net/api/v2/auth/0
- traefik.http.middlewares.auth_coadmin.forwardauth.address=https://organizr.tocards.net/api/v2/auth/1
- traefik.http.middlewares.auth_user.forwardauth.address=https://organizr.tocards.net/api/v2/auth/4
depends_on:
- traefik
environment:
- fpm=true
sonarr:
container_name: sonarr
image: linuxserver/sonarr:latest
restart: unless-stopped
volumes:
- $SONARR_DIR:/config
- $DATA_SERIES:/data/series
- $DATA_DOWNLOADS:/data/downloads
- $DATA_TORRENTS:/torrents
environment:
- PUID=$PUID
- PGID=$PGID
- TZ=$TZ
- DOCKER_MODS=ghcr.io/gilbn/theme.park:sonarr
- TP_THEME=aquamarine
labels:
- traefik.enable=true
- traefik.http.routers.sonarr.rule=Host(`${SONARR_DOMAIN}`)
- traefik.http.routers.sonarr.entrypoints=websecure
- traefik.http.routers.sonarr.tls.certresolver=letsencrypt
- traefik.http.services.sonarr.loadbalancer.server.port=${SONARR_PORT}
- traefik.http.routers.sonarr.middlewares=auth_coadmin
radarr:
container_name: radarr
image: linuxserver/radarr:latest
restart: unless-stopped
volumes:
- $RADARR_DIR:/config
- $DATA_MOVIES:/data/movies
- $DATA_DOWNLOADS:/data/downloads
- $DATA_TORRENTS:/torrents
environment:
- PUID=$PUID
- PGID=$PGID
- TZ=$TZ
- DOCKER_MODS=ghcr.io/gilbn/theme.park:radarr
- TP_THEME=aquamarine
labels:
- traefik.enable=true
- traefik.http.routers.radarr.rule=Host(`${RADARR_DOMAIN}`)
- traefik.http.routers.radarr.entrypoints=websecure
- traefik.http.routers.radarr.tls.certresolver=letsencrypt
- traefik.http.services.radarr.loadbalancer.server.port=${RADARR_PORT}
- traefik.http.routers.radarr.middlewares=auth_coadmin
prowlarr:
image: lscr.io/linuxserver/prowlarr:latest
container_name: prowlarr
restart: unless-stopped
environment:
- PUID=$PUID
- PGID=$PGID
- TZ=$TZ
volumes:
- $PROWLARR_DIR:/config
labels:
- traefik.enable=true
- traefik.http.routers.prowlarr.rule=Host(`${PROWLARR_DOMAIN}`)
- traefik.http.routers.prowlarr.entrypoints=websecure
- traefik.http.routers.prowlarr.tls.certresolver=letsencrypt
- traefik.http.services.prowlarr.loadbalancer.server.port=${PROWLARR_PORT}
- traefik.http.routers.prowlarr.middlewares=auth_coadmin
flaresolverr:
container_name: flaresolverr
image: 21hsmw/flaresolverr:nodriver
# image: flaresolverr/flaresolverr:latest
restart: unless-stopped
rutorrent:
container_name: rutorrent
image: mondedie/rutorrent:latest
restart: unless-stopped
volumes:
- $RUTORRENT_DIR:/config
- $RUTORRENT_DIR/data:/data
- $DATA_DOWNLOADS:/data/downloads
- ./config/themes/theme.park/docker-mods/rutorrent/root/etc/cont-init.d/98-themepark:/etc/cont-init.d/99-themepark
environment:
- TP_THEME=aquamarine
ports:
- 45000:45000
labels:
- traefik.enable=true
- traefik.http.routers.rutorrent.rule=Host(`${RUTORRENT_DOMAIN}`)
- traefik.http.routers.rutorrent.entrypoints=websecure
- traefik.http.routers.rutorrent.tls.certresolver=letsencrypt
- traefik.http.services.rutorrent.loadbalancer.server.port=${RUTORRENT_PORT}
- traefik.http.routers.rutorrent.middlewares=auth_coadmin
jellyseerr:
container_name: jellyseerr
image: fallenbagel/jellyseerr:latest
restart: unless-stopped
volumes:
- $JELLYSEERR_DIR:/app/config
labels:
- traefik.enable=true
- traefik.http.routers.jellyseerr.rule=Host(`${JELLYSEERR_DOMAIN}`)
- traefik.http.routers.jellyseerr.entrypoints=websecure
- traefik.http.routers.jellyseerr.tls.certresolver=letsencrypt
- traefik.http.services.jellyseerr.loadbalancer.server.port=${JELLYSEERR_PORT}
- traefik.http.routers.jellyseerr.middlewares=auth_user
smtp:
container_name: smtp
image: namshi/smtp
restart: unless-stopped
environment:
- MAILNAME=$SERVER_NAME
- PORT=$SMTP_PORT
gossa:
container_name: gossa
image: pldubouilh/gossa
restart: unless-stopped
environment:
- PUID=$PUID
- PGID=$PGID
- TZ=$TZ
volumes:
- $DATA_DOWNLOADS:/shared/downloads
- $DATA_SERIES:/shared/series
- $DATA_MOVIES:/shared/movies
labels:
- traefik.enable=true
- traefik.http.routers.gossa.rule=Host(`${GOSSA_DOMAIN}`)
- traefik.http.routers.gossa.entrypoints=websecure
- traefik.http.routers.gossa.tls.certresolver=letsencrypt
- traefik.http.services.gossa.loadbalancer.server.port=${GOSSA_PORT}
- traefik.http.routers.gossa.middlewares=auth_user
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment