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: - ${ABS_BOOKS}:/audiobooks - ${ABS_PODS}:/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 ## Immich (photo library management) immich_server: container_name: immich_server image: ghcr.io/immich-app/immich-server:v1.132.1 volumes: - ${IMMICH_LIBRARY}:/usr/src/app/upload 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.132.1 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: container_name: invidious image: quay.io/invidious/invidious:latest 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: container_name: invidious-sighelper image: quay.io/invidious/inv-sig-helper:latest 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: container_name: invidious-db image: docker.io/library/postgres:14 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: container_name: jellyfin image: lscr.io/linuxserver/jellyfin:latest 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 - ${JF_MOVIES}:/data/movies - ${JF_SHOWS}:/data/tvshows - ${JF_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: container_name: actual image: docker.io/actualbudget/actual-server:latest ports: - 5006:5006 volumes: - ${DOCKER_DIR}/actual:/data dns: - ${DNS_IP} restart: unless-stopped ## Baikal (calendar/contacts) baikal: container_name: baikal image: ckulka/baikal:nginx ports: - 8391:80 volumes: - ${DOCKER_DIR}/baikal/config:/var/www/baikal/config - ${DOCKER_DIR}/baikal/data:/var/www/baikal/Specific restart: unless-stopped ## Backrest (backup GUI) backrest: container_name: backrest image: garethgeorge/backrest:latest hostname: backrest volumes: - ${DOCKER_DIR}/backrest/data:/data - ${DOCKER_DIR}/backrest/config:/config - ${DOCKER_DIR}/backrest/cache:/cache - ${DOCKER_DIR}/backrest/tmp:/tmp - ${DOCKER_DIR}:/userdata/docker - ${IMMICH_LIBRARY}:/userdata/immich environment: - BACKREST_DATA=/data - BACKREST_CONFIG=/config/config.json - XDG_CACHE_HOME=/cache - TMPDIR=/tmp - TZ=${TZ} ports: - 9898:9898 restart: unless-stopped ## ConvertX (file converter) convertx: container_name: convertx image: ghcr.io/c4illin/convertx ports: - 9132:3000 volumes: - ${DOCKER_DIR}/convertx:/app/data env_file: - ${ENV_DIR}/convertx.env environment: - PUID=1000 - PGID=1000 restart: unless-stopped ## Gitea gitea: container_name: gitea image: docker.io/gitea/gitea:latest-rootless 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 ## IT Tools (misc utilities) it-tools: container_name: it-tools image: corentinth/it-tools:latest ports: - 5734:80 restart: unless-stopped ## Kiwix (offline wiki) kiwix-serve: container_name: kiwix-serve image: ghcr.io/kiwix/kiwix-serve volumes: - ${KIWIX_DIR}:/data ports: - 8765:8080 command: '*.zim' dns: - ${DNS_IP} restart: unless-stopped ## LubeLogger (car mileage tracker) lubelogger: container_name: lubelogger image: ghcr.io/hargata/lubelogger:latest 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: container_name: maloja image: krateng/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: container_name: multi-scrobbler image: foxxmd/multi-scrobbler env_file: - ${ENV_DIR}/scrobbler.env volumes: - ${DOCKER_DIR}/scrobbler:/config ports: - 9078:9078 restart: unless-stopped ## Memos (simple note app) memos: container_name: memos image: neosmemo/memos:stable volumes: - ${DOCKER_DIR}/memos:/var/opt/memos ports: - 5230:5230 restart: unless-stopped ## Miniflux (rss feed reader) miniflux: container_name: miniflux image: miniflux/miniflux:latest 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: container_name: rss_db image: postgres:15 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: container_name: paperless image: ghcr.io/paperless-ngx/paperless-ngx:latest 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: container_name: paperless_broker image: docker.io/library/redis:7 volumes: - redis-data:/data restart: unless-stopped ## PicoShare (file sharing tool) picoshare: container_name: picoshare image: mtlynch/picoshare env_file: - ${ENV_DIR}/picoshare.env ports: - 4001:4001 command: -db /data/store.db volumes: - ${DOCKER_DIR}/picoshare:/data dns: - ${DNS_IP} restart: unless-stopped ## SeaFile (cloud drive) seafile: container_name: seafile image: seafileltd/seafile-mc:11.0-latest ports: - 8623:80 volumes: - ${DOCKER_DIR}/seafile/data:/shared env_file: - ${ENV_DIR}/seafile.env environment: - TIME_ZONE=${TZ} depends_on: - seafile_db - seafile_cache restart: unless-stopped seafile_db: container_name: seafile-mysql image: mariadb:10.11 env_file: - ${ENV_DIR}/seafile.env volumes: - ${DOCKER_DIR}/seafile/db:/var/lib/mysql restart: unless-stopped seafile_cache: container_name: seafile_cache image: memcached:1.6.18 entrypoint: memcached -m 256 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: container_name: tandoor-server image: nginx:mainline-alpine 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: container_name: vaultwarden image: vaultwarden/server:latest env_file: - ${ENV_DIR}/vaultwarden.env volumes: - ${DOCKER_DIR}/vaultwarden:/data ports: - 8912:80 dns: - ${DNS_IP} restart: unless-stopped ## Wallabag (bookmark manager) wallabag: container_name: wallabag image: wallabag/wallabag env_file: - ${ENV_DIR}/wallabag.env ports: - 5438:80 volumes: - ${DOCKER_DIR}/wallabag/images:/var/www/wallabag/web/assets/images - ${DOCKER_DIR}/wallabag/data:/var/www/wallabag/data dns: - ${DNS_IP} restart: unless-stopped ## Personal Website webserver: container_name: azpsen image: lipanski/docker-static-website:latest ports: - 4000:3000 volumes: - ${DOCKER_DIR}/azpsen/static:/home/static - ${DOCKER_DIR}/azpsen/httpd.conf:/home/static/httpd.conf:ro 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 ## Workout Tracker workout-tracker: container_name: workout-tracker image: ghcr.io/jovandeginste/workout-tracker:master ports: # Host Port:Container Port - 5021:8080 volumes: - ${DOCKER_DIR}/workout-tracker:/data env_file: - ${ENV_DIR}/workout-tracker.env restart: unless-stopped #---------------- MONITORING ----------------# ## Beszel (system monitoring) beszel: container_name: beszel image: henrygd/beszel env_file: - ${ENV_DIR}/beszel.env ports: - 2493:8090 volumes: - ${DOCKER_DIR}/beszel/data:/beszel_data - ${DOCKER_DIR}/beszel/socket:/beszel_socket restart: unless-stopped beszel-agent: container_name: beszel-agent image: henrygd/beszel-agent:latest env_file: - ${ENV_DIR}/beszel.env volumes: - ${DOCKER_DIR}/beszel/socket:/beszel_socket - /var/run/docker.sock:/var/run/docker.sock:ro - /media:/extra-filesystems/media:ro network_mode: host restart: unless-stopped ## Dozzle (docker logs) dozzle: container_name: dozzle image: amir20/dozzle:latest volumes: - /var/run/docker.sock:/var/run/docker.sock:ro ports: - 9999:8080 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 ## MySpeed (internet speed tracker) myspeed: container_name: myspeed image: germannewsmaker/myspeed volumes: - ${DOCKER_DIR}/myspeed:/myspeed/data ports: - 5216:5216 dns: - ${DNS_IP} restart: unless-stopped #---------------- NETWORKING ----------------# ## AdGuard Home (ad-blocking dns provider) adguard: container_name: adguard image: adguard/adguardhome 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: container_name: gluetun image: qmcgaw/gluetun:latest 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: container_name: bazarr image: lscr.io/linuxserver/bazarr:latest environment: - puid=1000 - pgid=1000 - tz=america/chicago volumes: - ${DOCKER_DIR}/bazarr:/config - ${JF_MOVIES}:/movies - ${JF_SHOWS}:/tv ports: - 6767:6767 restart: unless-stopped ## Prowlarr (torrent indexer management) prowlarr: container_name: prowlarr image: ghcr.io/linuxserver/prowlarr:nightly network_mode: "service:gluetun" environment: - TZ=${TZ} - PUID=1000 - PGID=1000 volumes: - ${DOCKER_DIR}/prowlarr:/config restart: unless-stopped ## QBittorrent (torrent client) qbittorrent: container_name: qbittorrent image: ghcr.io/linuxserver/qbittorrent:latest 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 - ${QB_EXT_DL}:/ext_dl restart: unless-stopped ## Radarr (movie downloading) radarr: container_name: radarr image: ghcr.io/linuxserver/radarr:latest network_mode: "service:gluetun" environment: - TZ=${TZ} - PUID=1000 - PGID=1000 volumes: - ${DOCKER_DIR}/radarr:/config - ${JF_MOVIES}:/Movies #optional - ${DOCKER_DIR}/qbittorrent/downloads:/downloads #optional restart: unless-stopped ## Sonarr (tv show downloading) sonarr: container_name: sonarr image: ghcr.io/linuxserver/sonarr:latest 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 - ${JF_SHOWS}:/TV Shows - ${DOCKER_DIR}/qbittorrent/downloads:/downloads restart: unless-stopped #---------------- DOCKER ----------------# volumes: hoarder: joplindb: meilisearch: model-cache: miniflux-db: paperless-data: paperless-media: redis-data: tandoor-server-config: