commit b58f104420954519fb1a013074ab77061ad506af Author: mrwacka Date: Tue Sep 8 10:32:14 2026 +0200 Immich Jellyfin check diff --git a/README.md b/README.md new file mode 100644 index 0000000..123ca4c --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# media-int01 + +Infra-Repository fuer die Medien-VM `media-int01` auf `10.100.20.15`. + +## Dienste + +- Jellyfin +- Immich + +## Domains + +- jellyfin.theboxhub.ch -> 10.100.20.15:8096 +- immich.theboxhub.ch -> 10.100.20.15:2283 + +## Struktur + +- `compose/` - Compose-Dateien pro Dienst +- `config/` - optionale Konfigurationen +- `data/` - dokumentierte lokale App-Datenstruktur +- `mounts/` - dokumentierte externe Mountpunkte fuer grosse Daten +- `backup/` - vorbereitete Backup-Struktur +- `scripts/init-dirs.sh` - legt Zielstruktur unter `/srv/media-int01` und `/mnt` an +- `scripts/deploy.sh` - deployed Compose und Config nach `/srv/media-int01` + +## Datenpfade + +### Jellyfin +- `/srv/media-int01/data/jellyfin/config` +- `/srv/media-int01/data/jellyfin/cache` +- `/mnt/jellyfin-data/uploads` +- `/mnt/jellyfin-media/xCinema` + +### Immich +- `/srv/media-int01/data/immich/postgres` +- `/srv/media-int01/data/immich/model-cache` +- `/mnt/immich-data/library` +- `/mnt/immich-import/xFlashback` + +## Deployment + +```bash +./scripts/init-dirs.sh +./scripts/deploy.sh + +--- + +--- + +# 7. Wichtiger Betriebs-Hinweis +Bevor du spaeter `docker compose up -d` auf der Ziel-VM machst, unbedingt pruefen: + +```bash +mount | grep -E 'jellyfin|immich' +ls -ld /mnt/jellyfin-data /mnt/jellyfin-media /mnt/immich-data /mnt/immich-import \ No newline at end of file diff --git a/backup/compose/.gitkeep b/backup/compose/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/backup/databases/.gitkeep b/backup/databases/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/backup/immich/.gitkeep b/backup/immich/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/backup/jellyfin/.gitkeep b/backup/jellyfin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/compose/immich/compose.yaml b/compose/immich/compose.yaml new file mode 100644 index 0000000..85f9d20 --- /dev/null +++ b/compose/immich/compose.yaml @@ -0,0 +1,83 @@ +x-logging: &default-logging + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + +services: + immich-server: + image: ghcr.io/immich-app/immich-server:release + container_name: immich_server + restart: unless-stopped + environment: + DB_HOSTNAME: immich-db + REDIS_HOSTNAME: immich-redis + DB_USERNAME: immich + DB_PASSWORD: "IMDB_7xL2mQ9rT4vK1pD8cY6n" + DB_DATABASE_NAME: immich + DB_TYPE: postgres + IMMICH_MACHINE_LEARNING_URL: http://immich-machine-learning:3003 + TZ: Europe/Zurich + volumes: + - /mnt/immich-data/library:/usr/src/app/upload + - /mnt/immich-import/xFlashback:/mnt/xFlashback:ro + - /etc/localtime:/etc/localtime:ro + depends_on: + immich-db: + condition: service_healthy + immich-redis: + condition: service_healthy + immich-machine-learning: + condition: service_healthy + ports: + - "2283:2283" + healthcheck: + test: ["CMD", "immich-admin", "ping"] + interval: 30s + timeout: 10s + retries: 5 + start_period: 30s + logging: *default-logging + + immich-db: + image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.3.0 + container_name: immich_db + restart: unless-stopped + environment: + POSTGRES_PASSWORD: "IMDB_7xL2mQ9rT4vK1pD8cY6n" + POSTGRES_USER: immich + POSTGRES_DB: immich + TZ: Europe/Zurich + volumes: + - /srv/media-int01/data/immich/postgres:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -d immich -U immich"] + interval: 10s + timeout: 5s + retries: 5 + logging: *default-logging + + immich-redis: + image: redis:alpine + container_name: immich_redis + restart: unless-stopped + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + logging: *default-logging + + immich-machine-learning: + image: ghcr.io/immich-app/immich-machine-learning:release + container_name: immich_machine_learning + restart: unless-stopped + volumes: + - /srv/media-int01/data/immich/model-cache:/cache + healthcheck: + test: ["CMD", "python3", "-c", "import socket; s = socket.socket(); s.settimeout(2); s.connect(('localhost', 3003))"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 30s + logging: *default-logging \ No newline at end of file diff --git a/compose/jellyfin/compose.yaml b/compose/jellyfin/compose.yaml new file mode 100644 index 0000000..51d21d0 --- /dev/null +++ b/compose/jellyfin/compose.yaml @@ -0,0 +1,27 @@ +x-logging: &default-logging + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + +services: + jellyfin: + image: jellyfin/jellyfin:latest + container_name: jellyfin + restart: unless-stopped + environment: + TZ: Europe/Zurich + volumes: + - /srv/media-int01/data/jellyfin/config:/config + - /srv/media-int01/data/jellyfin/cache:/cache + - /mnt/jellyfin-data/uploads:/data/uploads + - /mnt/jellyfin-media/xCinema:/data/xCinema:ro + ports: + - "8096:8096" + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8096/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 20s + logging: *default-logging \ No newline at end of file diff --git a/config/immich/.gitkeep b/config/immich/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/config/jellyfin/.gitkeep b/config/jellyfin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/immich/model-cache/.gitkeep b/data/immich/model-cache/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/immich/postgres/.gitkeep b/data/immich/postgres/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/jellyfin/cache/.gitkeep b/data/jellyfin/cache/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data/jellyfin/config/.gitkeep b/data/jellyfin/config/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mounts/immich-data/library/.gitkeep b/mounts/immich-data/library/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mounts/immich-import/xFlashback/.gitkeep b/mounts/immich-import/xFlashback/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mounts/jellyfin-data/uploads/.gitkeep b/mounts/jellyfin-data/uploads/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mounts/jellyfin-media/xCinema/.gitkeep b/mounts/jellyfin-media/xCinema/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100644 index 0000000..e69de29 diff --git a/scripts/init-dirs.sh b/scripts/init-dirs.sh new file mode 100644 index 0000000..e69de29