From b00a0b51e78913f925d4c2fca9cb35c563f7af02 Mon Sep 17 00:00:00 2001 From: chn Date: Sat, 2 Sep 2023 16:30:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20phpfpm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/services/default.nix | 1 + modules/services/phpfpm.nix | 60 ++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 modules/services/phpfpm.nix diff --git a/modules/services/default.nix b/modules/services/default.nix index 8fd36759..f755379e 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -12,6 +12,7 @@ inputs: ./coturn.nix ./synapse.nix ./nebula + ./phpfpm.nix # ./docker.nix ]; options.nixos.services = let inherit (inputs.lib) mkOption types; in diff --git a/modules/services/phpfpm.nix b/modules/services/phpfpm.nix new file mode 100644 index 00000000..17aa4b55 --- /dev/null +++ b/modules/services/phpfpm.nix @@ -0,0 +1,60 @@ +inputs: +{ + options.nixos.services.phpfpm = let inherit (inputs.lib) mkOption types; in + { + instances = mkOption + { + type = types.attrsOf (types.submodule (submoduleInputs: { options = + { + user = mkOption { type = types.nullOr types.nonEmptyStr; default = null; }; + group = mkOption { type = types.nullOr types.nonEmptyStr; default = null; }; + package = mkOption { type = types.nullOr types.package; default = null; }; + };})); + default = {}; + }; + }; + config = + let + inherit (builtins) map listToAttrs filter; + inherit (inputs.localLib) attrsToList; + inherit (inputs.config.nixos.services) phpfpm; + in + { + services.phpfpm.pools = listToAttrs (map + (pool: + { + inherit (pool) name; + value = rec + { + user = if pool.value.user == null then pool.name else pool.value.user; + group = if pool.value.group == null then inputs.config.users.users.${user}.group else pool.value.group; + phpPackage = if pool.value.package == null then inputs.pkgs.php else pool.value.package; + settings = + { + "pm" = "ondemand"; + "pm.max_children" = 4; + "pm.process_idle_timeout" = "60s"; + "pm.max_requests" = 128; + }; + }; + }) + (attrsToList phpfpm.instances)); + users = + { + users = listToAttrs (map + (pool: + { + inherit (pool) name; + value = { isSystemUser = true; group = pool.name; }; + }) + (filter (pool: pool.value.user == null) (attrsToList phpfpm.instances))); + groups = listToAttrs (map + (pool: + { + inherit (pool) name; + value = {}; + }) + (filter (pool: pool.value.user == null) (attrsToList phpfpm.instances))); + }; + }; +}