Files
nixconfig/modules/server/containers/apps/influx.nix
2026-06-05 22:31:03 +02:00

89 lines
2.3 KiB
Nix

{ config, containerCfg, pkgs, lib, builder, name, ... }:
let
serverCfg = config.syscfg.server;
version = "latest";
in {
requires = {
secrets = [ name ];
databases = [ name ];
};
runtime = {
paths = [{
path = "${serverCfg.path.config}/influxdb/";
owner = "1500:1500";
mode = "0755";
}{
path = "${serverCfg.path.data}/influxdb/";
dirs = ["data" "ui"];
owner = "1500:1500";
mode = "0755";
}];
containers = {
db = builder.mkContainer {
image = "influxdb:3-core";
secret = name;
extraEnv = {
INFLUXD_DB_PATH = "/db";
INFLUXD_CONFIG_PATH = "/config";
};
overrides = {
cmd = [ "influxdb3" "serve" "--node-id=node0" "--data-dir=/var/lib/influxdb3/data" "--admin-token-file=/var/lib/influxdb3/token.json" ];
ports = [ "8181:8181" ];
volumes = [
"${serverCfg.path.data}/influxdb/data:/var/lib/influxdb3/data:rw"
"${serverCfg.path.config}/influxdb/admin-token.json:/var/lib/influxdb3/token.json:ro"
];
};
};
ui = builder.mkContainer {
tmpfs = true;
# authentik = true;
subdomain = containerCfg.subdomain;
image = "influxdata/influxdb3-ui:${version}";
port = 8888;
secret = name;
extraEnv = {
DATABASE_URL = "/db/sqlite.db";
DEFAULT_INFLUX_SERVER = "http://${builder.host}:8181";
};
overrides = {
cmd = [ "--mode=admin" ];
volumes = [
"${serverCfg.path.data}/influxdb/ui:/db:rw"
"${serverCfg.path.config}/influxdb/:/app-root/config:rw"
];
};
};
};
setup = {
trigger = "server";
envFile = config.sops.secrets."INFLUX".path;
script = pkgs.writeShellScript "setup" ''
cat > ${serverCfg.path.config}/influxdb/config.json << EOF
{
"DEFAULT_INFLUX_SERVER": "http://${builder.host}:8181",
"DEFAULT_INFLUX_DATABASE": "main",
"DEFAULT_API_TOKEN": "$INFLUXDB_TOKEN",
"DEFAULT_SERVER_NAME": "${serverCfg.domain}"
}
EOF
cat > ${serverCfg.path.config}/influxdb/admin-token.json << EOF
{
"token": "$INFLUXDB_TOKEN",
"name": "admin",
"description": "Admin token for automated deployment"
}
EOF
'';
};
};
}