Add media server stack

This commit is contained in:
Yan Lin 2025-09-07 04:01:02 +02:00
parent c95fa674c2
commit 7ee4c06988
2 changed files with 216 additions and 0 deletions

View file

@ -114,6 +114,137 @@
autoStart = true; autoStart = true;
}; };
# Plex Media Server
containers.plex = {
image = "docker.io/linuxserver/plex:latest";
volumes = [
"/home/yanlin/deploy/data/plex/config:/config"
"/mnt/storage/appbulk/plex-transcode:/transcode"
"/mnt/storage/Media:/data"
];
environment = {
PUID = "1000";
PGID = "100";
TZ = "Europe/Copenhagen";
VERSION = "docker";
};
ports = [
"32400:32400"
];
extraOptions = [
"--network=podman"
"--device=/dev/dri:/dev/dri" # Hardware acceleration
];
autoStart = true;
};
# Sonarr TV show management
containers.sonarr = {
image = "docker.io/linuxserver/sonarr:latest";
volumes = [
"/home/yanlin/deploy/data/sonarr/config:/config"
"/mnt/storage/Media:/data"
];
environment = {
PUID = "1000";
PGID = "100";
TZ = "Europe/Copenhagen";
};
ports = [
"8989:8989"
];
extraOptions = [
"--network=podman"
];
autoStart = true;
};
# Radarr movie management
containers.radarr = {
image = "docker.io/linuxserver/radarr:latest";
volumes = [
"/home/yanlin/deploy/data/radarr/config:/config"
"/mnt/storage/Media:/data"
];
environment = {
PUID = "1000";
PGID = "100";
TZ = "Europe/Copenhagen";
};
ports = [
"7878:7878"
];
extraOptions = [
"--network=podman"
];
autoStart = true;
};
# Bazarr subtitle management
containers.bazarr = {
image = "docker.io/linuxserver/bazarr:latest";
volumes = [
"/home/yanlin/deploy/data/bazarr/config:/config"
"/mnt/storage/Media:/data"
];
environment = {
PUID = "1000";
PGID = "100";
TZ = "Europe/Copenhagen";
};
ports = [
"6767:6767"
];
extraOptions = [
"--network=podman"
];
autoStart = true;
};
# qBittorrent torrent client with host networking
containers.qbittorrent = {
image = "docker.io/linuxserver/qbittorrent:4.6.7";
volumes = [
"/home/yanlin/deploy/data/qbit/config:/config"
"/mnt/storage/Media:/data"
];
environment = {
PUID = "1000";
PGID = "100";
TZ = "Europe/Copenhagen";
TORRENTING_PORT = "41234";
WEBUI_PORT = "8080";
};
extraOptions = [
"--network=host" # Use host networking as requested
];
autoStart = true;
};
}; };
}; };
} }

View file

@ -91,6 +91,56 @@
}]; }];
}; };
}; };
plex = {
rule = "Host(`plex.hs.yanlincs.com`)";
service = "plex";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.hs.yanlincs.com";
}];
};
};
sonarr = {
rule = "Host(`sonarr.hs.yanlincs.com`)";
service = "sonarr";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.hs.yanlincs.com";
}];
};
};
radarr = {
rule = "Host(`radarr.hs.yanlincs.com`)";
service = "radarr";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.hs.yanlincs.com";
}];
};
};
bazarr = {
rule = "Host(`bazarr.hs.yanlincs.com`)";
service = "bazarr";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.hs.yanlincs.com";
}];
};
};
qbittorrent = {
rule = "Host(`qbit.hs.yanlincs.com`)";
service = "qbittorrent";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.hs.yanlincs.com";
}];
};
};
}; };
services = { services = {
homeassistant = { homeassistant = {
@ -114,6 +164,41 @@
}]; }];
}; };
}; };
plex = {
loadBalancer = {
servers = [{
url = "http://localhost:32400";
}];
};
};
sonarr = {
loadBalancer = {
servers = [{
url = "http://localhost:8989";
}];
};
};
radarr = {
loadBalancer = {
servers = [{
url = "http://localhost:7878";
}];
};
};
bazarr = {
loadBalancer = {
servers = [{
url = "http://localhost:6767";
}];
};
};
qbittorrent = {
loadBalancer = {
servers = [{
url = "http://localhost:8080";
}];
};
};
}; };
}; };
}; };