Commit 72ce7888 authored by Falko Timme's avatar Falko Timme

Added support for PHP-FPM sockets.

parent 2023a790
......@@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
......
......@@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
......
......@@ -204,6 +204,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php5-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//*Ufw
$conf['ufw']['installed'] = false;
......
......@@ -204,6 +204,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php5-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//* Ufw
$conf['ufw']['installed'] = false;
......
......@@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
......
......@@ -208,6 +208,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php5-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc/vlogger';
......
......@@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
......
......@@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm';
$conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini';
$conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm';
$conf['nginx']['php_fpm_start_port'] = 9010;
$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm';
//* vlogger
$conf['vlogger']['config_dir'] = '/etc';
......
......@@ -243,6 +243,7 @@ class installer_base {
$tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path'];
$tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir'];
$tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port'];
$tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir'];
$tpl_ini_array['web']['server_type'] = 'nginx';
$tpl_ini_array['global']['webserver'] = 'nginx';
}
......
......@@ -270,6 +270,7 @@ function updateDbAndIni() {
$tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path'];
$tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir'];
$tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port'];
$tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir'];
$tpl_ini_array['web']['server_type'] = 'nginx';
$tpl_ini_array['global']['webserver'] = 'nginx';
}
......
ALTER TABLE `web_domain` ADD `php_fpm_use_socket` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `nginx_directives`;
\ No newline at end of file
......@@ -1510,6 +1510,7 @@ CREATE TABLE `web_domain` (
`allow_override` varchar(255) NOT NULL default 'All',
`apache_directives` mediumtext,
`nginx_directives` mediumtext,
`php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'n'
`php_open_basedir` mediumtext,
`custom_php_ini` mediumtext,
`backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
......
......@@ -66,6 +66,7 @@ php_fpm_init_script=php5-fpm
php_fpm_ini_path=/etc/php5/fpm/php.ini
php_fpm_pool_dir=/etc/php5/fpm/pool.d
php_fpm_start_port=9010
php_fpm_socket_dir=/var/run/php5-fpm
[dns]
bind_user=root
......
......@@ -548,6 +548,17 @@ $form["tabs"]['web'] = array(
'width' => '40',
'maxlength' => '255'
),
'php_fpm_socket_dir' => array(
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
'default' => '',
'validators' => array(0 => array('type' => 'NOTEMPTY',
'errmsg' => 'php_fpm_socket_dir_error_empty'),
),
'value' => '',
'width' => '40',
'maxlength' => '255'
),
'php_open_basedir' => array(
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
......
......@@ -139,4 +139,6 @@ $wb["php_fpm_pool_dir_txt"] = 'PHP-FPM pool Verzeichnis';
$wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool Verzeichnis ist leer.';
$wb["php_fpm_start_port_txt"] = 'PHP-FPM Start-Port';
$wb["php_fpm_start_port_error_empty"] = 'PHP-FPM Start-Port ist leer.';
$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM Socket-Verzeichnis';
$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM Socket-Verzeichnis ist leer.';
?>
......@@ -141,6 +141,8 @@ $wb["php_fpm_pool_dir_txt"] = 'PHP-FPM pool directory';
$wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool directory is empty.';
$wb["php_fpm_start_port_txt"] = 'PHP-FPM start port';
$wb["php_fpm_start_port_error_empty"] = 'PHP-FPM start port is empty.';
$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM socket directory';
$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM socket directory is empty.';
$wb["try_rescue_txt"] = 'Enable service monitoring and restart on failure';
$wb["do_not_try_rescue_apache_txt"] = 'Disable apache monitoring';
$wb["do_not_try_rescue_mysql_txt"] = 'Disable MySQL monitoring';
......
......@@ -108,6 +108,10 @@
<div class="ctrlHolder nginx">
<label for="php_fpm_start_port">{tmpl_var name='php_fpm_start_port_txt'}</label>
<input name="php_fpm_start_port" id="php_fpm_start_port" value="{tmpl_var name='php_fpm_start_port'}" size="40" maxlength="255" type="text" class="textInput" />
</div>
<div class="ctrlHolder nginx">
<label for="php_fpm_socket_dir">{tmpl_var name='php_fpm_socket_dir_txt'}</label>
<input name="php_fpm_socket_dir" id="php_fpm_socket_dir" value="{tmpl_var name='php_fpm_socket_dir'}" size="40" maxlength="255" type="text" class="textInput" />
</div>
<div class="ctrlHolder">
<label for="php_open_basedir">{tmpl_var name='php_open_basedir_txt'}</label>
......
......@@ -488,6 +488,12 @@ $form["tabs"]['advanced'] = array (
'width' => '30',
'maxlength' => '255'
),
'php_fpm_use_socket' => array (
'datatype' => 'VARCHAR',
'formtype' => 'CHECKBOX',
'default' => 'n',
'value' => array(0 => 'n',1 => 'y')
),
'php_open_basedir' => array (
'datatype' => 'VARCHAR',
'formtype' => 'TEXT',
......
......@@ -76,4 +76,5 @@ $wb['nginx_directives_txt'] = 'nginx Direktiven';
$wb["seo_redirect_txt"] = 'SEO Redirect';
$wb["non_www_to_www_txt"] = 'Nicht-www -&gt; www';
$wb["www_to_non_www_txt"] = 'www -&gt; Nicht-www';
$wb["php_fpm_use_socket_txt"] = 'Benutze Socket f&uuml;r PHP-FPM';
?>
......@@ -76,4 +76,5 @@ $wb["nginx_directives_txt"] = 'nginx Directives';
$wb["seo_redirect_txt"] = 'SEO Redirect';
$wb["non_www_to_www_txt"] = 'Non-www -&gt; www';
$wb["www_to_non_www_txt"] = 'www -&gt; non-www';
$wb["php_fpm_use_socket_txt"] = 'Use Socket For PHP-FPM';
?>
\ No newline at end of file
......@@ -20,6 +20,12 @@
<label for="allow_override">{tmpl_var name='allow_override_txt'}</label>
<input name="allow_override" id="allow_override" value="{tmpl_var name='allow_override'}" size="30" maxlength="255" type="text" class="textInput" />
</div>
<div class="ctrlHolder nginx">
<p class="label">{tmpl_var name='php_fpm_use_socket_txt'}</p>
<div class="multiField">
{tmpl_var name='php_fpm_use_socket'}
</div>
</div>
<div class="ctrlHolder">
<label for="php_open_basedir">{tmpl_var name='php_open_basedir_txt'}</label>
<input name="php_open_basedir" id="php_open_basedir" value="{tmpl_var name='php_open_basedir'}" size="30" type="text" class="textInput" style="width:400px;" />
......
......@@ -75,7 +75,8 @@ server {
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:<tmpl_var name='fpm_port'>;
<tmpl_var name='use_tcp'>fastcgi_pass 127.0.0.1:<tmpl_var name='fpm_port'>;
<tmpl_var name='use_socket'>fastcgi_pass unix:<tmpl_var name='fpm_socket'>;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
......
[<tmpl_var name='fpm_pool'>]
listen = 127.0.0.1:<tmpl_var name='fpm_port'>
<tmpl_var name='use_tcp'>listen = 127.0.0.1:<tmpl_var name='fpm_port'>
<tmpl_var name='use_tcp'>listen.allowed_clients = 127.0.0.1
listen.allowed_clients = 127.0.0.1
<tmpl_var name='use_socket'>listen = <tmpl_var name='fpm_socket'>
<tmpl_var name='use_socket'>listen.owner = <tmpl_var name='fpm_user'>
<tmpl_var name='use_socket'>listen.group = <tmpl_var name='fpm_group'>
<tmpl_var name='use_socket'>listen.mode = 0660
user = <tmpl_var name='fpm_user'>
group = <tmpl_var name='fpm_group'>
......
......@@ -639,6 +639,25 @@ class nginx_plugin {
$vhost_data['web_document_root_www'] = $web_config['website_basedir'].'/'.$data['new']['domain'].'/web';
$vhost_data['web_basedir'] = $web_config['website_basedir'];
$vhost_data['ssl_domain'] = $data['new']['ssl_domain'];
// PHP-FPM
$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
if(substr($pool_dir,-1) != '/') $pool_dir .= '/';
$pool_name = 'web'.$data['new']['domain_id'];
$socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']);
if(substr($socket_dir,-1) != '/') $socket_dir .= '/';
if($data['new']['php_fpm_use_socket'] == 'y'){
$use_tcp = '#';
$use_socket = '';
} else {
$use_tcp = '';
$use_socket = '#';
}
$tpl->setVar('use_tcp', $use_tcp);
$tpl->setVar('use_socket', $use_socket);
$fpm_socket = $socket_dir.$pool_name.'.sock';
$tpl->setVar('fpm_socket', $fpm_socket);
$vhost_data['fpm_port'] = $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1;
// Custom nginx directives
......@@ -870,7 +889,7 @@ class nginx_plugin {
$this->awstats_update($data,$web_config);
}
$this->php_fpm_pool_update($data,$web_config);
$this->php_fpm_pool_update($data,$web_config,$pool_dir,$pool_name,$socket_dir);
if($web_config['check_apache_config'] == 'y') {
//* Test if nginx starts with the new configuration file
......@@ -1073,89 +1092,95 @@ class nginx_plugin {
}
//* Update the PHP-FPM pool configuration file
private function php_fpm_pool_update ($data,$web_config) {
private function php_fpm_pool_update ($data,$web_config,$pool_dir,$pool_name,$socket_dir) {
global $app, $conf;
$pool_dir = $web_config['php_fpm_pool_dir'];
$pool_name = 'web'.$data['new']['domain_id'];
//$reload = false;
if($data['new']['php'] == 'no'){
if(@is_file($pool_dir.'/'.$pool_name.'.conf')){
unlink($pool_dir.'/'.$pool_name.'.conf');
if(@is_file($pool_dir.$pool_name.'.conf')){
unlink($pool_dir.$pool_name.'.conf');
//$reload = true;
}
//if($reload == true) $app->services->restartService('php-fpm','reload');
return;
}
//if(!@is_file($pool_dir.'/'.$data['new']['domain'].'.conf') || ($data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain'])) {
//if ( @is_file($pool_dir.'/'.$pool_name.'.conf') ) {
// unlink($pool_dir.'/'.$pool_name.'.conf');
//}
$app->uses("getconf");
$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
$app->uses("getconf");
$web_config = $app->getconf->get_server_config($conf["server_id"], 'web');
$app->load('tpl');
$tpl = new tpl();
$tpl->newTemplate('php_fpm_pool.conf.master');
$tpl->setVar('fpm_pool', $pool_name);
$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1);
$tpl->setVar('fpm_user', $data['new']['system_user']);
$tpl->setVar('fpm_group', $data['new']['system_group']);
$tpl->setVar('security_level',$web_config['security_level']);
$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
$tpl->setVar('php_open_basedir', $php_open_basedir);
if($php_open_basedir != ''){
$tpl->setVar('enable_php_open_basedir', '');
} else {
$tpl->setVar('enable_php_open_basedir', ';');
}
$app->load('tpl');
$tpl = new tpl();
$tpl->newTemplate('php_fpm_pool.conf.master');
if($data['new']['php_fpm_use_socket'] == 'y'){
$use_tcp = ';';
$use_socket = '';
if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
} else {
$use_tcp = '';
$use_socket = ';';
}
$tpl->setVar('use_tcp', $use_tcp);
$tpl->setVar('use_socket', $use_socket);
// Custom php.ini settings
$final_php_ini_settings = array();
$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
if($custom_php_ini_settings != ''){
// Make sure we only have Unix linebreaks
$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
$ini_settings = explode("\n", $custom_php_ini_settings);
if(is_array($ini_settings) && !empty($ini_settings)){
foreach($ini_settings as $ini_setting){
list($key, $value) = explode('=', $ini_setting);
if($value){
$value = escapeshellcmd(trim($value));
$key = escapeshellcmd(trim($key));
switch (strtolower($value)) {
case 'on':
case 'off':
case '1':
case '0':
// PHP-FPM might complain about invalid boolean value if you use 0
$value = 'off';
case 'true':
case 'false':
case 'yes':
case 'no':
$final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value);
break;
default:
$final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value);
}
$fpm_socket = $socket_dir.$pool_name.'.sock';
$tpl->setVar('fpm_socket', $fpm_socket);
$tpl->setVar('fpm_pool', $pool_name);
$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1);
$tpl->setVar('fpm_user', $data['new']['system_user']);
$tpl->setVar('fpm_group', $data['new']['system_group']);
$tpl->setVar('security_level',$web_config['security_level']);
$php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']);
$tpl->setVar('php_open_basedir', $php_open_basedir);
if($php_open_basedir != ''){
$tpl->setVar('enable_php_open_basedir', '');
} else {
$tpl->setVar('enable_php_open_basedir', ';');
}
// Custom php.ini settings
$final_php_ini_settings = array();
$custom_php_ini_settings = trim($data['new']['custom_php_ini']);
if($custom_php_ini_settings != ''){
// Make sure we only have Unix linebreaks
$custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings);
$custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings);
$ini_settings = explode("\n", $custom_php_ini_settings);
if(is_array($ini_settings) && !empty($ini_settings)){
foreach($ini_settings as $ini_setting){
list($key, $value) = explode('=', $ini_setting);
if($value){
$value = escapeshellcmd(trim($value));
$key = escapeshellcmd(trim($key));
switch (strtolower($value)) {
case 'on':
case 'off':
case '1':
case '0':
// PHP-FPM might complain about invalid boolean value if you use 0
$value = 'off';
case 'true':
case 'false':
case 'yes':
case 'no':
$final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value);
break;
default:
$final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value);
}
}
}
}
}
}
$tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings);
$tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings);
file_put_contents($pool_dir.'/'.$pool_name.'.conf',$tpl->grab());
$app->log('Writing the PHP-FPM config file: '.$pool_dir.'/'.$pool_name.'.conf',LOGLEVEL_DEBUG);
unset($tpl);
//$reload = true;
//}
file_put_contents($pool_dir.$pool_name.'.conf',$tpl->grab());
$app->log('Writing the PHP-FPM config file: '.$pool_dir.$pool_name.'.conf',LOGLEVEL_DEBUG);
unset($tpl);
//$reload = true;
//if($reload == true) $app->services->restartService('php-fpm','reload');
}
......@@ -1163,12 +1188,13 @@ class nginx_plugin {
private function php_fpm_pool_delete ($data,$web_config) {
global $app;
$pool_dir = $web_config['php_fpm_pool_dir'];
$pool_name = 'web'.$data['old']['domain_id'];
$pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']);
if(substr($pool_dir,-1) != '/') $pool_dir .= '/';
$pool_name = 'web'.$data['new']['domain_id'];
if ( @is_file($pool_dir.'/'.$pool_name.'.conf') ) {
unlink($pool_dir.'/'.$pool_name.'.conf');
$app->log('Removed PHP-FPM config file: '.$pool_dir.'/'.$pool_name.'.conf',LOGLEVEL_DEBUG);
if ( @is_file($pool_dir.$pool_name.'.conf') ) {
unlink($pool_dir.$pool_name.'.conf');
$app->log('Removed PHP-FPM config file: '.$pool_dir.$pool_name.'.conf',LOGLEVEL_DEBUG);
//$app->services->restartService('php-fpm','reload');
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment