将HHVM安装到Apache中
在安装HHVM到Apache2.2(Ubuntu 12.04)和Apache2.4(Ubuntu 14.04)时的备忘录。
安装HHVM
执行以下操作,将HHVM存储库添加到apt。
lsb_release -r|grep 12.04 >/dev/null && sudo add-apt-repository ppa:mapnik/boost
curl -L http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
echo deb http://dl.hhvm.com/ubuntu $(lsb_release -cs) main | sudo tee /etc/apt/sources.list.d/hhvm.list
剩下的部分可以通过apt-get进行安装。
sudo apt-get install hhvm
hhvm --version
HHVM默认以端口9000作为服务启动,但是由于端口9000经常与其他服务或实验冲突,所以这里需要编辑/etc/hhvm/server.ini文件并将端口改为9955。
hhvm.server.port = 9955
另外,默認情況下未設置時區,但當實際開始使用時,將產生錯誤日誌,需在 /etc/hhvm/php.ini 中設置時區。
date.timezone = "Asia/Tokyo"
启动HHVM服务。
sudo service hhvm start
另外,在执行日志中会记录在 /var/log/hhvm/error.log 中,但有时会记录大量错误,因此最好设置一个单独的日志轮转配置。
在Ubuntu 12.04上进行Apache的配置
Ubuntu 12.04因为使用了Apache 2.2版本,所以需要一些工作和设置来理解FastCGI。
HHVM作为服务启动,需要使用fastcgi进行连接,但在此之前需要对特定目录进行fastcgi设置。
首先,需要安装和启用所需的模块。
sudo apt-get intall libapache2-mod-fastcgi
sudo a2enmod fastcgi
sudo a2enmod alias
sudo a2enmod actions
当使用 PHP 时,由于可能会产生冲突,所以要将其禁用。
sudo a2dismod php5
HHVM的配置在/etc/apache2/mods-available/hhvm_proxy_fcgi.conf中进行,但默认情况下,在没有proxy_fcgi的Apache 2.2中无法正常工作,所以需要删除默认内容,改为以下方式。
<IfModule mod_fastcgi.c>
<FilesMatch \.php$>
SetHandler hhvm-php-extension
</FilesMatch>
<FilesMatch \.hh$>
SetHandler hhvm-hack-extesion
</FilesMatch>
Alias /hhvm /var/www/hhvm
Action hhvm-php-extension /hhvm virtual
Action hhvm-hack-extension /hhvm virtual
FastCgiExternalServer /var/www/hhvm -host 127.0.0.1:9955 -pass-header Authorization -idle-timeout 300
</IfModule>
乍一看,似乎需要在浏览器中访问/hhvm,但是将脚本放置在/var/www/hhvm中,可以通过URL的根目录进行访问并执行(也可从/hhvm访问)。
此外,需要将该模块启用。
sudo ln -s /etc/apache2/mods-available/hhvm_proxy_fcgi.conf /etc/apache2/mods-enabled
重启Apache。
sudo service apache2 restart
在Ubuntu 14.04上配置Apache。
在Ubuntu 14.04中,Apache版本为Apache2.4,因此配置非常简单,只需安装proxy_fcgi模块,检查hhvm_proxy_fcgi.conf文件的路径和端口,然后启用即可。
sudo a2enmod proxy_fcgi
sudo ln -s /etc/apache2/mods-available/hhvm_proxy_fcgi.conf /etc/apache2/mods-enabled
ProxyPassMatch /(.+\.(hh|php)(/.*)?)$ fcgi://127.0.0.1:9955/var/www/html/$1
重启Apache。
(Note: The provided translation is in simplified Chinese script. If you prefer the traditional Chinese script, please let me know.)
sudo service apache2 restart
安装和运行确认样本脚本.
在这里,创建目录/var/www/hhvm,并将脚本放置在其中。
虽然使用了扩展名.hh,但也可以执行.php文件,因此可以直接将PHP脚本放置在其中。
sudo mkdir /var/www/hhvm
sudo chown www-data:www-data /var/www/hhvm
sudo -u www-data sh -c "ruby -e 'puts %Q{<?hh\necho "Hello Hack!";}' > /var/www/hhvm/hello.hh"
在执行脚本时,似乎HHVM会使用hh_client进行语法检查。但是,在这种情况下,如果没有名为.hh_config的文件,语法检查将失败,因此需要先创建它。
sudo -u www-data touch /var/www/hhvm/.hh_config
请访问并验证功能是否正常。
curl -v http://localhost/hello.hh
如果结果出现异常,请检查运行时日志/var/apache2/error.log和/var/log/hhvm/error.log。
这次会议辛苦了。