nix/hosts/nixos/vps/proxy.nix
2025-11-22 10:30:33 +01:00

143 lines
3.1 KiB
Nix

{ config, ... }:
{
# Traefik dynamic configuration for vps host
services.traefik.dynamicConfigOptions = {
http = {
routers = {
# Photo service (Immich)
photo = {
rule = "Host(`photo.yanlincs.com`)";
service = "photo";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.yanlincs.com";
}];
};
};
# Jellyfin Media Server
jellyfin = {
rule = "Host(`jellyfin.yanlincs.com`)";
service = "jellyfin";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.yanlincs.com";
}];
};
};
# qBittorrent torrent client
qbit = {
rule = "Host(`qbit.yanlincs.com`)";
service = "qbit";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.yanlincs.com";
}];
};
};
# Dufs file server
files = {
rule = "Host(`files.yanlincs.com`)";
service = "files";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.yanlincs.com";
}];
};
};
# Linkding bookmark manager
link = {
rule = "Host(`link.yanlincs.com`)";
service = "link";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.yanlincs.com";
}];
};
};
# Navidrome music server
music = {
rule = "Host(`music.yanlincs.com`)";
service = "music";
tls = {
certResolver = "cloudflare";
domains = [{
main = "*.yanlincs.com";
}];
};
};
};
services = {
# Photo service backend (via WireGuard)
photo = {
loadBalancer = {
servers = [{
url = "http://10.2.2.20:5000";
}];
};
};
# Jellyfin backend (via WireGuard)
jellyfin = {
loadBalancer = {
servers = [{
url = "http://10.2.2.20:5002";
}];
};
};
# qBittorrent backend (via WireGuard)
qbit = {
loadBalancer = {
servers = [{
url = "http://10.2.2.20:8080";
}];
};
};
# Dufs backend (via WireGuard)
files = {
loadBalancer = {
servers = [{
url = "http://10.2.2.20:5099";
}];
};
};
# Linkding backend (via WireGuard)
link = {
loadBalancer = {
servers = [{
url = "http://10.2.2.20:5009";
}];
};
};
# Navidrome backend (via WireGuard)
music = {
loadBalancer = {
servers = [{
url = "http://10.2.2.20:5005";
}];
};
};
};
};
};
}