Reorganize docker-compose stacks for better service grouping
Stack changes: - Renamed media-extended.yml → media-management.yml (better clarity) - Moved Plex from media → alternatives (Jellyfin is primary) - Moved code-server from utilities → infrastructure - Moved Sonarr, Radarr, Prowlarr from media → media-management - Moved Calibre-web from media-management → media New stack organization: - media.yml (3): Jellyfin, Calibre-web, qBittorrent - media-management.yml (13): All *arr apps, transcoders - alternatives.yml (6): Plex, Portainer, Authentik - infrastructure.yml (7): Added code-server - utilities.yml (6): Removed code-server Documentation updated: - README.md: Updated stack descriptions - services-overview.md: Updated service counts and locations - All service docs: Updated file paths media-extended → media-management
This commit is contained in:
@@ -121,13 +121,13 @@ The infrastructure uses Traefik for reverse proxy with automatic SSL, Authelia f
|
||||
5. **Deploy additional stacks through Dockge:**
|
||||
|
||||
Log in to Dockge at `https://dockge.yourdomain.duckdns.org` - all stacks are already loaded and ready to deploy:
|
||||
- **media** - Plex, Jellyfin, Sonarr, Radarr, Prowlarr, qBittorrent
|
||||
- **media-extended** - Readarr, Lidarr, Mylar, Calibre
|
||||
- **media** - Jellyfin, Calibre-web, qBittorrent
|
||||
- **media-management** - Sonarr, Radarr, Prowlarr, Readarr, Lidarr, Mylar, Bazarr
|
||||
- **homeassistant** - Home Assistant, Node-RED, Zigbee2MQTT, ESPHome
|
||||
- **productivity** - Nextcloud, Gitea, Bookstack, Outline, Excalidraw
|
||||
- **monitoring** - Grafana, Prometheus, Uptime Kuma, Netdata
|
||||
- **utilities** - Duplicati, Code Server, FreshRSS, Wallabag
|
||||
- **alternatives** - Portainer, Authentik (alternative to Dockge/Authelia)
|
||||
- **utilities** - Duplicati, FreshRSS, Wallabag
|
||||
- **alternatives** - Plex, Portainer, Authentik
|
||||
|
||||
Simply click any stack in Dockge and press "Start" to deploy it.
|
||||
|
||||
|
||||
@@ -133,6 +133,54 @@ services:
|
||||
timeout: 3s
|
||||
retries: 5
|
||||
|
||||
# Plex Media Server - Alternative to Jellyfin
|
||||
# Access at: https://plex.yourdomain.duckdns.org
|
||||
# NOTE: No Authelia - allows app access from Roku, Fire TV, mobile, etc.
|
||||
plex:
|
||||
image: plexinc/pms-docker:1.40.0.7998-f68041501
|
||||
container_name: plex
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./plex/config:/config
|
||||
- /mnt/media:/media:ro # Large media files on separate drive
|
||||
- plex-transcode:/transcode
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
- PLEX_CLAIM=${PLEX_CLAIM}
|
||||
# Hardware transcoding support
|
||||
# Uncomment ONE of the following options:
|
||||
|
||||
# Option 1: Intel QuickSync (most common)
|
||||
# devices:
|
||||
# - /dev/dri:/dev/dri
|
||||
|
||||
# Option 2: NVIDIA GPU (requires nvidia-container-toolkit installed)
|
||||
# runtime: nvidia
|
||||
# devices:
|
||||
# - /dev/nvidia0:/dev/nvidia0
|
||||
# - /dev/nvidiactl:/dev/nvidiactl
|
||||
# - /dev/nvidia-modeset:/dev/nvidia-modeset
|
||||
# - /dev/nvidia-uvm:/dev/nvidia-uvm
|
||||
# - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools
|
||||
# environment:
|
||||
# - NVIDIA_VISIBLE_DEVICES=all
|
||||
# - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
||||
labels:
|
||||
- "homelab.category=alternatives"
|
||||
- "homelab.description=Alternative media streaming server to Jellyfin"
|
||||
# Traefik labels - NO Authelia for app access
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.plex.rule=Host(`plex.${DOMAIN}`)"
|
||||
- "traefik.http.routers.plex.entrypoints=websecure"
|
||||
- "traefik.http.routers.plex.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.plex.loadbalancer.server.port=32400"
|
||||
|
||||
volumes:
|
||||
portainer-data:
|
||||
driver: local
|
||||
@@ -140,10 +188,14 @@ volumes:
|
||||
driver: local
|
||||
authentik-redis-data:
|
||||
driver: local
|
||||
plex-transcode:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
homelab-network:
|
||||
external: true
|
||||
traefik-network:
|
||||
external: true
|
||||
media-network:
|
||||
external: true
|
||||
|
||||
|
||||
@@ -165,8 +165,35 @@ services:
|
||||
- "traefik.http.routers.glances.middlewares=authelia@docker"
|
||||
- "traefik.http.services.glances.loadbalancer.server.port=61208"
|
||||
|
||||
networks:
|
||||
traefik-network:
|
||||
# Code Server - VS Code in browser
|
||||
# Access at: https://code.${DOMAIN}
|
||||
code-server:
|
||||
image: lscr.io/linuxserver/code-server:latest
|
||||
container_name: code-server
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./code-server/config:/config
|
||||
- /opt/stacks:/opt/stacks # Access to all stacks
|
||||
- /mnt:/mnt:ro # Read-only access to data
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ}
|
||||
- PASSWORD=${CODE_SERVER_PASSWORD}
|
||||
- SUDO_PASSWORD=${CODE_SERVER_SUDO_PASSWORD}
|
||||
labels:
|
||||
- "homelab.category=infrastructure"
|
||||
- "homelab.description=VS Code in browser"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)"
|
||||
- "traefik.http.routers.code-server.entrypoints=websecure"
|
||||
- "traefik.http.routers.code-server.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.code-server.middlewares=authelia@docker"
|
||||
- "traefik.http.services.code-server.loadbalancer.server.port=8443"
|
||||
|
||||
external: true
|
||||
homelab-network:
|
||||
driver: bridge
|
||||
|
||||
@@ -1,8 +1,93 @@
|
||||
# Extended Media Services
|
||||
# Additional media management tools
|
||||
# Place in /opt/stacks/media-extended/docker-compose.yml
|
||||
# Media Management Services
|
||||
# Content automation and library management (*arr apps, transcoders, etc.)
|
||||
# Place in /opt/stacks/media-management/docker-compose.yml
|
||||
|
||||
services:
|
||||
# Sonarr - TV show automation
|
||||
# Access at: https://sonarr.yourdomain.duckdns.org
|
||||
sonarr:
|
||||
image: lscr.io/linuxserver/sonarr:4.0.0
|
||||
container_name: sonarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./sonarr/config:/config
|
||||
- /mnt/media:/media
|
||||
- /mnt/downloads:/downloads # Large downloads on separate drive
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=TV show management and automation"
|
||||
# Traefik labels with Authelia
|
||||
- "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.routers.sonarr.middlewares=authelia@docker"
|
||||
- "traefik.http.services.sonarr.loadbalancer.server.port=8989"
|
||||
|
||||
# Radarr - Movie automation
|
||||
# Access at: https://radarr.yourdomain.duckdns.org
|
||||
radarr:
|
||||
image: lscr.io/linuxserver/radarr:5.2.6
|
||||
container_name: radarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./radarr/config:/config
|
||||
- /mnt/media:/media
|
||||
- /mnt/downloads:/downloads # Large downloads on separate drive
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=Movie management and automation"
|
||||
# Traefik labels with Authelia
|
||||
- "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.routers.radarr.middlewares=authelia@docker"
|
||||
- "traefik.http.services.radarr.loadbalancer.server.port=7878"
|
||||
|
||||
# Prowlarr - Indexer manager
|
||||
# Access at: https://prowlarr.yourdomain.duckdns.org
|
||||
prowlarr:
|
||||
image: lscr.io/linuxserver/prowlarr:1.11.4
|
||||
container_name: prowlarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./prowlarr/config:/config
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=Indexer manager for Sonarr/Radarr"
|
||||
# Traefik labels with Authelia
|
||||
- "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.routers.prowlarr.middlewares=authelia@docker"
|
||||
- "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
|
||||
|
||||
# Readarr - Ebook and audiobook management
|
||||
# Access at: https://readarr.${DOMAIN}
|
||||
readarr:
|
||||
@@ -116,34 +201,6 @@ services:
|
||||
- "traefik.http.routers.mylar.middlewares=authelia@docker"
|
||||
- "traefik.http.services.mylar.loadbalancer.server.port=8090"
|
||||
|
||||
# Calibre-Web - Ebook reader and server
|
||||
# Access at: https://calibre.${DOMAIN}
|
||||
calibre-web:
|
||||
image: lscr.io/linuxserver/calibre-web:latest
|
||||
container_name: calibre-web
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./$(basename $file .yml)/config:/config
|
||||
- /mnt/media/books:/books
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ}
|
||||
- DOCKER_MODS=linuxserver/mods:universal-calibre
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=Ebook reader and library management"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)"
|
||||
- "traefik.http.routers.calibre.entrypoints=websecure"
|
||||
- "traefik.http.routers.calibre.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.calibre.middlewares=authelia@docker"
|
||||
- "traefik.http.services.calibre.loadbalancer.server.port=8083"
|
||||
|
||||
# Jellyseerr - Request management for Jellyfin/Plex
|
||||
# Access at: https://jellyseerr.${DOMAIN}
|
||||
jellyseerr:
|
||||
@@ -4,55 +4,7 @@
|
||||
# NOTE: qBittorrent is configured to use Gluetun VPN (see gluetun.yml)
|
||||
|
||||
services:
|
||||
# Plex Media Server - Media streaming platform
|
||||
# Access at: https://plex.yourdomain.duckdns.org
|
||||
# NOTE: No Authelia - allows app access from Roku, Fire TV, mobile, etc.
|
||||
plex:
|
||||
image: plexinc/pms-docker:1.40.0.7998-f68041501
|
||||
container_name: plex
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./plex/config:/config
|
||||
- /mnt/media:/media:ro # Large media files on separate drive
|
||||
- plex-transcode:/transcode
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
- PLEX_CLAIM=${PLEX_CLAIM}
|
||||
# Hardware transcoding support
|
||||
# Uncomment ONE of the following options:
|
||||
|
||||
# Option 1: Intel QuickSync (most common)
|
||||
# devices:
|
||||
# - /dev/dri:/dev/dri
|
||||
|
||||
# Option 2: NVIDIA GPU (requires nvidia-container-toolkit installed)
|
||||
# runtime: nvidia
|
||||
# devices:
|
||||
# - /dev/nvidia0:/dev/nvidia0
|
||||
# - /dev/nvidiactl:/dev/nvidiactl
|
||||
# - /dev/nvidia-modeset:/dev/nvidia-modeset
|
||||
# - /dev/nvidia-uvm:/dev/nvidia-uvm
|
||||
# - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools
|
||||
# environment:
|
||||
# - NVIDIA_VISIBLE_DEVICES=all
|
||||
# - NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=Plex media streaming server"
|
||||
# Traefik labels - NO Authelia for app access
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.plex.rule=Host(`plex.${DOMAIN}`)"
|
||||
- "traefik.http.routers.plex.entrypoints=websecure"
|
||||
- "traefik.http.routers.plex.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.plex.loadbalancer.server.port=32400"
|
||||
|
||||
# Jellyfin - Free alternative to Plex
|
||||
# Jellyfin - Open-source media streaming server
|
||||
# Access at: https://jellyfin.yourdomain.duckdns.org
|
||||
# NOTE: No Authelia - allows app access from Roku, Fire TV, mobile, etc.
|
||||
jellyfin:
|
||||
@@ -84,90 +36,33 @@ services:
|
||||
- "traefik.http.routers.jellyfin.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
|
||||
|
||||
# Sonarr - TV show automation
|
||||
# Access at: https://sonarr.yourdomain.duckdns.org
|
||||
sonarr:
|
||||
image: lscr.io/linuxserver/sonarr:4.0.0
|
||||
container_name: sonarr
|
||||
# Calibre-Web - Ebook reader and server
|
||||
# Access at: https://calibre.${DOMAIN}
|
||||
calibre-web:
|
||||
image: lscr.io/linuxserver/calibre-web:latest
|
||||
container_name: calibre-web
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./sonarr/config:/config
|
||||
- /mnt/media:/media
|
||||
- /mnt/downloads:/downloads # Large downloads on separate drive
|
||||
- ./calibre-web/config:/config
|
||||
- /mnt/media/books:/books
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
- DOCKER_MODS=linuxserver/mods:universal-calibre
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=TV show management and automation"
|
||||
# Traefik labels with Authelia
|
||||
- "homelab.description=Ebook reader and library management"
|
||||
- "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.routers.sonarr.middlewares=authelia@docker"
|
||||
- "traefik.http.services.sonarr.loadbalancer.server.port=8989"
|
||||
|
||||
# Radarr - Movie automation
|
||||
# Access at: https://radarr.yourdomain.duckdns.org
|
||||
radarr:
|
||||
image: lscr.io/linuxserver/radarr:5.2.6
|
||||
container_name: radarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./radarr/config:/config
|
||||
- /mnt/media:/media
|
||||
- /mnt/downloads:/downloads # Large downloads on separate drive
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=Movie management and automation"
|
||||
# Traefik labels with Authelia
|
||||
- "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.routers.radarr.middlewares=authelia@docker"
|
||||
- "traefik.http.services.radarr.loadbalancer.server.port=7878"
|
||||
|
||||
# Prowlarr - Indexer manager
|
||||
# Access at: https://prowlarr.yourdomain.duckdns.org
|
||||
prowlarr:
|
||||
image: lscr.io/linuxserver/prowlarr:1.11.4
|
||||
container_name: prowlarr
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- media-network
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./prowlarr/config:/config
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ:-America/New_York}
|
||||
labels:
|
||||
- "homelab.category=media"
|
||||
- "homelab.description=Indexer manager for Sonarr/Radarr"
|
||||
# Traefik labels with Authelia
|
||||
- "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.routers.prowlarr.middlewares=authelia@docker"
|
||||
- "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
|
||||
- "traefik.http.routers.calibre.rule=Host(`calibre.${DOMAIN}`)"
|
||||
- "traefik.http.routers.calibre.entrypoints=websecure"
|
||||
- "traefik.http.routers.calibre.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.calibre.middlewares=authelia@docker"
|
||||
- "traefik.http.services.calibre.loadbalancer.server.port=8083"
|
||||
|
||||
# qBittorrent - Torrent client
|
||||
# Access at: https://qbit.yourdomain.duckdns.org
|
||||
@@ -175,10 +70,6 @@ services:
|
||||
# NOTE: This is a placeholder. Configure qBittorrent in gluetun.yml with network_mode: "service:gluetun"
|
||||
# See gluetun.yml for the actual qBittorrent configuration
|
||||
|
||||
volumes:
|
||||
plex-transcode:
|
||||
driver: local
|
||||
|
||||
networks:
|
||||
media-network:
|
||||
driver: bridge
|
||||
|
||||
@@ -59,35 +59,6 @@ services:
|
||||
- "traefik.http.routers.duplicati.middlewares=authelia@docker"
|
||||
- "traefik.http.services.duplicati.loadbalancer.server.port=8200"
|
||||
|
||||
# Code Server - VS Code in browser
|
||||
# Access at: https://code.${DOMAIN}
|
||||
code-server:
|
||||
image: lscr.io/linuxserver/code-server:latest
|
||||
container_name: code-server
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- homelab-network
|
||||
- traefik-network
|
||||
volumes:
|
||||
- ./$(basename $file .yml)/config:/config
|
||||
- /opt/stacks:/opt/stacks # Access to all stacks
|
||||
- /mnt:/mnt:ro # Read-only access to data
|
||||
environment:
|
||||
- PUID=${PUID:-1000}
|
||||
- PGID=${PGID:-1000}
|
||||
- TZ=${TZ}
|
||||
- PASSWORD=${CODE_SERVER_PASSWORD}
|
||||
- SUDO_PASSWORD=${CODE_SERVER_SUDO_PASSWORD}
|
||||
labels:
|
||||
- "homelab.category=utilities"
|
||||
- "homelab.description=VS Code in browser"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.code-server.rule=Host(`code.${DOMAIN}`)"
|
||||
- "traefik.http.routers.code-server.entrypoints=websecure"
|
||||
- "traefik.http.routers.code-server.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.routers.code-server.middlewares=authelia@docker"
|
||||
- "traefik.http.services.code-server.loadbalancer.server.port=8443"
|
||||
|
||||
# Form.io - Form builder (if needed)
|
||||
# Access at: https://forms.${DOMAIN}
|
||||
formio:
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
**Category:** Subtitle Management
|
||||
**Docker Image:** [linuxserver/bazarr](https://hub.docker.com/r/linuxserver/bazarr)
|
||||
**Default Stack:** `media-extended.yml`
|
||||
**Default Stack:** `media-management.yml`
|
||||
**Web UI:** `https://bazarr.${DOMAIN}` or `http://SERVER_IP:6767`
|
||||
**Authentication:** Optional (configurable)
|
||||
**Ports:** 6767
|
||||
@@ -79,7 +79,7 @@ Subtitle Available in Player
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/bazarr/config/ # Bazarr configuration
|
||||
/opt/stacks/media-management/bazarr/config/ # Bazarr configuration
|
||||
/mnt/media/movies/ # Movie library (with subtitles)
|
||||
/mnt/media/tv/ # TV library (with subtitles)
|
||||
|
||||
@@ -151,7 +151,7 @@ bazarr:
|
||||
- PGID=1000
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/bazarr/config:/config
|
||||
- /opt/stacks/media-management/bazarr/config:/config
|
||||
- /mnt/media/movies:/movies
|
||||
- /mnt/media/tv:/tv
|
||||
labels:
|
||||
@@ -548,13 +548,13 @@ sudo chown -R 1000:1000 /mnt/media/movies/
|
||||
docker stop bazarr
|
||||
|
||||
# Backup database
|
||||
cp /opt/stacks/media-extended/bazarr/config/db/bazarr.db /opt/backups/
|
||||
cp /opt/stacks/media-management/bazarr/config/db/bazarr.db /opt/backups/
|
||||
|
||||
# Check integrity
|
||||
sqlite3 /opt/stacks/media-extended/bazarr/config/db/bazarr.db "PRAGMA integrity_check;"
|
||||
sqlite3 /opt/stacks/media-management/bazarr/config/db/bazarr.db "PRAGMA integrity_check;"
|
||||
|
||||
# Vacuum if needed
|
||||
sqlite3 /opt/stacks/media-extended/bazarr/config/db/bazarr.db "VACUUM;"
|
||||
sqlite3 /opt/stacks/media-management/bazarr/config/db/bazarr.db "VACUUM;"
|
||||
|
||||
# Restart
|
||||
docker start bazarr
|
||||
@@ -610,8 +610,8 @@ docker start bazarr
|
||||
|
||||
**Critical Files:**
|
||||
```bash
|
||||
/opt/stacks/media-extended/bazarr/config/db/bazarr.db # Database
|
||||
/opt/stacks/media-extended/bazarr/config/config/config.yaml # Settings
|
||||
/opt/stacks/media-management/bazarr/config/db/bazarr.db # Database
|
||||
/opt/stacks/media-management/bazarr/config/config/config.yaml # Settings
|
||||
```
|
||||
|
||||
**Backup Script:**
|
||||
@@ -622,7 +622,7 @@ BACKUP_DIR=/opt/backups/bazarr
|
||||
|
||||
docker stop bazarr
|
||||
tar -czf $BACKUP_DIR/bazarr-$DATE.tar.gz \
|
||||
/opt/stacks/media-extended/bazarr/config/
|
||||
/opt/stacks/media-management/bazarr/config/
|
||||
docker start bazarr
|
||||
|
||||
find $BACKUP_DIR -name "bazarr-*.tar.gz" -mtime +7 -delete
|
||||
|
||||
@@ -49,7 +49,7 @@ Calibre-Web is a web-based ebook reader and library manager. It provides a clean
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/calibre-web/config/ # Config
|
||||
/opt/stacks/media-management/calibre-web/config/ # Config
|
||||
/mnt/media/books/ # Calibre library
|
||||
```
|
||||
|
||||
@@ -84,7 +84,7 @@ calibre-web:
|
||||
- TZ=America/New_York
|
||||
- DOCKER_MODS=linuxserver/mods:universal-calibre
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/calibre-web/config:/config
|
||||
- /opt/stacks/media-management/calibre-web/config:/config
|
||||
- /mnt/media/books:/books
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
|
||||
@@ -79,7 +79,7 @@ User Watches Content
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/jellyseerr/config/ # Jellyseerr configuration
|
||||
/opt/stacks/media-management/jellyseerr/config/ # Jellyseerr configuration
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
@@ -137,7 +137,7 @@ jellyseerr:
|
||||
- LOG_LEVEL=info
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/jellyseerr/config:/app/config
|
||||
- /opt/stacks/media-management/jellyseerr/config:/app/config
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.jellyseerr.rule=Host(`jellyseerr.${DOMAIN}`)"
|
||||
@@ -516,7 +516,7 @@ docker logs jellyseerr | grep -i notification
|
||||
docker stop jellyseerr
|
||||
|
||||
# Vacuum database
|
||||
sqlite3 /opt/stacks/media-extended/jellyseerr/config/db/db.sqlite3 "VACUUM;"
|
||||
sqlite3 /opt/stacks/media-management/jellyseerr/config/db/db.sqlite3 "VACUUM;"
|
||||
|
||||
# Restart
|
||||
docker start jellyseerr
|
||||
@@ -549,8 +549,8 @@ docker start jellyseerr
|
||||
|
||||
**Critical Files:**
|
||||
```bash
|
||||
/opt/stacks/media-extended/jellyseerr/config/db/db.sqlite3 # Database
|
||||
/opt/stacks/media-extended/jellyseerr/config/settings.json # Settings
|
||||
/opt/stacks/media-management/jellyseerr/config/db/db.sqlite3 # Database
|
||||
/opt/stacks/media-management/jellyseerr/config/settings.json # Settings
|
||||
```
|
||||
|
||||
**Backup Script:**
|
||||
@@ -561,7 +561,7 @@ BACKUP_DIR=/opt/backups/jellyseerr
|
||||
|
||||
docker stop jellyseerr
|
||||
tar -czf $BACKUP_DIR/jellyseerr-$DATE.tar.gz \
|
||||
/opt/stacks/media-extended/jellyseerr/config/
|
||||
/opt/stacks/media-management/jellyseerr/config/
|
||||
docker start jellyseerr
|
||||
|
||||
find $BACKUP_DIR -name "jellyseerr-*.tar.gz" -mtime +7 -delete
|
||||
|
||||
@@ -47,7 +47,7 @@ Lazy Librarian is an automated book downloader similar to Sonarr/Radarr but for
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/lazylibrarian/config/ # Config
|
||||
/opt/stacks/media-management/lazylibrarian/config/ # Config
|
||||
/mnt/media/books/ # Book library
|
||||
/mnt/downloads/ # Downloads
|
||||
```
|
||||
@@ -82,7 +82,7 @@ lazylibrarian:
|
||||
- PGID=1000
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/lazylibrarian/config:/config
|
||||
- /opt/stacks/media-management/lazylibrarian/config:/config
|
||||
- /mnt/media/books:/books
|
||||
- /mnt/downloads:/downloads
|
||||
labels:
|
||||
|
||||
@@ -77,7 +77,7 @@ Plex/Jellyfin/Subsonic Access
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/lidarr/config/ # Lidarr configuration
|
||||
/opt/stacks/media-management/lidarr/config/ # Lidarr configuration
|
||||
/mnt/downloads/complete/music-lidarr/ # Downloaded music
|
||||
/mnt/media/music/ # Final music library
|
||||
|
||||
@@ -149,7 +149,7 @@ lidarr:
|
||||
- PGID=1000
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/lidarr/config:/config
|
||||
- /opt/stacks/media-management/lidarr/config:/config
|
||||
- /mnt/media/music:/music
|
||||
- /mnt/downloads:/downloads
|
||||
labels:
|
||||
@@ -403,7 +403,7 @@ lidarr-lossless:
|
||||
ports:
|
||||
- "8687:8686"
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/lidarr-lossless/config:/config
|
||||
- /opt/stacks/media-management/lidarr-lossless/config:/config
|
||||
- /mnt/media/music-flac:/music
|
||||
- /mnt/downloads:/downloads
|
||||
```
|
||||
@@ -498,10 +498,10 @@ docker exec lidarr exiftool /music/Artist/Album/track.flac
|
||||
docker stop lidarr
|
||||
|
||||
# Backup database
|
||||
cp /opt/stacks/media-extended/lidarr/config/lidarr.db /opt/backups/
|
||||
cp /opt/stacks/media-management/lidarr/config/lidarr.db /opt/backups/
|
||||
|
||||
# Check integrity
|
||||
sqlite3 /opt/stacks/media-extended/lidarr/config/lidarr.db "PRAGMA integrity_check;"
|
||||
sqlite3 /opt/stacks/media-management/lidarr/config/lidarr.db "PRAGMA integrity_check;"
|
||||
|
||||
# Restore from backup if corrupted
|
||||
docker start lidarr
|
||||
@@ -522,7 +522,7 @@ docker start lidarr
|
||||
docker stop lidarr
|
||||
|
||||
# Vacuum database
|
||||
sqlite3 /opt/stacks/media-extended/lidarr/config/lidarr.db "VACUUM;"
|
||||
sqlite3 /opt/stacks/media-management/lidarr/config/lidarr.db "VACUUM;"
|
||||
|
||||
# Clear old history
|
||||
# Settings → General → History Cleanup: 30 days
|
||||
@@ -558,9 +558,9 @@ docker start lidarr
|
||||
|
||||
**Critical Files:**
|
||||
```bash
|
||||
/opt/stacks/media-extended/lidarr/config/lidarr.db # Database
|
||||
/opt/stacks/media-extended/lidarr/config/config.xml # Settings
|
||||
/opt/stacks/media-extended/lidarr/config/Backup/ # Auto backups
|
||||
/opt/stacks/media-management/lidarr/config/lidarr.db # Database
|
||||
/opt/stacks/media-management/lidarr/config/config.xml # Settings
|
||||
/opt/stacks/media-management/lidarr/config/Backup/ # Auto backups
|
||||
```
|
||||
|
||||
**Backup Script:**
|
||||
@@ -569,7 +569,7 @@ docker start lidarr
|
||||
DATE=$(date +%Y%m%d)
|
||||
BACKUP_DIR=/opt/backups/lidarr
|
||||
|
||||
cp /opt/stacks/media-extended/lidarr/config/lidarr.db $BACKUP_DIR/lidarr-$DATE.db
|
||||
cp /opt/stacks/media-management/lidarr/config/lidarr.db $BACKUP_DIR/lidarr-$DATE.db
|
||||
find $BACKUP_DIR -name "lidarr-*.db" -mtime +7 -delete
|
||||
```
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
**Category:** Comic Book Management
|
||||
**Docker Image:** [linuxserver/mylar3](https://hub.docker.com/r/linuxserver/mylar3)
|
||||
**Default Stack:** `media-extended.yml`
|
||||
**Default Stack:** `media-management.yml`
|
||||
**Web UI:** `http://SERVER_IP:8090`
|
||||
**Ports:** 8090
|
||||
|
||||
@@ -49,7 +49,7 @@ Mylar3 is an automated comic book download manager. It's like Sonarr/Radarr but
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/mylar3/config/ # Configuration
|
||||
/opt/stacks/media-management/mylar3/config/ # Configuration
|
||||
/mnt/media/comics/ # Comic library
|
||||
/mnt/downloads/ # Downloads
|
||||
|
||||
@@ -90,7 +90,7 @@ mylar3:
|
||||
- PGID=1000
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/mylar3/config:/config
|
||||
- /opt/stacks/media-management/mylar3/config:/config
|
||||
- /mnt/media/comics:/comics
|
||||
- /mnt/downloads:/downloads
|
||||
labels:
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
**Category:** Media Management & Automation
|
||||
**Docker Image:** [linuxserver/readarr](https://hub.docker.com/r/linuxserver/readarr)
|
||||
**Default Stack:** `media-extended.yml`
|
||||
**Default Stack:** `media-management.yml`
|
||||
**Web UI:** `https://readarr.${DOMAIN}` or `http://SERVER_IP:8787`
|
||||
**Authentication:** Optional (configurable)
|
||||
**Ports:** 8787
|
||||
@@ -77,7 +77,7 @@ Calibre-Web / Calibre Access
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/readarr/config/ # Readarr configuration
|
||||
/opt/stacks/media-management/readarr/config/ # Readarr configuration
|
||||
/mnt/downloads/complete/books-readarr/ # Downloaded books
|
||||
/mnt/media/books/ # Final book library
|
||||
|
||||
@@ -148,7 +148,7 @@ readarr:
|
||||
- PGID=1000
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/readarr/config:/config
|
||||
- /opt/stacks/media-management/readarr/config:/config
|
||||
- /mnt/media/books:/books
|
||||
- /mnt/downloads:/downloads
|
||||
labels:
|
||||
@@ -337,7 +337,7 @@ readarr-audio:
|
||||
ports:
|
||||
- "8788:8787"
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/readarr-audio/config:/config
|
||||
- /opt/stacks/media-management/readarr-audio/config:/config
|
||||
- /mnt/media/audiobooks:/books
|
||||
- /mnt/downloads:/downloads
|
||||
environment:
|
||||
@@ -467,10 +467,10 @@ docker logs readarr | grep -i import
|
||||
docker stop readarr
|
||||
|
||||
# Backup database
|
||||
cp /opt/stacks/media-extended/readarr/config/readarr.db /opt/backups/
|
||||
cp /opt/stacks/media-management/readarr/config/readarr.db /opt/backups/
|
||||
|
||||
# Check integrity
|
||||
sqlite3 /opt/stacks/media-extended/readarr/config/readarr.db "PRAGMA integrity_check;"
|
||||
sqlite3 /opt/stacks/media-management/readarr/config/readarr.db "PRAGMA integrity_check;"
|
||||
|
||||
# Restore from backup if corrupted
|
||||
docker start readarr
|
||||
@@ -491,7 +491,7 @@ docker start readarr
|
||||
docker stop readarr
|
||||
|
||||
# Vacuum database
|
||||
sqlite3 /opt/stacks/media-extended/readarr/config/readarr.db "VACUUM;"
|
||||
sqlite3 /opt/stacks/media-management/readarr/config/readarr.db "VACUUM;"
|
||||
|
||||
# Clear old history
|
||||
# Settings → General → History Cleanup: 30 days
|
||||
@@ -521,9 +521,9 @@ docker start readarr
|
||||
|
||||
**Critical Files:**
|
||||
```bash
|
||||
/opt/stacks/media-extended/readarr/config/readarr.db # Database
|
||||
/opt/stacks/media-extended/readarr/config/config.xml # Settings
|
||||
/opt/stacks/media-extended/readarr/config/Backup/ # Auto backups
|
||||
/opt/stacks/media-management/readarr/config/readarr.db # Database
|
||||
/opt/stacks/media-management/readarr/config/config.xml # Settings
|
||||
/opt/stacks/media-management/readarr/config/Backup/ # Auto backups
|
||||
```
|
||||
|
||||
**Backup Script:**
|
||||
@@ -532,7 +532,7 @@ docker start readarr
|
||||
DATE=$(date +%Y%m%d)
|
||||
BACKUP_DIR=/opt/backups/readarr
|
||||
|
||||
cp /opt/stacks/media-extended/readarr/config/readarr.db $BACKUP_DIR/readarr-$DATE.db
|
||||
cp /opt/stacks/media-management/readarr/config/readarr.db $BACKUP_DIR/readarr-$DATE.db
|
||||
find $BACKUP_DIR -name "readarr-*.db" -mtime +7 -delete
|
||||
```
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ Library Updated
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/tdarr/
|
||||
/opt/stacks/media-management/tdarr/
|
||||
├── server/ # Tdarr server data
|
||||
├── config/ # Configuration
|
||||
├── logs/ # Logs
|
||||
@@ -175,10 +175,10 @@ tdarr:
|
||||
- PGID=1000
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/tdarr/server:/app/server
|
||||
- /opt/stacks/media-extended/tdarr/config:/app/configs
|
||||
- /opt/stacks/media-extended/tdarr/logs:/app/logs
|
||||
- /opt/stacks/media-extended/tdarr/temp:/temp
|
||||
- /opt/stacks/media-management/tdarr/server:/app/server
|
||||
- /opt/stacks/media-management/tdarr/config:/app/configs
|
||||
- /opt/stacks/media-management/tdarr/logs:/app/logs
|
||||
- /opt/stacks/media-management/tdarr/temp:/temp
|
||||
- /mnt/media:/media
|
||||
devices:
|
||||
- /dev/dri:/dev/dri # Intel QuickSync
|
||||
@@ -219,9 +219,9 @@ tdarr-node:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/tdarr/config:/app/configs
|
||||
- /opt/stacks/media-extended/tdarr/logs:/app/logs
|
||||
- /opt/stacks/media-extended/tdarr/temp:/temp
|
||||
- /opt/stacks/media-management/tdarr/config:/app/configs
|
||||
- /opt/stacks/media-management/tdarr/logs:/app/logs
|
||||
- /opt/stacks/media-management/tdarr/temp:/temp
|
||||
- /mnt/media:/media
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
@@ -500,7 +500,7 @@ docker logs tdarr-node
|
||||
docker logs tdarr-node | tail -50
|
||||
|
||||
# Check temp directory space
|
||||
df -h /opt/stacks/media-extended/tdarr/temp/
|
||||
df -h /opt/stacks/media-management/tdarr/temp/
|
||||
|
||||
# Check FFmpeg
|
||||
docker exec tdarr-node ffmpeg -version
|
||||
@@ -557,7 +557,7 @@ docker stats tdarr tdarr-node
|
||||
ls -la /mnt/media/
|
||||
|
||||
# Check temp directory
|
||||
ls -la /opt/stacks/media-extended/tdarr/temp/
|
||||
ls -la /opt/stacks/media-management/tdarr/temp/
|
||||
|
||||
# Check logs for errors
|
||||
docker logs tdarr-node | grep -i error
|
||||
@@ -626,8 +626,8 @@ volumes:
|
||||
|
||||
**Critical Files:**
|
||||
```bash
|
||||
/opt/stacks/media-extended/tdarr/server/ # Database
|
||||
/opt/stacks/media-extended/tdarr/config/ # Configuration
|
||||
/opt/stacks/media-management/tdarr/server/ # Database
|
||||
/opt/stacks/media-management/tdarr/config/ # Configuration
|
||||
```
|
||||
|
||||
**Backup Script:**
|
||||
@@ -637,8 +637,8 @@ DATE=$(date +%Y%m%d)
|
||||
BACKUP_DIR=/opt/backups/tdarr
|
||||
|
||||
tar -czf $BACKUP_DIR/tdarr-$DATE.tar.gz \
|
||||
/opt/stacks/media-extended/tdarr/server/ \
|
||||
/opt/stacks/media-extended/tdarr/config/
|
||||
/opt/stacks/media-management/tdarr/server/ \
|
||||
/opt/stacks/media-management/tdarr/config/
|
||||
|
||||
find $BACKUP_DIR -name "tdarr-*.tar.gz" -mtime +7 -delete
|
||||
```
|
||||
|
||||
@@ -75,7 +75,7 @@ Library Optimized
|
||||
### Directory Structure
|
||||
|
||||
```
|
||||
/opt/stacks/media-extended/unmanic/config/ # Configuration
|
||||
/opt/stacks/media-management/unmanic/config/ # Configuration
|
||||
/mnt/media/movies/ # Movie library
|
||||
/mnt/media/tv/ # TV library
|
||||
/tmp/unmanic/ # Temp files
|
||||
@@ -135,7 +135,7 @@ unmanic:
|
||||
- PGID=1000
|
||||
- TZ=America/New_York
|
||||
volumes:
|
||||
- /opt/stacks/media-extended/unmanic/config:/config
|
||||
- /opt/stacks/media-management/unmanic/config:/config
|
||||
- /mnt/media:/library
|
||||
- /tmp/unmanic:/tmp/unmanic
|
||||
devices:
|
||||
|
||||
@@ -11,13 +11,15 @@ This document provides a comprehensive overview of all 60+ pre-configured servic
|
||||
| ├─ [Traefik](service-docs/traefik.md) | Reverse proxy + SSL | ✓ | /opt/stacks/core/traefik | traefik.${DOMAIN} |
|
||||
| ├─ [Authelia](service-docs/authelia.md) | SSO authentication | - | /opt/stacks/core/authelia | auth.${DOMAIN} |
|
||||
| └─ [Gluetun](service-docs/gluetun.md) | VPN (Surfshark) | - | /opt/stacks/core/gluetun | No UI |
|
||||
| **🔧 [infrastructure.yaml](../docker-compose/infrastructure.yml) (6+5)** | **Deployed: 6** | | | |
|
||||
| **🔧 [infrastructure.yaml](../docker-compose/infrastructure.yml) (7+5)** | **Deployed: 7** | | | |
|
||||
| ├─ [Dockge](service-docs/dockge.md) | Stack manager (PRIMARY) | ✓ | /opt/stacks/infrastructure | dockge.${DOMAIN} |
|
||||
| ├─ [Pi-hole](service-docs/pihole.md) | DNS + Ad blocking | ✓ | /opt/stacks/infrastructure | pihole.${DOMAIN} |
|
||||
| ├─ [Dozzle](service-docs/dozzle.md) | Docker log viewer | ✓ | /opt/stacks/infrastructure | dozzle.${DOMAIN} |
|
||||
| ├─ [Glances](service-docs/glances.md) | System monitoring | ✓ | /opt/stacks/infrastructure | glances.${DOMAIN} |
|
||||
| ├─ Code Server | VS Code in browser | ✓ | /opt/stacks/infrastructure | code.${DOMAIN} |
|
||||
| └─ [Docker Proxy](service-docs/docker-proxy.md) | Secure socket access | - | /opt/stacks/infrastructure | No UI |
|
||||
| **📦 [alternatives.yaml](../docker-compose/alternatives.yml) (5)** | **Not deployed** | | | |
|
||||
| **📦 [alternatives.yaml](../docker-compose/alternatives.yml) (6)** | **Not deployed** | | | |
|
||||
| ├─ Plex | Media server (Alt) | ✗ | /mnt/media, /mnt/transcode | plex.${DOMAIN} |
|
||||
| ├─ Portainer | Container management | ✓ | /opt/stacks/alternatives | portainer.${DOMAIN} |
|
||||
| ├─ Authentik Server | SSO with web UI | ✓ | /opt/stacks/alternatives | authentik.${DOMAIN} |
|
||||
| │ ├─ authentik-worker | Background tasks | - | /opt/stacks/alternatives | No UI |
|
||||
@@ -26,24 +28,24 @@ This document provides a comprehensive overview of all 60+ pre-configured servic
|
||||
| **📊 [dashboards.yaml](../docker-compose/dashboards.yml)** (2) | | | | |
|
||||
| ├─ Homepage | App dashboard (AI cfg) | ✓ | /opt/stacks/dashboards | home.${DOMAIN} |
|
||||
| └─ Homarr | Modern dashboard | ✓ | /opt/stacks/dashboards | homarr.${DOMAIN} |
|
||||
| **🎬 [media.yml](../docker-compose/media.yml)** (6) | | | | |
|
||||
| ├─ Plex | Media server | ✗ | /mnt/media, /mnt/transcode | plex.${DOMAIN} |
|
||||
| **🎬 [media.yml](../docker-compose/media.yml)** (3) | | | | |
|
||||
| ├─ Jellyfin | Media server (OSS) | ✗ | /mnt/media, /mnt/transcode | jellyfin.${DOMAIN} |
|
||||
| ├─ Sonarr | TV automation | ✓ | /opt/stacks/media, /mnt/media | sonarr.${DOMAIN} |
|
||||
| ├─ Radarr | Movie automation | ✓ | /opt/stacks/media, /mnt/media | radarr.${DOMAIN} |
|
||||
| ├─ Prowlarr | Indexer manager | ✓ | /opt/stacks/media | prowlarr.${DOMAIN} |
|
||||
| ├─ Calibre-Web | Ebook reader | ✓ | /opt/stacks/media, /mnt/media | calibre.${DOMAIN} |
|
||||
| └─ qBittorrent | Torrent (via VPN) | ✓ | /mnt/downloads | qbit.${DOMAIN} |
|
||||
| **📚 [media-extended.yaml](../docker-compose/media-extended.yml)** (10) | | | | |
|
||||
| ├─ Readarr | Ebooks/Audiobooks | ✓ | /opt/stacks/media-ext, /mnt/media | readarr.${DOMAIN} |
|
||||
| ├─ Lidarr | Music manager | ✓ | /opt/stacks/media-ext, /mnt/media | lidarr.${DOMAIN} |
|
||||
| ├─ Lazy Librarian | Book automation | ✓ | /opt/stacks/media-ext, /mnt/media | lazylibrarian.${DOMAIN} |
|
||||
| ├─ Mylar3 | Comic manager | ✓ | /opt/stacks/media-ext, /mnt/media | mylar.${DOMAIN} |
|
||||
| ├─ Calibre-Web | Ebook reader | ✓ | /opt/stacks/media-ext, /mnt/media | calibre.${DOMAIN} |
|
||||
| ├─ Jellyseerr | Media requests | ✓ | /opt/stacks/media-ext | jellyseerr.${DOMAIN} |
|
||||
| ├─ FlareSolverr | Cloudflare bypass | - | /opt/stacks/media-ext | No UI |
|
||||
| ├─ Tdarr Server | Transcoding server | ✓ | /opt/stacks/media-ext, /mnt/transcode | tdarr.${DOMAIN} |
|
||||
| **📚 [media-management.yml](../docker-compose/media-management.yml)** (10) | | | | |
|
||||
| ├─ Sonarr | TV automation | ✓ | /opt/stacks/media-mgmt, /mnt/media | sonarr.${DOMAIN} |
|
||||
| ├─ Radarr | Movie automation | ✓ | /opt/stacks/media-mgmt, /mnt/media | radarr.${DOMAIN} |
|
||||
| ├─ Prowlarr | Indexer manager | ✓ | /opt/stacks/media-mgmt | prowlarr.${DOMAIN} |
|
||||
| ├─ Readarr | Ebooks/Audiobooks | ✓ | /opt/stacks/media-mgmt, /mnt/media | readarr.${DOMAIN} |
|
||||
| ├─ Lidarr | Music manager | ✓ | /opt/stacks/media-mgmt, /mnt/media | lidarr.${DOMAIN} |
|
||||
| ├─ Lazy Librarian | Book automation | ✓ | /opt/stacks/media-mgmt, /mnt/media | lazylibrarian.${DOMAIN} |
|
||||
| ├─ Mylar3 | Comic manager | ✓ | /opt/stacks/media-mgmt, /mnt/media | mylar.${DOMAIN} |
|
||||
| ├─ Jellyseerr | Media requests | ✓ | /opt/stacks/media-mgmt | jellyseerr.${DOMAIN} |
|
||||
| ├─ FlareSolverr | Cloudflare bypass | - | /opt/stacks/media-mgmt | No UI |
|
||||
| ├─ Tdarr Server | Transcoding server | ✓ | /opt/stacks/media-mgmt, /mnt/transcode | tdarr.${DOMAIN} |
|
||||
| ├─ Tdarr Node | Transcoding worker | - | /mnt/transcode-cache | No UI |
|
||||
| └─ Unmanic | Library optimizer | ✓ | /opt/stacks/media-ext, /mnt/transcode | unmanic.${DOMAIN} |
|
||||
| ├─ Unmanic | Library optimizer | ✓ | /opt/stacks/media-mgmt, /mnt/transcode | unmanic.${DOMAIN} |
|
||||
| └─ Bazarr | Subtitle automation | ✓ | /opt/stacks/media-mgmt, /mnt/media | bazarr.${DOMAIN} |
|
||||
| **🏠 [homeassistant.yaml](../docker-compose/homeassistant.yml)** (7) | | | | |
|
||||
| ├─ Home Assistant | HA platform | ✗ | /opt/stacks/homeassistant | ha.${DOMAIN} |
|
||||
| ├─ ESPHome | ESP firmware mgr | ✓ | /opt/stacks/homeassistant | esphome.${DOMAIN} |
|
||||
@@ -67,11 +69,10 @@ This document provides a comprehensive overview of all 60+ pre-configured servic
|
||||
| │ └─ mediawiki-db | MariaDB | - | /opt/stacks/productivity | No UI |
|
||||
| └─ Form.io | Form builder | ✓ | /opt/stacks/productivity | forms.${DOMAIN} |
|
||||
| └─ formio-mongo | MongoDB | - | /opt/stacks/productivity | No UI |
|
||||
| **🛠️ [utilities.yaml](../docker-compose/utilities.yml)** (7) | | | | |
|
||||
| **🛠️ [utilities.yaml](../docker-compose/utilities.yml)** (6) | | | | |
|
||||
| ├─ Vaultwarden | Password manager | ✗ | /opt/stacks/utilities | bitwarden.${DOMAIN} |
|
||||
| ├─ Backrest | Backup (restic) | ✓ | /opt/stacks/utilities, /mnt/backups | backrest.${DOMAIN} |
|
||||
| ├─ Duplicati | Encrypted backups | ✓ | /opt/stacks/utilities, /mnt/backups | duplicati.${DOMAIN} |
|
||||
| ├─ Code Server | VS Code in browser | ✓ | /opt/stacks/utilities | code.${DOMAIN} |
|
||||
| ├─ Form.io | Form platform | ✓ | /opt/stacks/utilities | forms.${DOMAIN} |
|
||||
| │ └─ formio-mongo | MongoDB | - | /opt/stacks/utilities | No UI |
|
||||
| └─ Authelia-Redis | Session storage | - | /opt/stacks/utilities | No UI |
|
||||
|
||||
12
tasks.txt
12
tasks.txt
@@ -1,3 +1,9 @@
|
||||
getting-started.md
|
||||
Getting Started Checklist
|
||||
include clone repository as first step
|
||||
reorganize the media stack
|
||||
move plex to alternatives
|
||||
move calibre-web from media-extended
|
||||
move all the arr apps to the media-extended folder
|
||||
|
||||
rename media-extended stack to media-management
|
||||
|
||||
move code-server to infrastructure
|
||||
|
||||
|
||||
Reference in New Issue
Block a user