diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php index f25b399fa85f6df9889dbacc7db52cda646bad1f..5764266038c39b0c71a691110a2456ea6aec82f4 100644 --- a/interface/web/client/form/client.tform.php +++ b/interface/web/client/form/client.tform.php @@ -823,7 +823,7 @@ $form["tabs"]['limits'] = array ( 'default' => '', 'separator' => ',', 'valuelimit' => 'client:web_php_options', - 'value' => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM') + 'value' => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM') ), 'limit_cgi' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/client/form/client_template.tform.php b/interface/web/client/form/client_template.tform.php index 6827cad92f6fb546e4d9074cf20a7477d5d20328..dff2dcf4eb88902bb92610b03a8348bbcf62a91d 100644 --- a/interface/web/client/form/client_template.tform.php +++ b/interface/web/client/form/client_template.tform.php @@ -345,7 +345,7 @@ $form["tabs"]['limits'] = array ( 'default' => '', 'separator' => ',', 'valuelimit' => 'client:web_php_options', - 'value' => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM') + 'value' => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM') ), 'limit_cgi' => array ( 'datatype' => 'VARCHAR', diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php index 9d39a99e8fcd69b9650f2d12abbb1e2eb3170a56..fa469c944c19b678cdc873781988643837ff46d8 100644 --- a/interface/web/client/form/reseller.tform.php +++ b/interface/web/client/form/reseller.tform.php @@ -818,7 +818,7 @@ $form["tabs"]['limits'] = array ( ), 'default' => '', 'separator' => ',', - 'value' => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM') + 'value' => array('no' => 'Disabled', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM') ), 'limit_cgi' => array ( 'datatype' => 'VARCHAR', diff --git a/server/conf/hhvm_starter.master b/server/conf/hhvm_starter.master index 3320c4c165db060f9d384a7748c4206ca7f0257a..19230439fb3d170b75bf16c5caa360d6cd735cbf 100644 --- a/server/conf/hhvm_starter.master +++ b/server/conf/hhvm_starter.master @@ -16,12 +16,22 @@ NAME=hhvm do_start() { - {START} + if [ ! -d /var/run/hhvm ]; then + mkdir -p -m0777 /var/run/hhvm + else + chmod 777 /var/run/hhvm + fi + umask 017 + sudo -u {SYSTEM_USER} touch /var/run/hhvm/hhvm_{SYSTEM_USER}.pid + /usr/bin/hhvm --mode daemon -vServer.Type=fastcgi --user {SYSTEM_USER} -vServer.FileSocket=/var/run/hhvm/hhvm.{SYSTEM_USER}.sock -vLog.Level=Warning -vLog.UseLogFile=false -vRepo.Central.Path=/var/run/hhvm/hhvm.{SYSTEM_USER}.hhbc -vPidFile=/var/run/hhvm/hhvm_{SYSTEM_USER}.pid & echo $! > /var/run/hhvm/hhvm_{SYSTEM_USER}.pid } do_stop() { - {STOP} + if [[ -e "/var/run/hhvm/hhvm_{SYSTEM_USER}.pid" ]] ; then + kill -SIGTERM `cat /var/run/hhvm/hhvm_{SYSTEM_USER}.pid` >/dev/null 2>&1 ; + fi + rm -f /var/run/hhvm/hhvm.{SYSTEM_USER}.sock /var/run/hhvm/hhvm.{SYSTEM_USER}.hhbc /var/run/hhvm/hhvm_{SYSTEM_USER}.pid } case "$1" in diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 6e3d853245da0a7da04798ac616392949547df0f..0a089f92ca2d9cd2c7a3e7df0a88be43b7002d79 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -152,9 +152,22 @@ server { fastcgi_intercept_errors on; } + + location @php { + try_files $uri =404; + include /etc/nginx/fastcgi_params; + fastcgi_pass unix:/var/run/hhvm/hhvm..sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + #fastcgi_param PATH_INFO $fastcgi_script_name; + fastcgi_intercept_errors on; + } + + location @php { deny all; } + diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master index 08320025b4fad2a02f54614b37d755d38ac5e198..07f7a4ad6a8c4b40b74c7c34a5600d6b4705d791 100644 --- a/server/conf/vhost.conf.master +++ b/server/conf/vhost.conf.master @@ -337,7 +337,7 @@ Action php5-fcgi /php5-fcgi Alias /php5-fcgi {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} - FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket /tmp/hhvm..sock -pass-header Authorization + FastCgiExternalServer {tmpl_var name='document_root'}/cgi-bin/php5-fcgi-{tmpl_var name='ip_address'}-{tmpl_var name='port'}-{tmpl_var name='domain'} -idle-timeout 300 -socket /var/run/hhvm/hhvm..sock -pass-header Authorization diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 8af0500c4d24736b4b9bdd88d59da0de0832fcc9..f1a08af39e921eb12e4e3145e8f993650abafe22 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -2738,23 +2738,9 @@ class apache2_plugin { } else { $content = file_get_contents($conf['rootpath'] . '/conf/hhvm_starter.master'); } - $start_content = ''; - $stop_content = ''; if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm') { - $start_content .= 'if [ ! -d /var/run/hhvm ]; then - mkdir -p -m0777 /var/run/hhvm - else - chmod 777 /var/run/hhvm - fi - umask 017 - sudo -u ' . $data['new']['system_user'] . ' touch /var/run/hhvm/hhvm_' . $data['new']['system_user'] . '.pid - /usr/bin/hhvm --mode daemon -vServer.Type=fastcgi --user ' . $data['new']['system_user'] . ' -vServer.FileSocket=/tmp/hhvm.' . $data['new']['system_user'] . '.sock -vLog.Level=Warning -vLog.UseLogFile=false -vRepo.Central.Path=/tmp/hhvm.' . $data['new']['system_user'] . '.hhbc -vPidFile=/var/run/hhvm/hhvm_' . $data['new']['system_user'] . '.pid & echo $! > /var/run/hhvm/hhvm_' . $data['new']['system_user'] . '.pid'; - - $stop_content .= 'if [[ -e "/var/run/hhvm/hhvm_' . $data['new']['system_user'] . '.pid" ]] ; then kill -SIGTERM `cat /var/run/hhvm/hhvm_' . $data['new']['system_user'] . '.pid` >/dev/null 2>&1 ; fi - rm -f /tmp/hhvm.' . $data['new']['system_user'] . '.sock /tmp/hhvm.' . $data['new']['system_user'] . '.hhbc /var/run/hhvm/hhvm_' . $data['new']['system_user'] . '.pid'; - - $content = str_replace(array('{START}', '{STOP}', '{SYSTEM_USER}'), array($start_content, $stop_content, $data['new']['system_user']), $content); + $content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content); file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content); exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1'); exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1'); diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 05120416bfde3a2b92b193ba0a7eea2cf1eb7c69..eb12488d532847bf6afc7dcbc87fede6829a3777 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -1644,6 +1644,7 @@ class nginx_plugin { } $this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir); + $this->hhvm_update($data, $web_config); if($web_config['check_apache_config'] == 'y') { //* Test if nginx starts with the new configuration file @@ -1954,6 +1955,8 @@ class nginx_plugin { // remove PHP-FPM pool if ($data['old']['php'] == 'php-fpm') { $this->php_fpm_pool_delete($data, $web_config); + } elseif($data['old']['php'] == 'hhvm') { + $this->hhvm_update($data, $web_config); } //remove the php cgi starter script if available @@ -2301,6 +2304,28 @@ class nginx_plugin { } } + private function hhvm_update($data, $web_config) { + global $app, $conf; + + if(file_exists($conf['rootpath'] . '/conf-custom/hhvm_starter.master')) { + $content = file_get_contents($conf['rootpath'] . '/conf-custom/hhvm_starter.master'); + } else { + $content = file_get_contents($conf['rootpath'] . '/conf/hhvm_starter.master'); + } + + if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm') { + $content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content); + file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content); + exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1'); + exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1'); + exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' start >/dev/null 2>&1'); + } elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') { + exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1'); + exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1'); + unlink('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' >/dev/null 2>&1'); + } + } + //* Update the PHP-FPM pool configuration file private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir) { global $app, $conf;