phpfpm: allow configuring PHP package per-pool

props to @4levels
This commit is contained in:
Wout Mertens 2018-06-04 12:33:41 +02:00
parent 926d6c0bad
commit 69936b5655
2 changed files with 35 additions and 11 deletions

View file

@ -8,21 +8,31 @@ let
stateDir = "/run/phpfpm";
poolConfigs = cfg.poolConfigs // mapAttrs mkPool cfg.pools;
poolConfigs =
(mapAttrs mapPoolConfig cfg.poolConfigs) //
(mapAttrs mapPool cfg.pools);
mkPool = n: p: ''
listen = ${p.listen}
${p.extraConfig}
'';
mapPoolConfig = n: p: {
phpPackage = cfg.phpPackage;
config = p;
};
fpmCfgFile = pool: poolConfig: pkgs.writeText "phpfpm-${pool}.conf" ''
mapPool = n: p: {
phpPackage = p.phpPackage;
config = ''
listen = ${p.listen}
${p.extraConfig}
'';
};
fpmCfgFile = pool: conf: pkgs.writeText "phpfpm-${pool}.conf" ''
[global]
error_log = syslog
daemonize = no
${cfg.extraConfig}
[${pool}]
${poolConfig}
${conf}
'';
phpIni = pkgs.runCommand "php.ini" {
@ -97,13 +107,14 @@ in {
pools = mkOption {
type = types.attrsOf (types.submodule (import ./pool-options.nix {
inherit lib;
inherit lib config;
}));
default = {};
example = literalExample ''
{
mypool = {
listen = "/path/to/unix/socket";
phpPackage = pkgs.php;
extraConfig = '''
user = nobody
pm = dynamic
@ -144,7 +155,7 @@ in {
mkdir -p ${stateDir}
'';
serviceConfig = let
cfgFile = fpmCfgFile pool poolConfig;
cfgFile = fpmCfgFile pool poolConfig.config;
in {
Slice = "phpfpm.slice";
PrivateDevices = true;
@ -153,7 +164,7 @@ in {
# XXX: We need AF_NETLINK to make the sendmail SUID binary from postfix work
RestrictAddressFamilies = "AF_UNIX AF_INET AF_INET6 AF_NETLINK";
Type = "notify";
ExecStart = "${cfg.phpPackage}/bin/php-fpm -y ${cfgFile} -c ${phpIni}";
ExecStart = "${poolConfig.phpPackage}/bin/php-fpm -y ${cfgFile} -c ${phpIni}";
ExecReload = "${pkgs.coreutils}/bin/kill -USR2 $MAINPID";
};
}

View file

@ -1,4 +1,8 @@
{ lib }:
{ lib, config }:
let
fpmCfg = config.services.phpfpm;
in
with lib; {
@ -12,6 +16,15 @@ with lib; {
'';
};
phpPackage = mkOption {
type = types.package;
default = fpmCfg.phpPackage;
defaultText = "config.services.phpfpm.phpPackage";
description = ''
The PHP package to use for running this PHP-FPM pool.
'';
};
extraConfig = mkOption {
type = types.lines;
example = ''