mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
feat(infra): add Jellyfin media server to netcup-vps
jellyfin, jellyfin-ffmpeg, jellyfin-web packages. Systemd service on port 8096, discovery on UDP 1900. Caddy reverse proxy ready for jellyfin when domain is configured.
This commit is contained in:
parent
b77c0e7ddd
commit
7f22de3c36
2 changed files with 56 additions and 1 deletions
|
|
@ -351,6 +351,7 @@
|
||||||
# reverse_proxy /lean* localhost:8765
|
# reverse_proxy /lean* localhost:8765
|
||||||
# reverse_proxy /python* localhost:8767
|
# reverse_proxy /python* localhost:8767
|
||||||
# reverse_proxy /ollama* localhost:11434
|
# reverse_proxy /ollama* localhost:11434
|
||||||
|
# reverse_proxy localhost:8096
|
||||||
# '';
|
# '';
|
||||||
# };
|
# };
|
||||||
};
|
};
|
||||||
|
|
@ -360,6 +361,44 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# ── Jellyfin media server (port 8096) ────────────────────────────────────
|
||||||
|
# Stream video, audio, and images to any device.
|
||||||
|
# Transcoding via jellyfin-ffmpeg (VA-API/QSV/OCL on x86, software on ARM64).
|
||||||
|
systemd.services.jellyfin = {
|
||||||
|
description = "Jellyfin media server";
|
||||||
|
after = [ "network.target" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
#!${pkgs.bash}/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
export JELLYFIN_DATA_DIR=/home/researcher/.local/share/jellyfin
|
||||||
|
export JELLYFIN_CONFIG_DIR=/home/researcher/.config/jellyfin
|
||||||
|
export JELLYFIN_LOG_DIR=/home/researcher/.local/log/jellyfin
|
||||||
|
export JELLYFIN_CACHE_DIR=/home/researcher/.cache/jellyfin
|
||||||
|
mkdir -p $JELLYFIN_DATA_DIR $JELLYFIN_CONFIG_DIR $JELLYFIN_LOG_DIR $JELLYFIN_CACHE_DIR
|
||||||
|
exec ${pkgs.jellyfin}/bin/jellyfin \
|
||||||
|
--datadir "$JELLYFIN_DATA_DIR" \
|
||||||
|
--configdir "$JELLYFIN_CONFIG_DIR" \
|
||||||
|
--logdir "$JELLYFIN_LOG_DIR" \
|
||||||
|
--cachedir "$JELLYFIN_CACHE_DIR" \
|
||||||
|
--ffmpeg ${pkgs.jellyfin-ffmpeg}/bin/ffmpeg \
|
||||||
|
--webdir ${pkgs.jellyfin-web}/share/jellyfin-web
|
||||||
|
'';
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
Restart = "always";
|
||||||
|
RestartSec = "10s";
|
||||||
|
User = "researcher";
|
||||||
|
Group = "researcher";
|
||||||
|
Environment = [
|
||||||
|
"HOME=/home/researcher"
|
||||||
|
"SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# ── Prometheus node exporter (port 9100) ──────────────────────────────────
|
# ── Prometheus node exporter (port 9100) ──────────────────────────────────
|
||||||
# Exposes hardware/OS metrics for monitoring (Uptime Kuma, etc.)
|
# Exposes hardware/OS metrics for monitoring (Uptime Kuma, etc.)
|
||||||
services.prometheus.exporters = {
|
services.prometheus.exporters = {
|
||||||
|
|
@ -480,13 +519,17 @@
|
||||||
6443 # k3s Kubernetes API
|
6443 # k3s Kubernetes API
|
||||||
2379 # etcd client
|
2379 # etcd client
|
||||||
2380 # etcd peer
|
2380 # etcd peer
|
||||||
|
8096 # Jellyfin media server
|
||||||
8765 # Lean LSP (v4.19.0)
|
8765 # Lean LSP (v4.19.0)
|
||||||
8766 # Lean LSP (v4.30.0-rc2)
|
8766 # Lean LSP (v4.30.0-rc2)
|
||||||
8767 # Python LSP
|
8767 # Python LSP
|
||||||
|
8920 # Jellyfin-alt HTTP
|
||||||
9100 # Prometheus node exporter
|
9100 # Prometheus node exporter
|
||||||
11434 # Ollama
|
11434 # Ollama
|
||||||
];
|
];
|
||||||
allowedUDPPorts = [ ];
|
allowedUDPPorts = [
|
||||||
|
1900 # Jellyfin discovery (SSDP)
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ── Packages ────────────────────────────────────────────────────────────────
|
# ── Packages ────────────────────────────────────────────────────────────────
|
||||||
|
|
@ -542,6 +585,13 @@
|
||||||
portaudio # Cross-platform audio I/O
|
portaudio # Cross-platform audio I/O
|
||||||
libsndfile # Audio file I/O
|
libsndfile # Audio file I/O
|
||||||
alsa-lib # ALSA audio library
|
alsa-lib # ALSA audio library
|
||||||
|
|
||||||
|
# ── Jellyfin media server ───────────────────────────────────────────────
|
||||||
|
jellyfin # Media server (TV, movies, music)
|
||||||
|
jellyfin-ffmpeg # Jellyfin's patched FFmpeg with hardware encoding
|
||||||
|
jellyfin-web # Web UI
|
||||||
|
# Hardware acceleration (common for ARM64 media)
|
||||||
|
openssl # Already present; TLS for jellyfin
|
||||||
];
|
];
|
||||||
|
|
||||||
# ── Performance tuning for 64GB RAM / 18 cores ────────────────────────────
|
# ── Performance tuning for 64GB RAM / 18 cores ────────────────────────────
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,11 @@
|
||||||
portaudio # Cross-platform audio I/O
|
portaudio # Cross-platform audio I/O
|
||||||
libsndfile # Audio file I/O
|
libsndfile # Audio file I/O
|
||||||
alsa-lib # ALSA audio library
|
alsa-lib # ALSA audio library
|
||||||
|
|
||||||
|
# ── Jellyfin media server ─────────────────────────────────────────
|
||||||
|
jellyfin # Media server
|
||||||
|
jellyfin-ffmpeg # Jellyfin's patched FFmpeg (VA-API, QSV, OCL support)
|
||||||
|
jellyfin-web # Web UI
|
||||||
];
|
];
|
||||||
|
|
||||||
# ── Python packages (full science stack) ──────────────────────────────
|
# ── Python packages (full science stack) ──────────────────────────────
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue