790 lines
19 KiB
YAML
Executable File
790 lines
19 KiB
YAML
Executable File
services:
|
|
|
|
|
|
#---------------- MEDIA ----------------#
|
|
|
|
## AudioBookShelf (audiobook downloading)
|
|
audiobookshelf:
|
|
container_name: audiobookshelf
|
|
image: ghcr.io/advplyr/audiobookshelf:latest
|
|
environment:
|
|
- AUDIOBOOKSHELF_UID=99
|
|
- AUDIOBOOKSHELF_GID=100
|
|
ports:
|
|
- 13378:80
|
|
volumes:
|
|
- /media/audiobooks:/audiobooks
|
|
- /media/audiobooks-pt:/audiobooks-pt
|
|
- /media/podcasts:/podcasts
|
|
- ${DOCKER_DIR}/audiobookshelf/config:/config
|
|
- ${DOCKER_DIR}/audiobookshelf/metadata:/metadata
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
## AudioBookShelf metadata provider
|
|
abs-tract:
|
|
container_name: abs-tract
|
|
image: arranhs/abs-tract:latest
|
|
ports:
|
|
- 5585:5555
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
# Calibre (ebook management)
|
|
calibre-web-automated:
|
|
image: crocodilestick/calibre-web-automated:latest
|
|
container_name: calibre-web
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=100
|
|
- DOCKER_MODS=lscr.io/linuxserver/mods:universal-calibre-v7.16.0
|
|
volumes:
|
|
- ${DOCKER_DIR}/calibre/config:/config
|
|
- ${DOCKER_DIR}/calibre/ingest:/cwa-book-ingest
|
|
- ${DOCKER_DIR}/calibre/books:/calibre-library
|
|
ports:
|
|
- 8083:8083
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
## Immich (photo library management)
|
|
immich_server:
|
|
container_name: immich_server
|
|
image: ghcr.io/immich-app/immich-server:v1.130.2
|
|
volumes:
|
|
- /media/immich:/usr/src/app/upload
|
|
- ${DOCKER_DIR}/immich_db_dump:/db_dump
|
|
env_file:
|
|
- ${ENV_DIR}/immich.env
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=1000
|
|
ports:
|
|
- 2283:2283
|
|
depends_on:
|
|
- immich_redis
|
|
- immich_db
|
|
devices:
|
|
- /dev/dri:/dev/dri
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
immich_machine_learning:
|
|
container_name: immich_machine_learning
|
|
image: ghcr.io/immich-app/immich-machine-learning:v1.130.2
|
|
volumes:
|
|
- model-cache:/cache
|
|
env_file:
|
|
- ${ENV_DIR}/immich.env
|
|
restart: unless-stopped
|
|
immich_redis:
|
|
container_name: immich_redis
|
|
image: redis:6.2-alpine@sha256:70a7a5b641117670beae0d80658430853896b5ef269ccf00d1827427e3263fa3
|
|
restart: unless-stopped
|
|
immich_db:
|
|
container_name: immich_db
|
|
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
|
|
env_file:
|
|
- ${ENV_DIR}/immich.env
|
|
volumes:
|
|
- ${DOCKER_DIR}/immich:/var/lib/postgresql/data
|
|
restart: unless-stopped
|
|
|
|
## Invidious (youtube client)
|
|
invidious:
|
|
image: quay.io/invidious/invidious:latest
|
|
container_name: invidious
|
|
ports:
|
|
- 9080:3000
|
|
env_file:
|
|
- ${ENV_DIR}/invidious.env
|
|
healthcheck:
|
|
test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/trending || exit 1
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 2
|
|
depends_on:
|
|
- invidious-db
|
|
- invidious-sighelper
|
|
restart: unless-stopped
|
|
invidious-sighelper:
|
|
image: quay.io/invidious/inv-sig-helper:latest
|
|
container_name: invidious-sighelper
|
|
init: true
|
|
command: ["--tcp", "0.0.0.0:12999"]
|
|
ports:
|
|
- 12999:12999
|
|
environment:
|
|
- RUST_LOG=info
|
|
cap_drop:
|
|
- ALL
|
|
read_only: true
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
restart: unless-stopped
|
|
invidious-db:
|
|
image: docker.io/library/postgres:14
|
|
container_name: invidious-db
|
|
volumes:
|
|
- ${DOCKER_DIR}/invidious/data:/var/lib/postgresql/data
|
|
- ${DOCKER_DIR}/invidious/config/sql:/config/sql
|
|
- ${DOCKER_DIR}/invidious/docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
|
|
env_file:
|
|
- ${ENV_DIR}/invidious.env
|
|
restart: unless-stopped
|
|
|
|
## Jellyfin (media server)
|
|
jellyfin:
|
|
image: lscr.io/linuxserver/jellyfin:latest
|
|
container_name: jellyfin
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- JELLYFIN_PublishedServerUrl=https://watch.azpsen.com
|
|
volumes:
|
|
- ${DOCKER_DIR}/jellyfin:/config
|
|
- ${DOCKER_DIR}/jellyfin/theme:/usr/share/jellyfin/web/theme
|
|
- /media/jellyfin/Movies:/data/movies
|
|
- /media/jellyfin/TV Shows:/data/tvshows
|
|
- /media/jellyfin/Music:/data/music
|
|
ports:
|
|
- 8096:8096
|
|
- 7539:7539/udp
|
|
- 1900:1900/udp
|
|
devices:
|
|
- /dev/dri:/dev/dri
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
|
|
#---------------- UTILITIES ----------------#
|
|
|
|
## Actual (budget)
|
|
actual:
|
|
image: docker.io/actualbudget/actual-server:latest
|
|
container_name: actual
|
|
ports:
|
|
- 5006:5006
|
|
volumes:
|
|
- ${DOCKER_DIR}/actual:/data
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
## ConvertX (file converter)
|
|
convertx:
|
|
image: ghcr.io/c4illin/convertx
|
|
container_name: convertx
|
|
ports:
|
|
- 9132:3000
|
|
volumes:
|
|
- ${DOCKER_DIR}/convertx:/app/data
|
|
env_file:
|
|
- ${ENV_DIR}/convertx.env
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
restart: unless-stopped
|
|
|
|
## Dumbpad (simple notes)
|
|
dumbpad:
|
|
image: dumbwareio/dumbpad:latest
|
|
container_name: dumbpad
|
|
ports:
|
|
- 3007:3000
|
|
volumes:
|
|
- ${DOCKER_DIR}/dumbpad:/app/data
|
|
env_file:
|
|
- ${ENV_DIR}/dumbpad.env
|
|
restart: unless-stopped
|
|
|
|
## Gitea
|
|
gitea:
|
|
image: docker.io/gitea/gitea:latest-rootless
|
|
container_name: gitea
|
|
user: "1001"
|
|
volumes:
|
|
- ${DOCKER_DIR}/gitea/data:/var/lib/gitea
|
|
- ${DOCKER_DIR}/gitea/config:/etc/gitea
|
|
- /etc/timezone:/etc/timezone:ro
|
|
- /etc/localtime:/etc/localtime:ro
|
|
ports:
|
|
- 3003:3000
|
|
- 2222:2222
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
## Grocy (home inventory management)
|
|
grocy:
|
|
container_name: grocy
|
|
image: lscr.io/linuxserver/grocy:latest
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=1000
|
|
volumes:
|
|
- ${DOCKER_DIR}/grocy:/config
|
|
ports:
|
|
- 9283:80
|
|
restart: unless-stopped
|
|
|
|
## Hoarder (link aggregator)
|
|
hoarder:
|
|
image: ghcr.io/hoarder-app/hoarder:release
|
|
container_name: hoarder
|
|
env_file:
|
|
- ${ENV_DIR}/hoarder.env
|
|
volumes:
|
|
- hoarder:/data
|
|
ports:
|
|
- 3017:3000
|
|
environment:
|
|
- MEILI_ADDR=http://meilisearch:7700
|
|
- BROWSER_WEB_URL=http://chrome:9222
|
|
- DATA_DIR=/data
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
chrome:
|
|
image: gcr.io/zenika-hub/alpine-chrome:123
|
|
container_name: chrome
|
|
command:
|
|
- --no-sandbox
|
|
- --disable-gpu
|
|
- --disable-dev-shm-usage
|
|
- --remote-debugging-address=0.0.0.0
|
|
- --remote-debugging-port=9222
|
|
- --hide-scrollbars
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
meilisearch:
|
|
image: getmeili/meilisearch:v1.11.1
|
|
container_name: meilisearch
|
|
env_file:
|
|
- ${ENV_DIR}/hoarder.env
|
|
ports:
|
|
- 7700:7700
|
|
environment:
|
|
- MEILI_NO_ANALYTICS=true
|
|
volumes:
|
|
- meilisearch:/meili_data
|
|
restart: unless-stopped
|
|
|
|
## Joplin (notes)
|
|
joplin:
|
|
image: joplin/server:latest
|
|
container_name: joplin
|
|
ports:
|
|
- 22300:22300
|
|
env_file:
|
|
- ${ENV_DIR}/joplin.env
|
|
depends_on:
|
|
- joplin-db
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
joplin-db:
|
|
image: postgres:15
|
|
container_name: joplin-db
|
|
volumes:
|
|
- ${DOCKER_DIR}/joplin:/var/lib/postgresql/data
|
|
ports:
|
|
- 5432:5432
|
|
environment:
|
|
- POSTGRES_PASSWORD=d8t3nmcj3
|
|
- POSTGRES_USER=april
|
|
- POSTGRES_DB=joplin
|
|
restart: unless-stopped
|
|
|
|
## Kiwix (offline wiki)
|
|
kiwix-serve:
|
|
image: ghcr.io/kiwix/kiwix-serve
|
|
container_name: kiwix-serve
|
|
volumes:
|
|
- /media/kiwix:/data
|
|
ports:
|
|
- 8765:8080
|
|
command: '*.zim'
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
## Link Stack
|
|
linkstack:
|
|
image: linkstackorg/linkstack
|
|
container_name: linkstack
|
|
env_file:
|
|
- ${ENV_DIR}/linkstack.env
|
|
ports:
|
|
- 4000:80
|
|
dns:
|
|
- ${DNS_IP}
|
|
volumes:
|
|
- linkstack:/htdocs
|
|
restart: unless-stopped
|
|
|
|
## LubeLogger (car mileage tracker)
|
|
lubelogger:
|
|
image: ghcr.io/hargata/lubelogger:latest
|
|
container_name: lubelogger
|
|
volumes:
|
|
- ${DOCKER_DIR}/lubelogger/data:/App/data
|
|
- ${DOCKER_DIR}/lubelogger/keys:/root/.aspnet/DataProtection-Keys
|
|
ports:
|
|
- 8103:8080
|
|
env_file:
|
|
- ${ENV_DIR}/lubelogger.env
|
|
restart: unless-stopped
|
|
|
|
## Maloja (music listen tracking)
|
|
maloja:
|
|
image: krateng/maloja
|
|
container_name: maloja
|
|
ports:
|
|
- 42010:42010
|
|
volumes:
|
|
- ${DOCKER_DIR}/maloja:/mljdata
|
|
environment:
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- MALOJA_DATA_DIRECTORY=/mljdata
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
multi-scrobbler:
|
|
image: foxxmd/multi-scrobbler
|
|
container_name: multi-scrobbler
|
|
env_file:
|
|
- ${ENV_DIR}/multi-scrobbler.env
|
|
volumes:
|
|
- ${DOCKER_DIR}/multi-scrobbler:/config
|
|
ports:
|
|
- 9078:9078
|
|
restart: unless-stopped
|
|
|
|
## Miniflux (rss feed reader)
|
|
miniflux:
|
|
image: miniflux/miniflux:latest
|
|
container_name: miniflux
|
|
ports:
|
|
- 8772:8080
|
|
depends_on:
|
|
rss_db:
|
|
condition: service_healthy
|
|
env_file:
|
|
- ${ENV_DIR}/miniflux.env
|
|
healthcheck:
|
|
test: ["CMD", "/usr/bin/miniflux", "-healthcheck", "auto"]
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
rss_db:
|
|
image: postgres:15
|
|
container_name: rss_db
|
|
env_file:
|
|
- ${ENV_DIR}/miniflux.env
|
|
volumes:
|
|
- miniflux-db:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD", "pg_isready", "-U", "miniflux"]
|
|
interval: 10s
|
|
start_period: 30s
|
|
restart: unless-stopped
|
|
|
|
## Paperless (document management)
|
|
paperless:
|
|
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
|
container_name: paperless
|
|
user: 1000:1000
|
|
depends_on:
|
|
- paperless_broker
|
|
ports:
|
|
- 8143:8000
|
|
volumes:
|
|
- paperless-data:/usr/src/paperless/data
|
|
- paperless-media:/usr/src/paperless/media
|
|
- ${DOCKER_DIR}/paperless/export:/usr/src/paperless/export
|
|
- ${DOCKER_DIR}/paperless/consume:/usr/src/paperless/consume
|
|
env_file:
|
|
- ${ENV_DIR}/paperless.env
|
|
restart: unless-stopped
|
|
paperless_broker:
|
|
image: docker.io/library/redis:7
|
|
container_name: paperless_broker
|
|
volumes:
|
|
- redis-data:/data
|
|
restart: unless-stopped
|
|
|
|
## Stirling PDF (pdf utilities)
|
|
stirling-pdf:
|
|
container_name: stirling-pdf
|
|
image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest
|
|
ports:
|
|
- 8710:8080
|
|
volumes:
|
|
- ${DOCKER_DIR}/stirlingpdf/trainingData:/usr/share/tessdata
|
|
- ${DOCKER_DIR}/stirlingpdf/extraConfigs:/configs
|
|
- ${DOCKER_DIR}/stirlingpdf/customFiles:/customFiles/
|
|
- ${DOCKER_DIR}/stirlingpdf/logs:/logs/
|
|
- ${DOCKER_DIR}/stirlingpdf/pipeline:/pipeline/
|
|
environment:
|
|
- TZ=${TZ}
|
|
- DOCKER_ENABLE_SECURITY=false
|
|
- LANGS=en_US
|
|
- DOCKER_ENABLE_SECURITY=true
|
|
- SECURITY_ENABLELOGIN=true
|
|
- SECURITY_CSRFDISABLED=false
|
|
- SECURITY_INITIALLOGIN_USERNAME=april
|
|
- SECURITY_INITIALLOGIN_PASSWORD="qYoK!FVom%bpg24Xd$@g"
|
|
restart: unless-stopped
|
|
|
|
## Tandoor (recipe management)
|
|
tandoor:
|
|
container_name: tandoor
|
|
image: vabene1111/recipes
|
|
user: 1000:1000
|
|
env_file:
|
|
- ${ENV_DIR}/tandoor.env
|
|
volumes:
|
|
- tandoor-server-config:/opt/recipes/nginx/conf.d
|
|
- ${DOCKER_DIR}/tandoor/static:/opt/recipes/staticfiles
|
|
- ${DOCKER_DIR}/tandoor/media:/opt/recipes/mediafiles
|
|
depends_on:
|
|
- tandoor-db
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
tandoor-server:
|
|
image: nginx:mainline-alpine
|
|
container_name: tandoor-server
|
|
ports:
|
|
- 8554:80
|
|
env_file:
|
|
- ${ENV_DIR}/tandoor.env
|
|
volumes:
|
|
- tandoor-server-config:/etc/nginx/conf.d:ro
|
|
- ${DOCKER_DIR}/tandoor/static:/static:ro
|
|
- ${DOCKER_DIR}/tandoor/media:/media:ro
|
|
depends_on:
|
|
- tandoor
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
tandoor-db:
|
|
container_name: tandoor-db
|
|
image: postgres:16-alpine
|
|
user: 1000:1000
|
|
env_file:
|
|
- ${ENV_DIR}/tandoor.env
|
|
volumes:
|
|
- ${DOCKER_DIR}/tandoor/postgresql:/var/lib/postgresql/data
|
|
restart: unless-stopped
|
|
|
|
## TinyHome (server dashboard)
|
|
tinyhome:
|
|
container_name: tinyhome
|
|
image: azpsen/tinyhome:main
|
|
environment:
|
|
- REFRESH_INTERVAL=360
|
|
ports:
|
|
- 3000:80
|
|
volumes:
|
|
- ${DOCKER_DIR}/tinyhome:/config:rw
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
## Vaultwarden (password manager)
|
|
vaultwarden:
|
|
image: vaultwarden/server:latest
|
|
container_name: vaultwarden
|
|
env_file:
|
|
- ${ENV_DIR}/vaultwarden.env
|
|
volumes:
|
|
- ${DOCKER_DIR}/vaultwarden:/data
|
|
ports:
|
|
- 8912:80
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
# Wizarr (jellyfin invites)
|
|
wizarr:
|
|
container_name: wizarr
|
|
image: ghcr.io/wizarrrr/wizarr:latest
|
|
ports:
|
|
- 5690:5690
|
|
volumes:
|
|
- ${DOCKER_DIR}/wizarr/database:/data/database
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
|
|
#---------------- MONITORING ----------------#
|
|
|
|
## Dozzle (docker logs)
|
|
dozzle:
|
|
container_name: dozzle
|
|
image: amir20/dozzle:latest
|
|
volumes:
|
|
- /var/run${DOCKER_DIR}.sock:/var/run${DOCKER_DIR}.sock:ro
|
|
ports:
|
|
- 9999:8080
|
|
restart: unless-stopped
|
|
|
|
## Glances (system monitor)
|
|
glances:
|
|
image: nicolargo/glances:latest
|
|
container_name: glances
|
|
pid: host
|
|
volumes:
|
|
- /var/run${DOCKER_DIR}.sock:/var/run${DOCKER_DIR}.sock
|
|
- /:/glances/root:ro
|
|
environment:
|
|
- "GLANCES_OPT=-w"
|
|
ports:
|
|
- 61208:61208
|
|
secrets:
|
|
- source: glances_password
|
|
target: /root/.config/glances/glances.pwd
|
|
restart: unless-stopped
|
|
|
|
## Scrutiny (disk health monitoring)
|
|
scrutiny:
|
|
container_name: scrutiny
|
|
image: ghcr.io/analogj/scrutiny:master-omnibus
|
|
cap_add:
|
|
- SYS_RAWIO
|
|
ports:
|
|
- 8181:8080
|
|
- 8086:8086
|
|
volumes:
|
|
- /run/udev:/run/udev:ro
|
|
- ${DOCKER_DIR}/scrutiny/config:/opt/scrutiny/config
|
|
- ${DOCKER_DIR}/scrutiny/influxdb:/opt/scrutiny/influxdb
|
|
devices:
|
|
- /dev/sda:/dev/sda
|
|
- /dev/sdb:/dev/sdb
|
|
- /dev/sdc:/dev/sdc
|
|
- /dev/sdd:/dev/sdd
|
|
restart: unless-stopped
|
|
|
|
## Speedtest Tracker
|
|
speedtest-tracker:
|
|
image: lscr.io/linuxserver/speedtest-tracker:latest
|
|
container_name: speedtest-tracker
|
|
ports:
|
|
- 8465:80
|
|
- 8466:443
|
|
env_file:
|
|
- ${ENV_DIR}/speedtest.env
|
|
volumes:
|
|
- ${DOCKER_DIR}/speedtest-tracker:/config
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
|
|
#---------------- NETWORKING ----------------#
|
|
|
|
## AdGuard Home (ad-blocking dns provider)
|
|
adguard:
|
|
image: adguard/adguardhome
|
|
container_name: adguard
|
|
network_mode: host
|
|
volumes:
|
|
- ${DOCKER_DIR}/adguard/working:/opt/adguardhome/work
|
|
- ${DOCKER_DIR}/adguard/conf:/opt/adguardhome/conf
|
|
restart: unless-stopped
|
|
|
|
## Cloudflared (tunnel service for outside web access)
|
|
cloudflared:
|
|
container_name: cloudflared
|
|
image: cloudflare/cloudflared:latest
|
|
network_mode: host
|
|
volumes:
|
|
- ${DOCKER_DIR}/cloudflared:/etc/cloudflared
|
|
command: tunnel --no-autoupdate run
|
|
env_file:
|
|
- ${ENV_DIR}/cloudflared.env
|
|
restart: unless-stopped
|
|
|
|
## Gluetun (vpn connector)
|
|
gluetun:
|
|
image: qmcgaw/gluetun:latest
|
|
container_name: gluetun
|
|
hostname: gluetun
|
|
cap_add:
|
|
- NET_ADMIN
|
|
network_mode: bridge
|
|
ports:
|
|
# System/Utility Ports
|
|
- 8888:8888/tcp # HTTP Proxy
|
|
- 8388:8388/tcp # Shadowsocks
|
|
- 8388:8388/udp # Shadowsocks
|
|
- 6881:6881 # Torrent peers
|
|
- 6881:6881/udp # Torrent peers
|
|
- 8111:8000/tcp # HTTP Control
|
|
# Service Ports
|
|
- 9696:9696 # Prowlarr
|
|
- 8080:8080 # qBittorrent
|
|
- 8989:8989 # Radarr
|
|
- 7878:7878 # Sonarr
|
|
volumes:
|
|
- ${DOCKER_DIR}/gluetun:/gluetun
|
|
- /etc/localtime:/etc/localtime:ro
|
|
devices:
|
|
- /dev/net/tun:/dev/net/tun
|
|
env_file:
|
|
- ${ENV_DIR}/gluetun.env
|
|
restart: unless-stopped
|
|
|
|
|
|
#---------------- DOWNLOADING ----------------#
|
|
|
|
## Bazarr (subtitle downloading)
|
|
bazarr:
|
|
image: lscr.io/linuxserver/bazarr:latest
|
|
container_name: bazarr
|
|
environment:
|
|
- puid=1000
|
|
- pgid=1000
|
|
- tz=america/chicago
|
|
volumes:
|
|
- ${DOCKER_DIR}/bazarr:/config
|
|
- /media/jellyfin/movies:/movies
|
|
- /media/jellyfin/tv shows:/tv
|
|
ports:
|
|
- 6767:6767
|
|
restart: unless-stopped
|
|
|
|
## Calibre Downloader (ebook downloading)
|
|
calibre-dl:
|
|
image: ghcr.io/calibrain/calibre-web-automated-book-downloader:latest
|
|
container_name: calibre-dl
|
|
environment:
|
|
- FLASK_PORT=8084
|
|
- FLASK_DEBUG=false
|
|
- CLOUDFLARE_PROXY_URL=http://cf-bypass:8000
|
|
- INGEST_DIR=/cwa-book-ingest
|
|
- BOOK_LANGUAGE=en
|
|
ports:
|
|
- 8085:8084
|
|
volumes:
|
|
- ${DOCKER_DIR}/calibre/ingest:/cwa-book-ingest
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
## Cloudflare challenge bypass (for accessing Anna's Archive)
|
|
cf-bypass:
|
|
image: ghcr.io/sarperavci/cloudflarebypassforscraping:latest
|
|
container_name: cf-bypass
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
## openbooks (IRC-based ebook downloading)
|
|
openbooks:
|
|
image: evanbuss/openbooks:latest
|
|
container_name: openbooks
|
|
command: --persist --name azpsen
|
|
ports:
|
|
- 8087:80
|
|
volumes:
|
|
# This works because calibre-web-automated fails to import .tmp files
|
|
- ${DOCKER_DIR}/calibre/ingest/:/books
|
|
dns:
|
|
- ${DNS_IP}
|
|
restart: unless-stopped
|
|
|
|
## Prowlarr (torrent indexer management)
|
|
prowlarr:
|
|
image: ghcr.io/linuxserver/prowlarr:nightly
|
|
container_name: prowlarr
|
|
network_mode: "service:gluetun"
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=1000
|
|
volumes:
|
|
- ${DOCKER_DIR}/prowlarr:/config
|
|
restart: unless-stopped
|
|
|
|
## QBittorrent (torrent client)
|
|
qbittorrent:
|
|
image: ghcr.io/linuxserver/qbittorrent:latest
|
|
container_name: qbittorrent
|
|
network_mode: "service:gluetun"
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- WEBUI_PORT=8080
|
|
volumes:
|
|
- ${DOCKER_DIR}/qbittorrent/config:/config
|
|
- ${DOCKER_DIR}/qbittorrent/downloads:/downloads
|
|
- /media/downloads:/ext_dl
|
|
restart: unless-stopped
|
|
|
|
## Radarr (movie downloading)
|
|
radarr:
|
|
image: ghcr.io/linuxserver/radarr:latest
|
|
container_name: radarr
|
|
network_mode: "service:gluetun"
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=1000
|
|
volumes:
|
|
- ${DOCKER_DIR}/radarr:/config
|
|
- /media/jellyfin/Movies:/Movies #optional
|
|
- ${DOCKER_DIR}/qbittorrent/downloads:/downloads #optional
|
|
restart: unless-stopped
|
|
|
|
## Sonarr (tv show downloading)
|
|
sonarr:
|
|
image: ghcr.io/linuxserver/sonarr:latest
|
|
container_name: sonarr
|
|
network_mode: "service:gluetun"
|
|
environment:
|
|
- TZ=${TZ}
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- DOCKER_MODS=ghcr.io/gilbn/theme.park:sonarr
|
|
- TP_ADDON=sonarr-darker
|
|
- TP_THEME=dark
|
|
volumes:
|
|
- ${DOCKER_DIR}/sonarr:/config
|
|
- /media/jellyfin/TV Shows:/TV Shows
|
|
- ${DOCKER_DIR}/qbittorrent/downloads:/downloads
|
|
restart: unless-stopped
|
|
|
|
|
|
#---------------- DOCKER ----------------#
|
|
|
|
secrets:
|
|
glances_password:
|
|
file: ${DOCKER_DIR}/secrets/glances_password
|
|
|
|
volumes:
|
|
hoarder:
|
|
joplindb:
|
|
linkstack:
|
|
meilisearch:
|
|
model-cache:
|
|
miniflux-db:
|
|
paperless-data:
|
|
paperless-media:
|
|
redis-data:
|
|
tandoor-server-config:
|
|
|