apacheGroup = config.services.httpd.Prod.group;
toVardir = name: "/var/lib/nextcloud_farm/${name}";
varDirs = lib.mapAttrsToList (name: v: toVardir name) cfg.instances;
- toPhpBaseDir = name: [ cfg.rootDirs."${name}" (toVardir name) ] ++ cfg.rootDirs."${name}".apps;
- phpBaseDir = builtins.concatStringsSep ":" (lib.unique (lib.flatten (lib.mapAttrsToList (name: v: toPhpBaseDir name) cfg.instances)));
+ toPhpBaseDir = name: builtins.concatStringsSep ":" ([ cfg.rootDirs."${name}" (toVardir name) ] ++ cfg.rootDirs."${name}".apps);
toVhost = name: ''
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
SetEnv NEXTCLOUD_CONFIG_DIR "${toVardir name}"
</IfModule>
<FilesMatch "\.php$">
CGIPassAuth on
- SetHandler "proxy:unix:${config.services.phpfpm.pools.nextcloud_farm.socket}|fcgi://localhost"
+ SetHandler "proxy:unix:${config.services.phpfpm.pools.${"nextcloud_farm_" + name}.socket}|fcgi://localhost"
</FilesMatch>
</Directory>
deps = [ "httpd" ];
text = ''
install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d ${builtins.concatStringsSep " " varDirs}
- install -m 0755 -o ${apacheUser} -g ${apacheGroup} -d /var/lib/nextcloud_farm/phpSessions
'';
};
- systemd.services.phpfpm-nextcloud_farm.after = lib.mkAfter [ "postgresql.service" ];
- systemd.services.phpfpm-nextcloud_farm.wants = [ "postgresql.service" ];
- services.phpfpm.pools.nextcloud_farm = {
+ systemd.services = lib.mapAttrs' (k: v: lib.nameValuePair ("phpfpm-nextcloud_farm_" + k) {
+ after = lib.mkAfter [ "postgresql.service" ];
+ wants = [ "postgresql.service" ];
+ }) cfg.instances;
+ services.phpfpm.pools = lib.mapAttrs' (k: v: lib.nameValuePair ("nextcloud_farm_" + k) {
user = apacheUser;
group = apacheGroup;
- settings = let
- instanceNb = builtins.length (builtins.attrNames cfg.instances);
- in {
+ settings = {
"listen.owner" = apacheUser;
"listen.group" = apacheGroup;
"pm" = "dynamic";
- "pm.max_children" = builtins.toString (60 * instanceNb);
- "pm.start_servers" = builtins.toString (3 * instanceNb);
- "pm.min_spare_servers" = builtins.toString (3 * instanceNb);
- "pm.max_spare_servers" = builtins.toString (5 * instanceNb);
+ "pm.max_children" = "60";
+ "pm.start_servers" = "3";
+ "pm.min_spare_servers" = "3";
+ "pm.max_spare_servers" = "3";
"pm.process_idle_timeout" = "60";
"php_admin_value[output_buffering]" = "0";
"php_value[opcache.revalidate_freq]" = "1";
"php_admin_value[memory_limit]" = "512M";
- "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${phpBaseDir}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp";
- "php_admin_value[session.save_path]" = "/var/lib/nextcloud_farm/phpSessions";
+ "php_admin_value[open_basedir]" = "/run/wrappers/bin/sendmail:${toPhpBaseDir k}:/proc/meminfo:/dev/urandom:/proc/self/fd:/tmp";
+ "php_admin_value[session.save_handler]" = "redis";
+ "php_admin_value[session.save_path]" = "'unix:///run/redis-php-sessions/redis.sock?persistent=1&prefix=Tools:NextcloudFarm:${k}:'";
};
inherit phpPackage;
- };
+ }) cfg.instances;
users.users.root.packages = let
toOcc = name: pkgs.writeScriptBin "nextcloud-occ-${name}" ''
#! ${pkgs.stdenv.shell}