X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=modules%2Fprivate%2Fdatabases%2Fredis.nix;h=4b26283ee1b928887653445b74c8721775c34ff5;hb=ab8f306d7c2c49b8116e1af7b355ed2384617ed9;hp=c23ffeca6dd9596b4975e8d0aa97998dce7b6370;hpb=8415083eb6acc343dfa404dbbc12fa0171a48a20;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/modules/private/databases/redis.nix b/modules/private/databases/redis.nix index c23ffec..4b26283 100644 --- a/modules/private/databases/redis.nix +++ b/modules/private/databases/redis.nix @@ -1,4 +1,4 @@ -{ lib, config, ... }: +{ lib, config, pkgs, ... }: let cfg = config.myServices.databases.redis; in { @@ -52,6 +52,88 @@ in { ''; }; systemd.services.redis.serviceConfig.RuntimeDirectory = cfg.systemdRuntimeDirectory; + + services.spiped = { + enable = true; + config.redis = { + decrypt = true; + source = "0.0.0.0:16379"; + target = "/run/redis/redis.sock"; + keyfile = "${config.secrets.location}/redis/spiped_keyfile"; + }; + }; + systemd.services.spiped_redis = { + description = "Secure pipe 'redis'"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + 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.location}/redis/predixy.conf" ]; + }; + + networking.firewall.allowedTCPPorts = [ 7617 16379 ]; + secrets.keys = [ + { + dest = "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} + } + } + ''; + } + { + dest = "redis/spiped_keyfile"; + user = "spiped"; + group = "spiped"; + permissions = "0400"; + text = config.myEnv.databases.redis.spiped_key; + } + ]; + + systemd.services.predixy = { + description = "Redis proxy"; + wantedBy = [ "multi-user.target" ]; + after = [ "redis.service" ]; + + serviceConfig = { + User = "redis"; + Group = "redis"; + SupplementaryGroups = "keys"; + Type = "simple"; + + ExecStart = "${pkgs.predixy}/bin/predixy ${config.secrets.location}/redis/predixy.conf"; + }; + + }; }; }