86 lines
2 KiB
Nix
86 lines
2 KiB
Nix
{
|
|
vars,
|
|
config,
|
|
pkgs,
|
|
inputs,
|
|
...
|
|
}: let
|
|
inherit (vars) domain;
|
|
hopper = "10.0.0.2";
|
|
in {
|
|
networking.firewall.allowedTCPPorts = [80 443];
|
|
|
|
security.acme = {
|
|
acceptTerms = true;
|
|
defaults.email = "xunuwu@gmail.com";
|
|
certs = {
|
|
"${domain}" = {
|
|
domain = "${domain}";
|
|
extraDomainNames = ["*.${domain}"];
|
|
dnsProvider = "cloudflare";
|
|
reloadServices = ["caddy.service"];
|
|
credentialFiles.CF_DNS_API_TOKEN_FILE = config.sops.secrets.cloudflare.path;
|
|
};
|
|
};
|
|
};
|
|
|
|
# systemd.services.caddy.environment.CADDY_ADMIN = "${vars.tailnet.rackserv}:2019";
|
|
services.caddy = {
|
|
enable = true;
|
|
globalConfig = ''
|
|
metrics {
|
|
per_host
|
|
}
|
|
admin :2019 {
|
|
origins 127.0.0.1 100.64.0.0/10
|
|
}
|
|
'';
|
|
virtualHosts = let
|
|
forgejoPort = toString config.services.forgejo.settings.server.HTTP_PORT;
|
|
in {
|
|
hopper = {
|
|
hostName = "";
|
|
serverAliases = [
|
|
"navidrome.${domain}"
|
|
"vw.${domain}"
|
|
"abs.${domain}"
|
|
"rss.${domain}"
|
|
];
|
|
useACMEHost = domain;
|
|
logFormat = "output file ${config.services.caddy.logDir}/access-hopper.log";
|
|
extraConfig = ''
|
|
reverse_proxy ${hopper}
|
|
'';
|
|
};
|
|
base = {
|
|
hostName = "${domain}";
|
|
useACMEHost = domain;
|
|
extraConfig = ''
|
|
root * ${inputs.own-website.packages.${pkgs.system}.default}
|
|
file_server
|
|
'';
|
|
};
|
|
forgejo = {
|
|
hostName = "git.${domain}";
|
|
useACMEHost = domain;
|
|
extraConfig = ''
|
|
respond /metrics 403
|
|
reverse_proxy localhost:${forgejoPort}
|
|
'';
|
|
};
|
|
forgejoMetrics = {
|
|
hostName = ":9615";
|
|
extraConfig = ''
|
|
@blocked {
|
|
not {
|
|
client_ip ${vars.tailnet.hopper}
|
|
path /metrics
|
|
}
|
|
}
|
|
respond @blocked 403
|
|
reverse_proxy localhost:${forgejoPort}
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|