switch to native nix-based media servers
This commit is contained in:
parent
68a56c55d2
commit
d36c537dc8
4 changed files with 86 additions and 89 deletions
|
|
@ -98,43 +98,6 @@ in
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Jellyfin media server
|
|
||||||
jellyfin = {
|
|
||||||
image = "docker.io/linuxserver/jellyfin:latest";
|
|
||||||
|
|
||||||
volumes = [
|
|
||||||
"/var/lib/containers/config/jellyfin:/config"
|
|
||||||
"/mnt/storage/Media:/data"
|
|
||||||
];
|
|
||||||
|
|
||||||
labels = {
|
|
||||||
"traefik.enable" = "true";
|
|
||||||
"traefik.http.routers.jellyfin.rule" = "Host(`jellyfin.${config.networking.hostName}.yanlincs.com`)";
|
|
||||||
"traefik.http.routers.jellyfin.entrypoints" = "websecure";
|
|
||||||
"traefik.http.routers.jellyfin.tls" = "true";
|
|
||||||
"traefik.http.routers.jellyfin.tls.certresolver" = "cloudflare";
|
|
||||||
"traefik.http.routers.jellyfin.tls.domains[0].main" = "*.${config.networking.hostName}.yanlincs.com";
|
|
||||||
"traefik.http.services.jellyfin.loadbalancer.server.port" = "8096";
|
|
||||||
};
|
|
||||||
|
|
||||||
environment = {
|
|
||||||
PUID = commonUID;
|
|
||||||
PGID = commonGID;
|
|
||||||
TZ = systemTZ;
|
|
||||||
};
|
|
||||||
|
|
||||||
ports = [
|
|
||||||
"5002:8096"
|
|
||||||
];
|
|
||||||
|
|
||||||
extraOptions = [
|
|
||||||
"--network=podman"
|
|
||||||
"--device=/dev/dri:/dev/dri" # Hardware acceleration
|
|
||||||
];
|
|
||||||
|
|
||||||
autoStart = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# qBittorrent torrent client
|
# qBittorrent torrent client
|
||||||
qbittorrent = {
|
qbittorrent = {
|
||||||
image = "docker.io/linuxserver/qbittorrent:4.6.7";
|
image = "docker.io/linuxserver/qbittorrent:4.6.7";
|
||||||
|
|
@ -183,57 +146,5 @@ in
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Sonarr TV show management
|
|
||||||
sonarr = {
|
|
||||||
image = "docker.io/linuxserver/sonarr:latest";
|
|
||||||
|
|
||||||
volumes = [
|
|
||||||
"/var/lib/containers/config/sonarr:/config"
|
|
||||||
"/mnt/storage/Media:/data"
|
|
||||||
];
|
|
||||||
|
|
||||||
environment = {
|
|
||||||
PUID = commonUID;
|
|
||||||
PGID = commonGID;
|
|
||||||
TZ = systemTZ;
|
|
||||||
};
|
|
||||||
|
|
||||||
ports = [
|
|
||||||
"5003:8989"
|
|
||||||
];
|
|
||||||
|
|
||||||
extraOptions = [
|
|
||||||
"--network=podman"
|
|
||||||
];
|
|
||||||
|
|
||||||
autoStart = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Radarr movie management
|
|
||||||
radarr = {
|
|
||||||
image = "docker.io/linuxserver/radarr:latest";
|
|
||||||
|
|
||||||
volumes = [
|
|
||||||
"/var/lib/containers/config/radarr:/config"
|
|
||||||
"/mnt/storage/Media:/data"
|
|
||||||
];
|
|
||||||
|
|
||||||
environment = {
|
|
||||||
PUID = commonUID;
|
|
||||||
PGID = commonGID;
|
|
||||||
TZ = systemTZ;
|
|
||||||
};
|
|
||||||
|
|
||||||
ports = [
|
|
||||||
"5004:7878"
|
|
||||||
];
|
|
||||||
|
|
||||||
extraOptions = [
|
|
||||||
"--network=podman"
|
|
||||||
];
|
|
||||||
|
|
||||||
autoStart = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,17 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
jellyfin = {
|
||||||
|
rule = "Host(`jellyfin.${config.networking.hostName}.yanlincs.com`)";
|
||||||
|
service = "jellyfin";
|
||||||
|
tls = {
|
||||||
|
certResolver = "cloudflare";
|
||||||
|
domains = [{
|
||||||
|
main = "*.${config.networking.hostName}.yanlincs.com";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
|
|
@ -27,6 +38,14 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
jellyfin = {
|
||||||
|
loadBalancer = {
|
||||||
|
servers = [{
|
||||||
|
url = "http://127.0.0.1:8096";
|
||||||
|
}];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
../../../modules/borg/client.nix
|
../../../modules/borg/client.nix
|
||||||
../../../modules/login-display.nix
|
../../../modules/login-display.nix
|
||||||
../../../modules/samba.nix
|
../../../modules/samba.nix
|
||||||
|
../../../modules/media-server.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# Automatic container updates
|
# Automatic container updates
|
||||||
|
|
@ -274,4 +275,13 @@
|
||||||
user = "yanlin";
|
user = "yanlin";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Media server services
|
||||||
|
services.media-server = {
|
||||||
|
user = "yanlin";
|
||||||
|
sonarr.enable = true;
|
||||||
|
radarr.enable = true;
|
||||||
|
jellyfin.enable = true;
|
||||||
|
deluge.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
57
modules/media-server.nix
Normal file
57
modules/media-server.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.media-server;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.services.media-server = {
|
||||||
|
user = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "media";
|
||||||
|
description = "User to run media services";
|
||||||
|
};
|
||||||
|
|
||||||
|
group = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "users";
|
||||||
|
description = "Group for media services";
|
||||||
|
};
|
||||||
|
|
||||||
|
sonarr.enable = lib.mkEnableOption "Sonarr TV show management"; # port 8989
|
||||||
|
radarr.enable = lib.mkEnableOption "Radarr movie management"; # port 7878
|
||||||
|
jellyfin.enable = lib.mkEnableOption "Jellyfin media server"; # port 8096
|
||||||
|
deluge.enable = lib.mkEnableOption "Deluge torrent client"; # web port 8112
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
|
services.sonarr = lib.mkIf cfg.sonarr.enable {
|
||||||
|
enable = true;
|
||||||
|
user = cfg.user;
|
||||||
|
group = cfg.group;
|
||||||
|
openFirewall = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.radarr = lib.mkIf cfg.radarr.enable {
|
||||||
|
enable = true;
|
||||||
|
user = cfg.user;
|
||||||
|
group = cfg.group;
|
||||||
|
openFirewall = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.jellyfin = lib.mkIf cfg.jellyfin.enable {
|
||||||
|
enable = true;
|
||||||
|
user = cfg.user;
|
||||||
|
group = cfg.group;
|
||||||
|
openFirewall = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.deluge = lib.mkIf cfg.deluge.enable {
|
||||||
|
enable = true;
|
||||||
|
user = cfg.user;
|
||||||
|
group = cfg.group;
|
||||||
|
openFirewall = false;
|
||||||
|
web.enable = true;
|
||||||
|
web.openFirewall = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue