name: media services: # --- Jellyfin (Port 8096) --- jellyfin: image: lscr.io/linuxserver/jellyfin:latest container_name: jellyfin restart: unless-stopped ports: - "7003:8096" environment: - PUID=${PUID} - PGID=${PGID} - TZ=${TZ} volumes: - ./config/jellyfin:/config - ${MEDIA_ROOT}:/data/media # Pfad aus der .env # Hardware Transcoding (Intel/AMD): #devices: # - /dev/dri:/dev/dri # --- Audiobookshelf (Port 13378) --- audiobookshelf: image: ghcr.io/advplyr/audiobookshelf:latest container_name: audiobookshelf restart: unless-stopped ports: - "7001:80" volumes: - ./config/audiobookshelf/config:/config - ./config/audiobookshelf/metadata:/metadata - ${MEDIA_ROOT}/audiobooks:/audiobooks - ${MEDIA_ROOT}/podcasts:/podcasts # --- RomM (Port 7000) --- romm: image: rommapp/romm:latest container_name: romm restart: unless-stopped ports: - "7000:8080" environment: - DB_HOST=romm-db - DB_NAME=romm - DB_USER=romm-user - DB_PASSWD=romm-password volumes: - ./config/romm/resources:/romm/resources - ${MEDIA_ROOT}/games:/romm/library depends_on: - romm-db # Datenbank für RomM (nur intern sichtbar) romm-db: image: mariaDB:10.6 labels: - "wud.watch=false" environment: - MYSQL_ROOT_PASSWORD=root-pass - MYSQL_DATABASE=romm - MYSQL_USER=romm-user - MYSQL_PASSWORD=romm-password volumes: - romm_db_data:/var/lib/mysql # --- Immich (Port 7002) --- # ACHTUNG: Immich ist komplex. Das ist die vereinfachte All-in-One Struktur. immich-server: image: ghcr.io/immich-app/immich-server:release container_name: immich_server command: ["start.sh", "immich"] restart: always ports: - "7999:2283" environment: - DB_HOSTNAME=immich-postgres - DB_USERNAME=postgres - DB_PASSWORD=postgres - DB_DATABASE_NAME=immich - REDIS_HOSTNAME=immich-redis volumes: - ${MEDIA_ROOT}/photos:/usr/src/app/upload depends_on: - immich-redis - immich-postgres immich-microservices: image: ghcr.io/immich-app/immich-server:release container_name: immich_microservices command: ["start.sh", "microservices"] restart: always environment: - DB_HOSTNAME=immich-postgres - DB_USERNAME=postgres - DB_PASSWORD=postgres - DB_DATABASE_NAME=immich - REDIS_HOSTNAME=immich-redis volumes: - ${MEDIA_ROOT}/photos:/usr/src/app/upload depends_on: - immich-redis - immich-postgres # Immich braucht seine eigene DB (Vectordaten etc.) immich-postgres: image: tensorchord/pgvecto-rs:pg14-v0.2.0 container_name: immich_postgres labels: - "wud.watch=false" restart: always environment: - POSTGRES_PASSWORD=postgres - POSTGRES_USER=postgres - POSTGRES_DB=immich volumes: - immich_pg_data:/var/lib/postgresql/data immich-redis: image: redis:6.2-alpine container_name: immich_redis restart: always labels: - "wud.watch=false" immich-drop: image: ghcr.io/nasogaa/immich-drop:latest pull_policy: always container_name: immich-drop restart: unless-stopped # Configure all settings here (no .env required) environment: # Immich connection (must include /api) IMMICH_BASE_URL: https://immich.example.com/api IMMICH_API_KEY: ${IMMICH_API_KEY} # Optional behavior IMMICH_ALBUM_NAME: dead-drop PUBLIC_UPLOAD_PAGE_ENABLED: "false" # keep disabled by default PUBLIC_BASE_URL: https://drop.example.com # Large files: chunked uploads (bypass 100MB proxy limits) CHUNKED_UPLOADS_ENABLED: "false" # enable chunked uploads CHUNK_SIZE_MB: "95" # per-chunk size (MB) # App internals SESSION_SECRET: ${SESSION_SECRET} # Expose the app on the host ports: - 7998:8080 # Persist local dedupe cache (state.db) across restarts volumes: - immich_drop_data:/data # Simple healthcheck healthcheck: test: ["CMD-SHELL", "python - <<'PY'\nimport os,urllib.request,sys; url=f\"http://127.0.0.1:{os.getenv('PORT','8080')}/\";\ntry: urllib.request.urlopen(url, timeout=3); sys.exit(0)\nexcept Exception: sys.exit(1)\nPY"] interval: 30s timeout: 5s retries: 3 start_period: 10s immich-public-proxy: image: alangrainger/immich-public-proxy:latest container_name: immich-public-proxy restart: always ports: - "7997:3000" environment: PUBLIC_BASE_URL: https://your-proxy-url.com IMMICH_URL: http://your-internal-immich-server:2283 healthcheck: test: curl -s http://localhost:3000/share/healthcheck -o /dev/null || exit 1 start_period: 10s timeout: 5s immich-kiosk: image: ghcr.io/damongolding/immich-kiosk:latest container_name: immich-kiosk tty: true environment: LANG: "de_DE" TZ: "Europe/Berlin" ports: - 7996:3000 volumes: - ./config:/config # - ./custom.css:/custom.css # - ./offline-assets:/offline-assets restart: always healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 5s retries: 3 start_period: 10s power-tools: image: ghcr.io/varun-raj/immich-power-tools:latest ports: - "7995:3000" env_file: - .env volumes: romm_db_data: immich_pg_data: immich_drop_data: