diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index 7b04ebaba27..f73b8bc25e2 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -461,7 +461,7 @@
./services/web-servers/lighttpd/default.nix
./services/web-servers/lighttpd/gitweb.nix
./services/web-servers/nginx/default.nix
- ./services/web-servers/phpfpm.nix
+ ./services/web-servers/phpfpm/default.nix
./services/web-servers/shellinabox.nix
./services/web-servers/tomcat.nix
./services/web-servers/uwsgi.nix
diff --git a/nixos/modules/services/web-servers/phpfpm.nix b/nixos/modules/services/web-servers/phpfpm/default.nix
similarity index 67%
rename from nixos/modules/services/web-servers/phpfpm.nix
rename to nixos/modules/services/web-servers/phpfpm/default.nix
index 2658d7117e3..6befddf9f52 100644
--- a/nixos/modules/services/web-servers/phpfpm.nix
+++ b/nixos/modules/services/web-servers/phpfpm/default.nix
@@ -9,6 +9,12 @@ let
pidFile = "${stateDir}/phpfpm.pid";
+ mkPool = n: p: ''
+ [${n}]
+ listen = ${p.listen}
+ ${p.extraConfig}
+ '';
+
cfgFile = pkgs.writeText "phpfpm.conf" ''
[global]
pid = ${pidFile}
@@ -16,7 +22,7 @@ let
daemonize = yes
${cfg.extraConfig}
- ${concatStringsSep "\n" (mapAttrsToList (n: v: "[${n}]\n${v}") cfg.poolConfigs)}
+ ${concatStringsSep "\n" (mapAttrsToList mkPool cfg.pools)}
'';
phpIni = pkgs.writeText "php.ini" ''
@@ -61,33 +67,19 @@ in {
"Options appended to the PHP configuration file php.ini.";
};
- poolConfigs = mkOption {
- type = types.attrsOf types.lines;
+ pools = mkOption {
+ type = types.attrsOf (types.submodule (import ./pool-options.nix {
+ inherit lib;
+ }));
default = {};
- example = literalExample ''
- { mypool = '''
- listen = /run/phpfpm/mypool
- user = nobody
- pm = dynamic
- pm.max_children = 75
- pm.start_servers = 10
- pm.min_spare_servers = 5
- pm.max_spare_servers = 20
- pm.max_requests = 500
- ''';
- }
- '';
description = ''
- A mapping between PHP FPM pool names and their configurations.
- See the documentation on php-fpm.conf for
- details on configuration directives. If no pools are defined,
- the phpfpm service is disabled.
+ If no pools are defined, the phpfpm service is disabled.
'';
};
};
};
- config = mkIf (cfg.poolConfigs != {}) {
+ config = mkIf (cfg.pools != {}) {
systemd.services.phpfpm = {
wantedBy = [ "multi-user.target" ];
diff --git a/nixos/modules/services/web-servers/phpfpm/pool-options.nix b/nixos/modules/services/web-servers/phpfpm/pool-options.nix
new file mode 100644
index 00000000000..cc688c2c48a
--- /dev/null
+++ b/nixos/modules/services/web-servers/phpfpm/pool-options.nix
@@ -0,0 +1,35 @@
+{ lib }:
+
+with lib; {
+
+ options = {
+
+ listen = mkOption {
+ type = types.str;
+ example = "/path/to/unix/socket";
+ description = ''
+ The address on which to accept FastCGI requests.
+ '';
+ };
+
+ extraConfig = mkOption {
+ type = types.lines;
+ example = ''
+ user = nobody
+ pm = dynamic
+ pm.max_children = 75
+ pm.start_servers = 10
+ pm.min_spare_servers = 5
+ pm.max_spare_servers = 20
+ pm.max_requests = 500
+ '';
+
+ description = ''
+ Extra lines that go into the pool configuration.
+ See the documentation on php-fpm.conf for
+ details on configuration directives.
+ '';
+ };
+ };
+}
+