Files
process-compose-wrapper/services/redis.nix
2025-03-17 17:15:26 +04:00

74 lines
1.8 KiB
Nix

{
pkgs,
}:
let
inherit (pkgs) lib;
in
{
name,
default_config ? true,
extra_config ? '''',
package ? pkgs.redis,
port ? 6379,
bind ? "localhost",
...
}:
let
generateRedisConfig = ''
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-redis";
text = ''
set -euo pipefail
REDISDATA="$RUNTIME_PATH"/${name}/
${
if (port == 0) then
''
REDIS_UNIX_SOCKET = "$RUNTIME_PATH"/${name}.sock
export REDIS_UNIX_SOCKET
echo "Starting redis on unix socket ''${REDIS_UNIX_SOCKET}"
''
else
''
echo "Starting redis on port ${builtins.toString port}"
''
}
export REDISDATA
if [ ! -d $REDISDATA ]; then
mkdir -p $REDISDATA
fi
${generateRedisConfig}
${package}/bin/redis-server "$RUNTIME_PATH"/${name}.conf --daemonize no --dir "$REDISDATA"
'';
};
tcpPing = "${package}/bin/redis-cli -p ${builtins.toString port} ping";
unixPing = "${package}/bin/redis-cli -s \"$RUNTIME_PATH\"/${name}.sock ping";
in
{
processes."${name}" = {
command = "${script}/bin/run-redis";
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";
};
}