nixos-configs/configurations/cluster/modules/caddy.nix

175 lines
4.9 KiB
Nix
Raw Normal View History

2023-11-29 22:15:31 -05:00
{
caddy-plugins,
config,
mainUser,
pkgs,
2023-11-29 22:15:31 -05:00
...
}: let
inherit (config.sops) secrets;
inherit (config.networking) hostName;
2023-11-29 22:15:31 -05:00
caddy = caddy-plugins.packages.${pkgs.system}.default;
in {
imports = [caddy-plugins.nixosModules.default];
# User stuff
2023-11-29 22:15:31 -05:00
environment.systemPackages = [caddy];
users.users.${mainUser}.extraGroups = ["caddy"];
2023-11-29 22:15:31 -05:00
boot.kernel.sysctl."net.ipv4.ip_nonlocal_bind" = 1;
2024-10-28 09:23:47 -04:00
systemd.services.caddy.serviceConfig = {
EnvironmentFile = secrets.caddy-cloudflare.path;
2024-10-28 09:23:47 -04:00
# For some reason the service
# doesn't shutdown normally
KillSignal = "SIGKILL";
RestartKillSignal = "SIGKILL";
};
2023-11-29 22:15:31 -05:00
services.caddy = {
enable = true;
enableReload = false;
package = caddy;
virtualHosts = let
2024-03-02 02:59:40 -05:00
clusterIP = config.services.pcsd.virtualIps.caddy-vip.ip;
nosIP = "10.0.0.121";
serviviIP = "10.0.0.249";
2024-09-01 19:19:30 -04:00
homieIP = "100.64.0.10";
tlsConf = ''
tls {
dns cloudflare {$CLOUDFLARE_API_TOKEN}
resolvers 1.0.0.1
}
'';
mkPublicReverseProxy = subdomain: ip: extraConf:
{
hostName = "${subdomain}.nelim.org";
reverseProxy = ip;
listenAddresses = [clusterIP];
extraConfig = tlsConf + (extraConf.extraConfig or "");
}
// (builtins.removeAttrs extraConf ["extraConfig"]);
in {
# Public
2024-09-01 19:19:30 -04:00
"Home-Assistant" = mkPublicReverseProxy "homie" "${homieIP}:8123" {};
"Vaultwarden" = mkPublicReverseProxy "vault" "${nosIP}:8781" {};
"Hauk" = mkPublicReverseProxy "hauk" "${nosIP}:3003" {};
"Headscale" = mkPublicReverseProxy "headscale" "${clusterIP}:8085" {};
"Jellyfin" = mkPublicReverseProxy "jelly" "${nosIP}:8096" {
subDirectories.jfa-go = {
subDirName = "accounts";
reverseProxy = "${nosIP}:8056";
};
};
"Jellyseer" = mkPublicReverseProxy "seerr" "${nosIP}:5055" {};
"Gameyfin" = mkPublicReverseProxy "games" "${nosIP}:8074" {};
"Forgejo" = mkPublicReverseProxy "git" "${nosIP}:3000" {};
"Nextcloud" = mkPublicReverseProxy "cloud" "${nosIP}:8042" {
2023-11-29 22:15:31 -05:00
extraConfig = ''
redir /.well-known/carddav /remote.php/dav 301
redir /.well-known/caldav /remote.php/dav 301
redir /.well-known/webfinger /index.php/.well-known/webfinger 301
redir /.well-known/nodeinfo /index.php/.well-known/nodeinfo 301
2023-11-29 22:15:31 -05:00
'';
};
"OnlyOffice" = mkPublicReverseProxy "office" "http://${nosIP}:8055" {};
2023-11-29 22:15:31 -05:00
"Immich" = mkPublicReverseProxy "photos" "${nosIP}:2283" {};
2024-08-30 12:30:35 -04:00
"Binary Cache" = mkPublicReverseProxy "cache" "${serviviIP}:5000" {};
2024-12-11 12:29:24 -05:00
"Apt Binary Cache" = mkPublicReverseProxy "cache-apt" "${homieIP}:5000" {};
2024-08-30 12:30:35 -04:00
# Private
"nelim.org" = {
serverAliases = ["*.nelim.org"];
extraConfig = tlsConf;
listenAddresses = [
(
if hostName == "thingone"
then "100.64.0.8"
else "100.64.0.9"
)
];
subDomains = {
esphome.reverseProxy = "${homieIP}:6052";
pr-tracker.reverseProxy = "${serviviIP}:3000";
2023-11-29 22:15:31 -05:00
2024-03-10 20:04:04 -04:00
pcsd = {
extraConfig = ''
reverse_proxy https://${clusterIP}:2224 {
transport http {
tls_insecure_skip_verify
}
}
'';
};
# Resume builder
resume.reverseProxy = "${nosIP}:3060";
resauth.reverseProxy = "${nosIP}:3100";
2023-11-29 22:15:31 -05:00
# FreshRSS & Co
bridge.reverseProxy = "${nosIP}:3006";
2024-03-02 02:59:40 -05:00
drss.reverseProxy = "${nosIP}:3007";
2023-11-29 22:15:31 -05:00
freshrss = {
subDomainName = "rss";
2024-03-02 02:59:40 -05:00
reverseProxy = "${nosIP}:2800";
2023-11-29 22:15:31 -05:00
};
2024-03-02 02:59:40 -05:00
wgui.reverseProxy = "${nosIP}:51821";
2023-11-29 22:15:31 -05:00
lan = {
2024-03-02 02:59:40 -05:00
reverseProxy = "${nosIP}:3020";
2023-11-29 22:15:31 -05:00
extraConfig = ''
redir /index.html /
'';
subDirectories = {
2024-03-02 02:59:40 -05:00
bazarr.reverseProxy = "${nosIP}:6767";
prowlarr.reverseProxy = "${nosIP}:9696";
radarr.reverseProxy = "${nosIP}:7878";
sabnzbd.reverseProxy = "${nosIP}:8382";
sonarr.reverseProxy = "${nosIP}:8989";
2023-11-29 22:15:31 -05:00
qbittorent = {
subDirName = "qbt";
experimental = true;
2024-03-02 02:59:40 -05:00
reverseProxy = "${nosIP}:8080";
2023-11-29 22:15:31 -05:00
};
vaultwarden = {
subDirName = "vault";
experimental = true;
2024-03-02 02:59:40 -05:00
reverseProxy = "${nosIP}:8780";
2023-11-29 22:15:31 -05:00
};
};
};
# Top secret Business
joal.extraConfig = ''
route {
rewrite * /joal/ui{uri}
2024-03-02 02:59:40 -05:00
reverse_proxy * ${nosIP}:5656
2023-11-29 22:15:31 -05:00
}
'';
joalws.extraConfig = ''
route {
2024-03-02 02:59:40 -05:00
reverse_proxy ${nosIP}:5656
2023-11-29 22:15:31 -05:00
}
'';
};
};
};
};
}