Merge branch 'master' into 'master'
HHVM Support
9 files modified
1 files added
| | |
| | | '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', |
| | |
| | | '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', |
| | |
| | | ), |
| | | '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', |
| | |
| | | 'formtype' => 'SELECT', |
| | | 'default' => 'fast-cgi', |
| | | 'valuelimit' => 'client:web_php_options', |
| | | 'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM'), |
| | | 'value' => array('no' => 'disabled_txt', 'fast-cgi' => 'Fast-CGI', 'cgi' => 'CGI', 'mod' => 'Mod-PHP', 'suphp' => 'SuPHP', 'php-fpm' => 'PHP-FPM', 'hhvm' => 'HHVM'), |
| | | 'searchable' => 2 |
| | | ), |
| | | 'fastcgi_php_version' => array ( |
| | |
| | | if(data.servertype == "nginx"){ |
| | | var selected = jQuery('#php').val(); |
| | | jQuery('.apache').hide(); |
| | | if(selected != "no" && selected != "php-fpm") { |
| | | if(selected != "no" && selected != "php-fpm" && selected != "hhvm") { |
| | | jQuery('#php option[value="php-fpm"]').attr('selected', 'selected').val('php-fpm'); |
| | | } |
| | | jQuery('#php option[value="fast-cgi"]').hide(); |
New file |
| | |
| | | #!/bin/bash |
| | | # |
| | | # /etc/init.d/hhvm_{SYSTEM_USER} |
| | | # |
| | | ### BEGIN INIT INFO |
| | | # Provides: hhvm_{SYSTEM_USER} |
| | | # Required-Start: $remote_fs $network |
| | | # Required-Stop: $remote_fs $network |
| | | # Default-Start: 2 3 4 5 |
| | | # Default-Stop: 0 1 6 |
| | | # Description: Starts The HHVM FastCGI Daemon |
| | | ### END INIT INFO |
| | | PATH=/sbin:/usr/sbin:/bin:/usr/bin |
| | | DESC="HHVM FastCGI Daemon" |
| | | NAME=hhvm |
| | | |
| | | do_start() |
| | | { |
| | | if [ ! -d /var/run/hhvm ]; then |
| | | mkdir -p -m0777 /var/run/hhvm |
| | | else |
| | | chmod 777 /var/run/hhvm |
| | | fi |
| | | |
| | | if [[ -e "/var/run/hhvm/hhvm_{SYSTEM_USER}.pid" ]] ; then |
| | | kill -0 `cat /var/run/hhvm/hhvm_{SYSTEM_USER}.pid` >/dev/null 2>&1 ; |
| | | case "$?" in |
| | | 0) |
| | | return 1 |
| | | ;; |
| | | esac |
| | | 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() |
| | | { |
| | | 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 |
| | | start) |
| | | do_start |
| | | ;; |
| | | stop) |
| | | do_stop |
| | | ;; |
| | | restart|force-reload) |
| | | do_stop |
| | | case "$?" in |
| | | 0|1) |
| | | do_start |
| | | ;; |
| | | *) |
| | | ;; |
| | | esac |
| | | ;; |
| | | *) |
| | | exit 3 |
| | | ;; |
| | | esac |
| | | |
| | | : |
| | |
| | | fastcgi_intercept_errors on; |
| | | } |
| | | </tmpl_else> |
| | | <tmpl_if name='php' op='==' value='hhvm'> |
| | | location @php { |
| | | try_files $uri =404; |
| | | include /etc/nginx/fastcgi_params; |
| | | fastcgi_pass unix:/var/run/hhvm/hhvm.<tmpl_var name='system_user'>.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; |
| | | } |
| | | </tmpl_else> |
| | | |
| | | location @php { |
| | | deny all; |
| | | } |
| | | </tmpl_if> |
| | | </tmpl_if> |
| | | |
| | | <tmpl_if name='cgi' op='==' value='y'> |
| | |
| | | <tmpl_if name='php' op='==' value='php-fpm'> |
| | | DocumentRoot <tmpl_var name='web_document_root'> |
| | | </tmpl_else> |
| | | DocumentRoot <tmpl_var name='web_document_root_www'> |
| | | <tmpl_if name='php' op='==' value='hhvm'> |
| | | DocumentRoot <tmpl_var name='web_document_root'> |
| | | </tmpl_else> |
| | | DocumentRoot <tmpl_var name='web_document_root_www'> |
| | | </tmpl_if> |
| | | </tmpl_if> |
| | | </tmpl_if> |
| | | </tmpl_if> |
| | |
| | | </IfModule> |
| | | </tmpl_if> |
| | | |
| | | <tmpl_if name='php' op='==' value='hhvm'> |
| | | <IfModule mod_fastcgi.c> |
| | | <Directory {tmpl_var name='document_root'}/cgi-bin> |
| | | <tmpl_if name='apache_version' op='>' value='2.2' format='version'> |
| | | Require all granted |
| | | <tmpl_else> |
| | | Order allow,deny |
| | | Allow from all |
| | | </tmpl_if> |
| | | </Directory> |
| | | <FilesMatch "\.php[345]?$"> |
| | | SetHandler php5-fcgi |
| | | </FilesMatch> |
| | | 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 /var/run/hhvm/hhvm.<tmpl_var name='system_user'>.sock -pass-header Authorization |
| | | </IfModule> |
| | | </tmpl_if> |
| | | |
| | | <tmpl_if name="rewrite_enabled"> |
| | | RewriteEngine on |
| | | <tmpl_if name='seo_redirect_enabled'> |
| | |
| | | |
| | | /* $data contains an array with these keys: |
| | | * file -> full path of changed php_ini |
| | | * mode -> web_domain php modes to change (mod, fast-cgi, php-fpm or '' for all except 'mod') |
| | | * mode -> web_domain php modes to change (mod, fast-cgi, php-fpm, hhvm or '' for all except 'mod') |
| | | * php_version -> php ini path that changed (additional php versions) |
| | | */ |
| | | |
| | |
| | | } |
| | | } elseif($data['mode'] == 'php-fpm') { |
| | | $qrystr .= " AND php = 'php-fpm'"; |
| | | if($data['php_version']) { |
| | | $qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . ":%'"; |
| | | } |
| | | } elseif($data['mode'] == 'hhvm') { |
| | | $qrystr .= " AND php = 'hhvm'"; |
| | | if($data['php_version']) { |
| | | $qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . ":%'"; |
| | | } |
| | |
| | | * PHP-FPM |
| | | */ |
| | | // Support for multiple PHP versions |
| | | if($data['new']['php'] == 'php-fpm'){ |
| | | if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){ |
| | | if(trim($data['new']['fastcgi_php_version']) != ''){ |
| | | $default_php_fpm = false; |
| | | list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version'])); |
| | |
| | | $default_php_fpm = true; |
| | | } |
| | | } else { |
| | | if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){ |
| | | if(trim($data['old']['fastcgi_php_version']) != '' && ($data['old']['php'] == 'php-fpm' || $data['old']['php'] == 'hhvm')){ |
| | | $default_php_fpm = false; |
| | | list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version'])); |
| | | if(substr($custom_php_fpm_ini_dir, -1) != '/') $custom_php_fpm_ini_dir .= '/'; |
| | |
| | | } |
| | | |
| | | $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 apache starts with the new configuration file |
| | |
| | | // 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 |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |
| | |
| | | } |
| | | |
| | | $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 |
| | |
| | | // 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 |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |