Add dashboard support
This commit is contained in:
parent
fea90592fe
commit
0842bd53a2
|
@ -46,7 +46,7 @@ let
|
||||||
description = "The entrypoints that will serve the host";
|
description = "The entrypoints that will serve the host";
|
||||||
};
|
};
|
||||||
middlewares = mkOption {
|
middlewares = mkOption {
|
||||||
type = listOf jsonType;
|
type = listOf jsonValue;
|
||||||
default = [];
|
default = [];
|
||||||
description = "The middlewares to be used with the host.";
|
description = "The middlewares to be used with the host.";
|
||||||
};
|
};
|
||||||
|
|
40
modules/cloud/traefik/dashboard.nix
Normal file
40
modules/cloud/traefik/dashboard.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{ pkgs, config, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.cloud.traefik.dashboard;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.cloud.traefik.dashboard = {
|
||||||
|
enable = mkEnableOption "Enables the Traefik Dashboard";
|
||||||
|
usersFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = ''
|
||||||
|
The path to the users authentication file.
|
||||||
|
This is passed to the basicAuth middleware, see https://doc.traefik.io/traefik/middlewares/http/basicauth/
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
host = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "traefik.nkagami.me";
|
||||||
|
description = "The host to be used for the dashboard";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
# Enable it in the static config options.
|
||||||
|
services.traefik.staticConfigOptions.api.dashboard = true;
|
||||||
|
|
||||||
|
# Dynamic configuration
|
||||||
|
# ---------------------
|
||||||
|
## Middleware
|
||||||
|
services.traefik.dynamicConfigOptions.http.middlewares.dashboard-auth.basicAuth.usersFile = cfg.usersFile;
|
||||||
|
## Router
|
||||||
|
services.traefik.dynamicConfigOptions.http.routers.dashboard = {
|
||||||
|
rule = "Host(`${cfg.host}`)";
|
||||||
|
entryPoints = [ "https" ];
|
||||||
|
middlewares = [ "dashboard-auth" ];
|
||||||
|
service = "api@internal";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -21,7 +21,7 @@ let
|
||||||
cfg = config.cloud.traefik;
|
cfg = config.cloud.traefik;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ ./config.nix ];
|
imports = [ ./config.nix ./dashboard.nix ];
|
||||||
options.cloud.traefik = {
|
options.cloud.traefik = {
|
||||||
cloudflareKeyFile = mkOption {
|
cloudflareKeyFile = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
|
@ -58,10 +58,6 @@ in
|
||||||
accessLog = {};
|
accessLog = {};
|
||||||
log.level = "info";
|
log.level = "info";
|
||||||
|
|
||||||
# Dashboard
|
|
||||||
# ---------
|
|
||||||
api.dashboard = true;
|
|
||||||
|
|
||||||
# ACME Automatic SSL
|
# ACME Automatic SSL
|
||||||
# ------------------
|
# ------------------
|
||||||
certificatesResolvers.le.acme = {
|
certificatesResolvers.le.acme = {
|
||||||
|
|
|
@ -47,6 +47,11 @@
|
||||||
services.my-tinc.rsaPrivateKey = config.sops.secrets.tinc-private-key.path;
|
services.my-tinc.rsaPrivateKey = config.sops.secrets.tinc-private-key.path;
|
||||||
|
|
||||||
# Set up traefik
|
# Set up traefik
|
||||||
sops.secrets.cloudflare-dns-api-token = {};
|
sops.secrets.cloudflare-dns-api-token = { owner = "traefik"; };
|
||||||
|
sops.secrets.traefik-dashboard-users = { owner = "traefik"; };
|
||||||
cloud.traefik.cloudflareKeyFile = config.sops.secrets.cloudflare-dns-api-token.path;
|
cloud.traefik.cloudflareKeyFile = config.sops.secrets.cloudflare-dns-api-token.path;
|
||||||
|
cloud.traefik.dashboard = {
|
||||||
|
enable = true;
|
||||||
|
usersFile = config.sops.secrets.traefik-dashboard-users.path;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue