influx to docker

This commit is contained in:
soraefir
2026-06-05 21:42:46 +02:00
parent 126f2f0c69
commit 87d648485e
2 changed files with 30 additions and 60 deletions

View File

@@ -22,22 +22,25 @@ in {
}];
containers = {
# db = builder.mkContainer {
# subdomain = containerCfg.subdomain;
# image = "influxdata/influxdb:3.0";
# port = 8181;
# secret = name;
# extraEnv = {
# INFLUXD_DB_PATH = "/db";
# INFLUXD_CONFIG_PATH = "/config";
# };
# overrides = {
# volumes = [
# "${serverCfg.path.data}/influxdb:/db:rw"
# "${serverCfg.path.config}/influxdb:/config:ro"
# ];
# };
# };
db = builder.mkContainer {
subdomain = containerCfg.subdomain;
image = "influxdb:3-core";
port = 8181;
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:/var/lib/influxdb3/data:rw"
"${serverCfg.path.config}/influxdb/config/admin-token.json:/var/lib/influxdb3/token.json:ro"
];
};
};
server = builder.mkContainer {
tmpfs = true;
@@ -47,10 +50,9 @@ in {
secret = name;
extraEnv = {
DATABASE_URL = "/db/sqlite.db";
DEFAULT_INFLUX_SERVER = "http://${builder.host}:8181";
DEFAULT_INFLUX_SERVER = "http://influx-db:8181";
};
overrides = {
ports = [ "8888:8080" ];
cmd = [ "--mode=admin" ];
volumes = [
"${serverCfg.path.data}/influxdb:/db:rw"
@@ -71,7 +73,16 @@ in {
"DEFAULT_SERVER_NAME": "${serverCfg.domain}"
}
EOF
chmod -R 755 ${serverCfg.path.config}/influxdb
cat > ${serverCfg.path.config}/influxdb/config/admin-token.json <<EOF
{
"token": "$INFLUXDB_TOKEN",
"name": "admin",
"description": "Admin token for automated deployment"
}
EOF
chmod -R 755 ${serverCfg.path.config}/influxdb
'';
};
};

View File

@@ -5,23 +5,7 @@ let
listNames = config.syscfg.server.db;
containerNames = lib.concatMap (app: app.requires.databases) (builtins.attrValues config.syscfg.server.loadedContainers);
allApps = lib.unique (listNames ++ containerNames);
influxAdminTokenJson = pkgs.writeShellScript "influxdb3-admin-token-json" ''
set -eu
token="''${INFLUXDB_TOKEN-''${INFLUXDB_TOKEN-}}"
if [ -z "$token" ]; then
echo "Missing INFLUXDB_TOKEN or INFLUXDB_TOKEN in ${config.sops.secrets."INFLUX".path}" >&2
exit 1
fi
cat > "$RUNTIME_DIRECTORY/admin-token.json" <<EOF
{
"token": "$token",
"name": "admin",
"description": "Admin token for automated deployment"
}
EOF
'';
in {
config = lib.mkIf ( builtins.length allApps > 0) {
services.postgresql = {
@@ -56,31 +40,6 @@ in {
bind = "*";
settings.protected-mode = "no";
};
systemd.services.influxdb3 = {
description = "InfluxDB 3 Time Series Database Engine";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
environment = {
INFLUXDB3_NODE_IDENTIFIER_PREFIX = "node0";
INFLUXDB3_OBJECT_STORE = "file";
INFLUXDB3_DATA_DIR = "${config.syscfg.server.path.data}/influxdb";
INFLUXDB3_DB_DIR = "${config.syscfg.server.path.data}/influxdb";
INFLUXDB3_ENABLE_INTERNAL_DB = "true";
};
serviceConfig = {
Type = "simple";
EnvironmentFile = config.sops.secrets."INFLUX".path;
RuntimeDirectory = "influxdb3";
ExecStartPre = influxAdminTokenJson;
ExecStart = "${pkgs.influxdb3}/bin/influxdb3 serve --admin-token-file=%t/influxdb3/admin-token.json";
Restart = "on-failure";
StateDirectory = "influxdb3";
PrivateTmp = true;
NoNewPrivileges = true;
};
};
systemd.services.postgresql-init = {
description = "Custom Postgres Setup (Ownership & Passwords)";