system/roles/redis-website.nix (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | {
config,
...
}:
let
domain = config.networking.domain;
in
{
age.secrets.redis-website.file = ../../secrets/redis-website.age;
networking.firewall.allowedTCPPorts = [ 6379 ];
services.redis = {
servers = {
website = {
enable = true;
port = 0;
bind = null;
databases = 2;
requirePassFile = config.age.secrets.redis-website.path;
settings = {
notify-keyspace-events = "KEA";
tls-port = 6379;
tls-cert-file = "/var/lib/acme/redis.${domain}/cert.pem";
tls-key-file = "/var/lib/acme/redis.${domain}/key.pem";
tls-ca-cert-file = "/etc/ssl/certs/ca-certificates.crt";
tls-auth-clients = false;
};
};
};
};
services.caddy.virtualHosts = {
"http://redis.${domain}" = {
extraConfig = ''
reverse_proxy /.well-known/acme-challenge/* {
to ${config.security.acme.certs."redis.${domain}".listenHTTP}
}
'';
};
};
security.acme.certs."redis.${domain}" = {
listenHTTP = "[::1]:1360";
group = "redis-website";
reloadServices = [ "redis-website" ];
};
}
|