public jellyfin

+43 -3
hosts/elephant/services.nix
···
{
custom.nix-cache.enable = true;
-
age.secrets."eon-vpn.freumh.org.cap" = {
-
file = ../../secrets/eon-vpn.freumh.org.cap.age;
mode = "770";
owner = "acme-eon";
group = "acme-eon";
···
security.acme-eon = {
acceptTerms = true;
defaults.email = "${config.custom.username}@${config.networking.domain}";
-
defaults.capFile = config.age.secrets."eon-vpn.freumh.org.cap".path;
nginxCerts = [
"nix-cache.vpn.freumh.org"
"jellyfin.vpn.freumh.org"
"transmission.vpn.freumh.org"
"nextcloud.vpn.freumh.org"
"owntracks.vpn.freumh.org"
···
onlySSL = true;
listenAddresses = [ "100.64.0.9" ];
locations."/" = {
proxyPass = ''
http://localhost:8096
'';
···
openFirewall = true;
host = "100.64.0.9";
mediaLocation = "/tank/immich";
};
}
···
{
custom.nix-cache.enable = true;
+
age.secrets."eon-freumh.org.cap" = {
+
file = ../../secrets/eon-freumh.org.cap.age;
mode = "770";
owner = "acme-eon";
group = "acme-eon";
···
security.acme-eon = {
acceptTerms = true;
defaults.email = "${config.custom.username}@${config.networking.domain}";
+
defaults.capFile = config.age.secrets."eon-freumh.org.cap".path;
nginxCerts = [
"nix-cache.vpn.freumh.org"
"jellyfin.vpn.freumh.org"
+
"jellyfin.freumh.org"
"transmission.vpn.freumh.org"
"nextcloud.vpn.freumh.org"
"owntracks.vpn.freumh.org"
···
onlySSL = true;
listenAddresses = [ "100.64.0.9" ];
locations."/" = {
+
proxyPass = ''
+
http://localhost:8096
+
'';
+
proxyWebsockets = true;
+
};
+
};
+
"jellyfin.freumh.org" = {
+
onlySSL = true;
+
locations."/" = {
+
recommendedProxySettings = true;
proxyPass = ''
http://localhost:8096
'';
···
openFirewall = true;
host = "100.64.0.9";
mediaLocation = "/tank/immich";
+
};
+
+
services.fail2ban = {
+
enable = true;
+
bantime = "24h";
+
bantime-increment = {
+
enable = true;
+
multipliers = "1 2 4 8 16 32 64";
+
maxtime = "168h";
+
overalljails = true;
+
};
+
jails."jellyfin".settings = {
+
backend = "auto";
+
port = "80,443";
+
protocol = "tcp";
+
filter = "jellyfin";
+
maxRetry = 3;
+
bantime = "86400";
+
findTime = "43200";
+
logPath = "/var/lib/jellyfin/log/*.log";
+
};
+
};
+
environment.etc = {
+
"fail2ban/filter.d/jellyfin.local".text = pkgs.lib.mkDefault (
+
pkgs.lib.mkAfter ''
+
[Definition]
+
failregex = ^.*Authentication request for .* has been denied \(IP: "<ADDR>"\)\.
+
''
+
);
};
}
+7
hosts/owl/default.nix
···
type = "CNAME";
value = "fn06.org.";
}
];
};
};
···
type = "CNAME";
value = "fn06.org.";
}
+
+
{
+
name = "jellyfin.${config.networking.domain}.";
+
type = "A";
+
# TODO dynamic update
+
value = "86.188.33.97";
+
}
];
};
};
+9
secrets/eon-freumh.org.cap.age
···
···
+
age-encryption.org/v1
+
-> ssh-ed25519 2wDnOw 8i6ugC0nU4RD64L6fug7Hyv2WSoc1zwOTrEOwNNipRg
+
z5gIWRaBHzI5olr2njsY6A0v6Ho+n/OBuo+mRjhAe/4
+
-> ssh-ed25519 hFxbYA CCgzTnyIvNkl2+Y8Dn4Tg2LZvEIYZBYGqsjRfwP47Cg
+
+SOkoh/AFMVZMMusXLu30Hi+IEA+b0hLetQznRcwsxY
+
-> ssh-ed25519 suwb0g /W+mvbXhymbq+p2YGujdVU5ubJKuFa5w0zfzw9dvuT4
+
Nb3YXUHlqsoL/8zkgxAQUmv1hA5Gt+Wxz4EtkbqfQrY
+
--- wXVnE9m9+5Cp930toZvlbh+/ELxyIx5zTGEmy5geN9w
+
��qT^�fƔ�W�����/Y��'�.�a�ބ}&��HUZ���ݿ�#y�<���4O �*����Z$6L5Z9-"軾�Ls����j�Ա��vOc�}��&�$�,�T&u7Z�55>g��rI�nv�odC�t��*Κ���͐�����u"�
-8
secrets/eon-vpn.freumh.org.cap.age
···
-
age-encryption.org/v1
-
-> ssh-ed25519 2wDnOw km9DxOjSHC/qjKTjQ4tLa4FQ71HZu+e44BAqcnvdon8
-
2IPauPpl5Rdc2ab7kiFa2Dw3Wo4uyNbJvgtNpdzRQos
-
-> ssh-ed25519 hFxbYA fSaGdqdM9Kv3RuEy/B2eqb1FwFMwxZsl9jM/5lXZxQI
-
jhu22pyF2kAhlt0ix9Tcjo2ddWSct4AOb2nIYYYqBjo
-
--- p+RhBa8i2Z8+hhdOfvMdzuUuQIPd50eMatMGk7PbiPg
-
�>(�:b}%�:�Z� _��k�n�w#�m2�U�X�s�ci&}���t�0�'qy�`b�/t�v LeX�J��~�B�M�ȹ��ʘc�c/�1��U*y<j� ̟~� �V�u���G
-
)� xU��jZ��ܺptsE��.��"z��
···
+4 -1
secrets/secrets.nix
···
"nextcloud.age".publicKeys = user ++ [ elephant ];
"headscale.age".publicKeys = user ++ [ owl ];
"eon-capnp.age".publicKeys = user ++ [ owl ];
-
"eon-vpn.freumh.org.cap.age".publicKeys = user ++ [ elephant ];
"eon-sirref-primary.cap.age".publicKeys = user ++ [ owl ];
}
···
"nextcloud.age".publicKeys = user ++ [ elephant ];
"headscale.age".publicKeys = user ++ [ owl ];
"eon-capnp.age".publicKeys = user ++ [ owl ];
+
"eon-freumh.org.cap.age".publicKeys = user ++ [
+
elephant
+
owl
+
];
"eon-sirref-primary.cap.age".publicKeys = user ++ [ owl ];
}