80 lines
2.2 KiB
Nix
80 lines
2.2 KiB
Nix
{ authentikHost, ... }:
|
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
let
|
|
hostname = config.instance.hostname;
|
|
host = config.fudo.hosts."${hostname}";
|
|
domainName = host.domain;
|
|
zoneName = config.fudo.domains."${domainName}".zone;
|
|
isAuthentik = hostname == authentikHost;
|
|
authentikHostname = "authentik.${domainName}";
|
|
smtpPasswd = pkgs.lib.passwd.stablerandom-passwd-file "authentik-smtp-passwd"
|
|
config.instance.build-seed;
|
|
|
|
in {
|
|
config = {
|
|
fudo = {
|
|
system-users.authentik = {
|
|
description = "Aunthentik system user.";
|
|
ldap-hashed-password =
|
|
pkgs.lib.passwd.hash-ldap-passwd "authentik-smtp-passwd.hashed"
|
|
smtpPasswd;
|
|
};
|
|
zones."${zoneName}".aliases.authentik = authentikHost;
|
|
};
|
|
|
|
systemd.services.arion-authentik = {
|
|
requires = [ config.fudo.secrets.secret-target ];
|
|
after = [ config.fudo.secrets.secret-target ];
|
|
};
|
|
|
|
services = {
|
|
authentikContainer = mkIf isAuthentik {
|
|
enable = true;
|
|
images = {
|
|
authentik = "ghcr.io/goauthentik/server:2023.8.3";
|
|
postgres = "docker.io/library/postgres:12-alpine";
|
|
redis = "docker.io/library/redis:alpine";
|
|
};
|
|
smtp = {
|
|
host = "mail.fudo.org";
|
|
password-file = smtpPasswd;
|
|
};
|
|
};
|
|
|
|
nginx = mkIf isAuthentik {
|
|
enable = true;
|
|
recommendedOptimisation = true;
|
|
recommendedProxySettings = true;
|
|
virtualHosts = {
|
|
"${authentikHostname}" = {
|
|
enableACME = true;
|
|
forceSSL = true;
|
|
locations."/" = {
|
|
proxyPass = "http://localhost:${
|
|
toString config.services.authentikContainer.ports.http
|
|
}";
|
|
proxyWebsockets = true;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
security.acme.certs = mkIf isAuthentik (genAttrs [ authentikHostname ]
|
|
(domain: {
|
|
postRun = let
|
|
dst =
|
|
"${config.services.authentikContainer.state-directory}/certs/${domain}";
|
|
in ''
|
|
mkdir -p ${dst}
|
|
cp -v {cert,chain,fullchain,full,key}.pem ${dst}/
|
|
cp -v key.pem ${dst}/privkey.pem
|
|
chown -R authentik ${dst}
|
|
'';
|
|
}));
|
|
};
|
|
}
|