nixos/applications/grafana.nix

90 lines
1.6 KiB
Nix
Raw Normal View History

{
lib,
config,
...
}:
2024-05-21 01:23:10 +00:00
with lib; let
name = "grafana";
2024-05-21 02:02:37 +00:00
cfg = config.services.skynet."${name}";
port = 4444;
2024-05-21 01:23:10 +00:00
in {
imports = [
./acme.nix
./dns.nix
];
options.services.skynet."${name}" = {
2024-05-21 01:23:10 +00:00
enable = mkEnableOption "Grafana Server";
host = {
ip = mkOption {
type = types.str;
};
name = mkOption {
type = types.str;
};
};
datasource = {
name = mkOption {
type = types.str;
};
url = mkOption {
type = types.str;
};
};
2024-05-21 01:23:10 +00:00
};
config = mkIf cfg.enable {
2024-05-21 01:23:10 +00:00
skynet_dns.records = [
{
record = "${name}";
r_type = "CNAME";
value = cfg.host.name;
}
];
skynet_acme.domains = [
"${name}.skynet.ie"
];
2024-05-23 03:07:19 +00:00
age.secrets.grafana_pw = {
file = ../secrets/grafana/pw.age;
owner = "grafana";
group = "grafana";
};
2024-05-23 01:39:36 +00:00
services.grafana = {
enable = true;
2024-05-21 02:02:37 +00:00
domain = "${name}.skynet.ie";
2024-05-21 02:40:58 +00:00
port = port;
2024-05-23 01:39:36 +00:00
settings.security.admin_password = "$__file{${config.age.secrets.grafana_pw.path}}";
provision = {
enable = true;
datasources.settings.datasources = [
{
name = cfg.datasource.name;
type = "Prometheus";
url = cfg.datasource.url;
isDefault = true;
}
];
};
};
services.nginx.virtualHosts = {
"${name}.skynet.ie" = {
forceSSL = true;
useACMEHost = "skynet";
locations."/" = {
2024-05-21 02:40:58 +00:00
proxyPass = "http://localhost:${toString port}";
proxyWebsockets = true;
};
};
};
2024-05-21 01:23:10 +00:00
};
}