blob: 1f57aa98cd2c99121a10887ec97f9ca8a2fefd69 (
plain) (
tree)
|
|
{ lib, config, pkgs, ... }:
let
cfg = config.myServices.databases.redis;
in {
options.myServices.databases.redis = {
enable = lib.mkOption {
default = false;
example = true;
description = "Whether to enable redis database";
type = lib.types.bool;
};
socketsDir = lib.mkOption {
type = lib.types.path;
default = "/run/redis";
description = ''
The directory where Redis puts sockets.
'';
};
# Output variables
sockets = lib.mkOption {
type = lib.types.attrsOf lib.types.path;
default = {
redis = "${cfg.socketsDir}/redis.sock";
};
readOnly = true;
description = ''
Redis sockets
'';
};
};
config = lib.mkIf cfg.enable {
users.users.redis.uid = config.ids.uids.redis;
users.groups.redis.gid = config.ids.gids.redis;
services.redis.servers."" = {
enable = true;
bind = "127.0.0.1";
unixSocket = cfg.sockets.redis;
unixSocketPerm = 777;
maxclients = 1024;
};
systemd.services.redis.serviceConfig.Slice = "redis.slice";
systemd.services.redis.serviceConfig.RuntimeDirectoryMode = lib.mkForce "0755";
services.redis.servers."php-sessions" = {
enable = true;
maxclients = 1024;
unixSocketPerm = 777;
user = "wwwrun";
};
services.spiped = {
enable = true;
config.redis = {
decrypt = true;
source = "0.0.0.0:16379";
target = "/run/redis/redis.sock";
keyfile = config.secrets.fullPaths."redis/spiped_keyfile";
};
};
systemd.services.spiped_redis = {
description = "Secure pipe 'redis'";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Slice = "redis.slice";
Restart = "always";
User = "spiped";
PermissionsStartOnly = true;
SupplementaryGroups = "keys";
};
script = "exec ${pkgs.spiped}/bin/spiped -F `cat /etc/spiped/redis.spec`";
};
#services.filesWatcher.predixy = {
# restart = true;
# paths = [ config.secrets.fullPaths."redis/predixy.conf" ];
#};
networking.firewall.allowedTCPPorts = [ 16379 ];
secrets.keys = {
#"redis/predixy.conf" = {
# user = "redis";
# group = "redis";
# permissions = "0400";
# text = ''
# Name Predixy
# Bind 127.0.0.1:7617
# ClientTimeout 300
# WorkerThreads 1
# Authority {
# Auth "${config.myEnv.databases.redis.predixy.read}" {
# Mode read
# }
# }
# StandaloneServerPool {
# Databases 16
# RefreshMethod fixed
# Group shard001 {
# + ${config.myEnv.databases.redis.socket}
# }
# }
# '';
#};
"redis/spiped_keyfile" = {
user = "spiped";
group = "spiped";
permissions = "0400";
text = config.myEnv.databases.redis.spiped_key;
};
};
systemd.slices.redis = {
description = "Redis slice";
};
#systemd.services.predixy = {
# description = "Redis proxy";
# wantedBy = [ "multi-user.target" ];
# after = [ "redis.service" ];
# serviceConfig = {
# Slice = "redis.slice";
# User = "redis";
# Group = "redis";
# SupplementaryGroups = "keys";
# Type = "simple";
# ExecStart = "${pkgs.predixy}/bin/predixy ${config.secrets.fullPaths."redis/predixy.conf"}";
# };
#};
};
}
|