diff --git a/install/froxlor.sql b/install/froxlor.sql index 29b11ba2..c692c62c 100644 --- a/install/froxlor.sql +++ b/install/froxlor.sql @@ -850,6 +850,7 @@ CREATE TABLE `panel_fpmdaemons` ( `max_requests` int(4) NOT NULL DEFAULT '0', `idle_timeout` int(4) NOT NULL DEFAULT '30', `limit_extensions` varchar(255) NOT NULL default '.php', + `custom_config` text, PRIMARY KEY (`id`), UNIQUE KEY `reload` (`reload_cmd`), UNIQUE KEY `config` (`config_dir`) diff --git a/install/updates/froxlor/0.10/update_0.10.inc.php b/install/updates/froxlor/0.10/update_0.10.inc.php index 5a9ecbd7..723565b5 100644 --- a/install/updates/froxlor/0.10/update_0.10.inc.php +++ b/install/updates/froxlor/0.10/update_0.10.inc.php @@ -531,6 +531,13 @@ if (\Froxlor\Froxlor::isDatabaseVersion('201912100')) { \Froxlor\Froxlor::updateToDbVersion('201912310'); } +if (\Froxlor\Froxlor::isDatabaseVersion('201912310')) { + showUpdateStep("Adding custom phpfpm pool configuration field"); + Database::query("ALTER TABLE `" . TABLE_PANEL_FPMDAEMONS . "` ADD `custom_config` text AFTER `limit_extensions`;"); + lastStepStatus(0); + \Froxlor\Froxlor::updateToDbVersion('201912311'); +} + if (\Froxlor\Froxlor::isDatabaseVersion('201912312')) { showUpdateStep("Adding option change awstats LogFormat"); Settings::AddNew("system.awstats_logformat", '1'); diff --git a/lib/Froxlor/Api/Commands/FpmDaemons.php b/lib/Froxlor/Api/Commands/FpmDaemons.php index f36c1a19..a926429a 100644 --- a/lib/Froxlor/Api/Commands/FpmDaemons.php +++ b/lib/Froxlor/Api/Commands/FpmDaemons.php @@ -150,6 +150,8 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc * optional, default 0 * @param string $limit_extensions * optional, limit execution to the following extensions, default '.php' + * @param string $custom_config + * optional, custom settings appended to phpfpm pool configuration * * @access admin * @throws \Exception @@ -173,6 +175,7 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc $max_requests = $this->getParam('max_requests', true, 0); $idle_timeout = $this->getParam('idle_timeout', true, 0); $limit_extensions = $this->getParam('limit_extensions', true, '.php'); + $custom_config = $this->getParam('custom_config', true, ''); // validation $description = \Froxlor\Validate\Validate::validate($description, 'description', '', '', array(), true); @@ -206,7 +209,8 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc `max_spare_servers` = :max_spare_servers, `max_requests` = :max_requests, `idle_timeout` = :idle_timeout, - `limit_extensions` = :limit_extensions + `limit_extensions` = :limit_extensions, + `custom_config` = :custom_config "); $ins_data = array( 'desc' => $description, @@ -219,7 +223,8 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc 'max_spare_servers' => $max_spare_servers, 'max_requests' => $max_requests, 'idle_timeout' => $idle_timeout, - 'limit_extensions' => $limit_extensions + 'limit_extensions' => $limit_extensions, + 'custom_config' => $custom_config ); Database::pexecute($ins_stmt, $ins_data); $id = Database::lastInsertId(); @@ -261,6 +266,8 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc * optional, default 0 * @param string $limit_extensions * optional, limit execution to the following extensions, default '.php' + * @param string $custom_config + * optional, custom settings appended to phpfpm pool configuration * * @access admin * @throws \Exception @@ -289,6 +296,7 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc $max_requests = $this->getParam('max_requests', true, $result['max_requests']); $idle_timeout = $this->getParam('idle_timeout', true, $result['idle_timeout']); $limit_extensions = $this->getParam('limit_extensions', true, $result['limit_extensions']); + $custom_config = $this->getParam('custom_config', true, $result['custom_config']); // validation $description = \Froxlor\Validate\Validate::validate($description, 'description', '', '', array(), true); @@ -322,7 +330,8 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc `max_spare_servers` = :max_spare_servers, `max_requests` = :max_requests, `idle_timeout` = :idle_timeout, - `limit_extensions` = :limit_extensions + `limit_extensions` = :limit_extensions, + `custom_config` = :custom_config WHERE `id` = :id "); $upd_data = array( @@ -337,6 +346,7 @@ class FpmDaemons extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc 'max_requests' => $max_requests, 'idle_timeout' => $idle_timeout, 'limit_extensions' => $limit_extensions, + 'custom_config' => $custom_config, 'id' => $id ); Database::pexecute($upd_stmt, $upd_data, true, true); diff --git a/lib/Froxlor/Cron/Http/Php/Fpm.php b/lib/Froxlor/Cron/Http/Php/Fpm.php index ffb1338a..c74cace8 100644 --- a/lib/Froxlor/Cron/Http/Php/Fpm.php +++ b/lib/Froxlor/Cron/Http/Php/Fpm.php @@ -115,6 +115,7 @@ class Fpm $fpm_requests = (int) $this->fpm_cfg['max_requests']; $fpm_process_idle_timeout = (int) $this->fpm_cfg['idle_timeout']; $fpm_limit_extensions = $this->fpm_cfg['limit_extensions']; + $fpm_custom_config = $this->fpm_cfg['custom_config']; if ($fpm_children == 0) { $fpm_children = 1; @@ -260,6 +261,12 @@ class Fpm $fpm_config .= 'php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f ' . $this->domain['email'] . "\n"; } + // append custom phpfpm configuration + if (! empty($fpm_custom_config)) { + $fpm_config .= "\n; Custom Configuration\n"; + $fpm_config .= \Froxlor\PhpHelper::replaceVariables($fpm_custom_config, $php_ini_variables); + } + fwrite($fh, $fpm_config, strlen($fpm_config)); fclose($fh); } diff --git a/lib/formfields/admin/phpconfig/formfield.fpmconfig_add.php b/lib/formfields/admin/phpconfig/formfield.fpmconfig_add.php index b2074877..b2aa0c04 100644 --- a/lib/formfields/admin/phpconfig/formfield.fpmconfig_add.php +++ b/lib/formfields/admin/phpconfig/formfield.fpmconfig_add.php @@ -86,6 +86,13 @@ return array( 'desc' => $lng['serversettings']['phpfpm_settings']['limit_extensions']['description'], 'type' => 'text', 'value' => '.php' + ), + 'custom_config' => array( + 'label' => $lng['serversettings']['phpfpm_settings']['custom_config']['title'], + 'desc' => $lng['serversettings']['phpfpm_settings']['custom_config']['description'], + 'type' => 'textarea', + 'cols' => 50, + 'rows' => 7 ) ) ) diff --git a/lib/formfields/admin/phpconfig/formfield.fpmconfig_edit.php b/lib/formfields/admin/phpconfig/formfield.fpmconfig_edit.php index 01209b21..78fdcf72 100644 --- a/lib/formfields/admin/phpconfig/formfield.fpmconfig_edit.php +++ b/lib/formfields/admin/phpconfig/formfield.fpmconfig_edit.php @@ -87,6 +87,14 @@ return array( 'desc' => $lng['serversettings']['phpfpm_settings']['limit_extensions']['description'], 'type' => 'text', 'value' => $result['limit_extensions'] + ), + 'custom_config' => array( + 'label' => $lng['serversettings']['phpfpm_settings']['custom_config']['title'], + 'desc' => $lng['serversettings']['phpfpm_settings']['custom_config']['description'], + 'type' => 'textarea', + 'cols' => 50, + 'rows' => 7, + 'value' => $result['custom_config'] ) ) ) diff --git a/lng/english.lng.php b/lng/english.lng.php index 860ac58f..d9fe562d 100644 --- a/lng/english.lng.php +++ b/lng/english.lng.php @@ -2085,8 +2085,13 @@ $lng['serversettings']['apply_phpconfigs_default']['title'] = 'Default value for $lng['admin']['domain_sslenabled'] = 'Enable usage of SSL'; $lng['admin']['domain_honorcipherorder'] = 'Honor the (server) cipher order, default no'; $lng['admin']['domain_sessiontickets'] = 'Enable TLS sessiontickets (RFC 5077), default yes'; + $lng['admin']['domain_sessionticketsenabled']['title'] = 'Enable usage of TLS sessiontickets globally'; $lng['admin']['domain_sessionticketsenabled']['description'] = 'Default yes
Requires apache-2.4.11+ or nginx-1.5.9+'; +$lng['serversettings']['phpfpm_settings']['restart_note'] = 'Attention: The config won\'t be checked for any errors. If it contains errors, PHP-FPM might not start again!'; +$lng['serversettings']['phpfpm_settings']['custom_config']['title'] = 'Custom configuration'; +$lng['serversettings']['phpfpm_settings']['custom_config']['description'] = 'Add custom configuration to each PHP-FPM version instance, for example pm.status_path = /status for monitoring. Variables below can be used here. ' . ' ' . $lng['serversettings']['phpfpm_settings']['restart_note'] . ''; + $lng['serversettings']['awstats']['logformat']['title'] = 'LogFormat setting'; $lng['serversettings']['awstats']['logformat']['description'] = 'If you use customized logformat for your webserver, you need change the awstats LogFormat too.
Default is 1. For more information check documentation here.'; diff --git a/lng/german.lng.php b/lng/german.lng.php index 6ba9f874..ab86c23a 100644 --- a/lng/german.lng.php +++ b/lng/german.lng.php @@ -1732,8 +1732,13 @@ $lng['serversettings']['apply_phpconfigs_default']['title'] = 'Standardwert für $lng['admin']['domain_sslenabled'] = 'Aktiviere Nutzung von SSL'; $lng['admin']['domain_honorcipherorder'] = 'Bevorzuge die serverseitige Cipher Reihenfolge, Standardwert nein'; $lng['admin']['domain_sessiontickets'] = 'Aktiviere TLS Sessiontickets (RFC 5077), Standardwert ja'; + $lng['admin']['domain_sessionticketsenabled']['title'] = 'Aktiviere Nutzung von TLS Sessiontickets systemweit'; $lng['admin']['domain_sessionticketsenabled']['description'] = 'Standardwert yes
Erfordert apache-2.4.11+ oder nginx-1.5.9+'; +$lng['serversettings']['phpfpm_settings']['restart_note'] = 'Achtung: Der Code wird nicht auf Fehler geprüft. Bei etwaigen Fehlern könnte der PHP-FPM-Prozess nicht mehr starten!'; +$lng['serversettings']['phpfpm_settings']['custom_config']['title'] = 'Benutzerdefinierte Konfiguration'; +$lng['serversettings']['phpfpm_settings']['custom_config']['description'] = 'Füge eine benutzerdefinierte Einstellungen zur PHP-FPM Instanz hinzu, beispielsweise pm.status_path = /status für Monitoring. Unten ersichtliche Variablen können verwendet werden.' . ' ' . $lng['serversettings']['phpfpm_settings']['restart_note'] . ''; + $lng['serversettings']['awstats']['logformat']['title'] = 'LogFormat Einstellung'; $lng['serversettings']['awstats']['logformat']['description'] = 'Wenn ein benutzerdefiniertes LogFormat beim Webserver verwendet wird, muss LogFormat von awstats ebenso angepasst werden.
Standard ist 1. Für weitere Informationen siehe Dokumentation unter hier.'; diff --git a/templates/Sparkle/admin/phpconfig/fpmconfig_add.tpl b/templates/Sparkle/admin/phpconfig/fpmconfig_add.tpl index 51a31dfd..6dd46ae1 100644 --- a/templates/Sparkle/admin/phpconfig/fpmconfig_add.tpl +++ b/templates/Sparkle/admin/phpconfig/fpmconfig_add.tpl @@ -21,4 +21,78 @@ $header + +
+
+
+

+ {$lng['admin']['templates']['template_replace_vars']} +

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lng['panel']['variable']}{$lng['panel']['description']}
{PEAR_DIR}{$lng['admin']['phpconfig']['pear_dir']}
{OPEN_BASEDIR_C}{$lng['admin']['phpconfig']['open_basedir_c']}
{OPEN_BASEDIR}{$lng['admin']['phpconfig']['open_basedir']}
{OPEN_BASEDIR_GLOBAL}{$lng['admin']['phpconfig']['open_basedir_global']}
{TMP_DIR}{$lng['admin']['phpconfig']['tmp_dir']}
{CUSTOMER_EMAIL}{$lng['admin']['phpconfig']['customer_email']}
{ADMIN_EMAIL}{$lng['admin']['phpconfig']['admin_email']}
{DOMAIN}{$lng['admin']['phpconfig']['domain']}
{CUSTOMER}{$lng['admin']['phpconfig']['customer']}
{ADMIN}{$lng['admin']['phpconfig']['admin']}
{DOCUMENT_ROOT}{$lng['admin']['phpconfig']['docroot']}
{CUSTOMER_HOMEDIR}{$lng['admin']['phpconfig']['homedir']}
+ +
+ +
+ $footer diff --git a/templates/Sparkle/admin/phpconfig/fpmconfig_edit.tpl b/templates/Sparkle/admin/phpconfig/fpmconfig_edit.tpl index c1383a9b..1fa660a7 100644 --- a/templates/Sparkle/admin/phpconfig/fpmconfig_edit.tpl +++ b/templates/Sparkle/admin/phpconfig/fpmconfig_edit.tpl @@ -22,4 +22,78 @@ $header + +
+
+
+

+ {$lng['admin']['templates']['template_replace_vars']} +

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{$lng['panel']['variable']}{$lng['panel']['description']}
{PEAR_DIR}{$lng['admin']['phpconfig']['pear_dir']}
{OPEN_BASEDIR_C}{$lng['admin']['phpconfig']['open_basedir_c']}
{OPEN_BASEDIR}{$lng['admin']['phpconfig']['open_basedir']}
{OPEN_BASEDIR_GLOBAL}{$lng['admin']['phpconfig']['open_basedir_global']}
{TMP_DIR}{$lng['admin']['phpconfig']['tmp_dir']}
{CUSTOMER_EMAIL}{$lng['admin']['phpconfig']['customer_email']}
{ADMIN_EMAIL}{$lng['admin']['phpconfig']['admin_email']}
{DOMAIN}{$lng['admin']['phpconfig']['domain']}
{CUSTOMER}{$lng['admin']['phpconfig']['customer']}
{ADMIN}{$lng['admin']['phpconfig']['admin']}
{DOCUMENT_ROOT}{$lng['admin']['phpconfig']['docroot']}
{CUSTOMER_HOMEDIR}{$lng['admin']['phpconfig']['homedir']}
+ +
+ +
+ $footer