add valkey

This commit is contained in:
2025-05-13 18:01:28 +04:00
parent c0f01d143e
commit 948180a09c
2 changed files with 74 additions and 0 deletions

73
services/valkey.nix Normal file
View File

@@ -0,0 +1,73 @@
{
pkgs,
}:
let
inherit (pkgs) lib;
in
{
name,
default_config ? true,
extra_config ? '''',
package ? pkgs.valkey,
port ? 6379,
bind ? "localhost",
...
}:
let
generateValkeyConfig = ''
cat > "$RUNTIME_PATH"/${name}.conf <<EOF
${lib.optionalString default_config ''
port ${builtins.toString port}
${lib.optionalString (bind != null) "bind ${bind}"}
${lib.optionalString (port == 0) "unixsocket \"$RUNTIME_PATH/${name}.sock\""}
${lib.optionalString (port == 0) "unixsocketperm 700"}
''}
${extra_config}
EOF
'';
script = pkgs.writeShellApplication {
name = "run-valkey";
text = ''
set -euo pipefail
VALKEYDATA="$RUNTIME_PATH"/${name}/
${
if (port == 0) then
''
VALKEY_UNIX_SOCKET = "$RUNTIME_PATH"/${name}.sock
exportVALKEY_UNIX_SOCKET
echo "Starting valkey on unix socket ''${VALKEY_UNIX_SOCKET}"
''
else
''
echo "Starting valkey on port ${builtins.toString port}"
''
}
export VALKEYDATA
if [ ! -d "$VALKEYDATA" ]; then
mkdir -p "$VALKEYDATA"
fi
${generateValkeyConfig}
${package}/bin/valkey-server "$RUNTIME_PATH"/${name}.conf --daemonize no --dir "$VALKEYDATA"
'';
};
tcpPing = "${package}/bin/valkey-cli -p ${builtins.toString port} ping";
unixPing = "${package}/bin/valkey-cli -s \"$RUNTIME_PATH\"/${name}.sock ping";
in
{
processes."${name}" = {
command = "${script}/bin/run-valkey";
readiness_probe = {
exec.command = if port == 0 then unixPing else tcpPing;
initial_delay_seconds = 2;
period_seconds = 10;
timeout_seconds = 4;
success_threshold = 1;
failure_threshold = 3;
};
availability.restart = "on_failure";
};
}