This commit is contained in:
2026-02-05 21:56:40 +01:00
commit 1f62da7828
17 changed files with 655 additions and 0 deletions

7
Home/Node1/media/.env Normal file
View File

@@ -0,0 +1,7 @@
PUID=1000
PGID=1000
TZ=Europe/Berlin
# WICHTIG: Passe diesen Pfad an deine echte Festplatte an!
# Zum Beispiel: /mnt/hdd/media
MEDIA_ROOT=/mnt/storage/media

View File

@@ -0,0 +1,205 @@
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: