80 lines
2.0 KiB
Nix
80 lines
2.0 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
serviceName = "netbox";
|
|
servicePort = config.m3ta.ports.get serviceName;
|
|
staticPort = config.m3ta.ports.get "netbox-static";
|
|
hostName = "nb.l.az-gruppe.com";
|
|
staticRoot = "${config.services.netbox.dataDir}/static";
|
|
in {
|
|
services.netbox = {
|
|
enable = true;
|
|
package = pkgs.unstable.netbox;
|
|
listenAddress = "127.0.0.1";
|
|
port = servicePort;
|
|
secretKeyFile = config.age.secrets.netbox-secret-key.path;
|
|
apiTokenPeppersFile = config.age.secrets.netbox-api-token-pepper.path;
|
|
|
|
settings = {
|
|
ALLOWED_HOSTS = [hostName "localhost" "127.0.0.1"];
|
|
SECURE_SSL_REDIRECT = true;
|
|
SESSION_COOKIE_SECURE = true;
|
|
CSRF_COOKIE_SECURE = true;
|
|
};
|
|
|
|
extraConfig = ''
|
|
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
|
'';
|
|
};
|
|
|
|
services.nginx = {
|
|
enable = true;
|
|
virtualHosts.netbox-static = {
|
|
listen = [
|
|
{
|
|
addr = "127.0.0.1";
|
|
port = staticPort;
|
|
}
|
|
];
|
|
locations."/static/" = {
|
|
alias = "${staticRoot}/";
|
|
extraConfig = ''
|
|
expires 1h;
|
|
access_log off;
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
users.users.nginx.extraGroups = ["netbox"];
|
|
|
|
# Traefik-Routing: zwei Backends (App + Static), ein Host
|
|
services.traefik.dynamicConfigOptions.http = {
|
|
services = {
|
|
${serviceName}.loadBalancer.servers = [
|
|
{url = "http://127.0.0.1:${toString servicePort}/";}
|
|
];
|
|
"${serviceName}-static".loadBalancer.servers = [
|
|
{url = "http://127.0.0.1:${toString staticPort}/";}
|
|
];
|
|
};
|
|
|
|
routers = {
|
|
${serviceName} = {
|
|
rule = "Host(`${hostName}`) && !PathPrefix(`/static`)";
|
|
tls.certResolver = "ionos";
|
|
service = serviceName;
|
|
entrypoints = "websecure";
|
|
};
|
|
"${serviceName}-static" = {
|
|
rule = "Host(`${hostName}`) && PathPrefix(`/static`)";
|
|
tls.certResolver = "ionos";
|
|
service = "${serviceName}-static";
|
|
entrypoints = "websecure";
|
|
};
|
|
};
|
|
};
|
|
}
|