介绍
HHVM是执行PHP和开源虚拟机 哈克代码。 HHVM是由Facebook开发和支持的,这一事实最近吸引了越来越多的关注。 HHVM与其他PHP引擎不同,因为它的即时(JIT)编译方法。 HHVM将PHP代码编译为中间字节代码,然后直接写入x64机器指令。与其他引擎的工作方式相比,这允许更多的优化和更高的性能。 HHVM功能强大,速度快,但它在资源方面也很苛刻,就像任何其他虚拟机(例如JVM)一样。因此,与其他更轻量级的PHP解释器(如PHP-FPM)相比,HHVM需要更多的RAM和CPU。我们的测试表明,体面的性能需要至少1 GB RAM的Droplet。 在本文中,我们将向您展示如何安装HHVM并将其与Nginx集成。先决条件
本指南已在Ubuntu 14.04上测试。所描述的安装和配置在其他OS或OS版本上类似,但配置文件的命令和位置可能不同。 对于本教程,您将需要:- Ubuntu 14.04 Droplet,至少有1 GB的RAM
- 非根Sudo用户(见与Ubuntu 14.04初始服务器设置 )
- Nginx的安装(按照第一步从文章如何安装linux,Nginx的,MySQL和PHP(LEMP)堆叠在Ubuntu 14.04 )
sudo
。
安装
对于Ubuntu 14.04,有一个正式支持的HHVM存储库。要添加此存储库,您必须使用以下命令导入其GnuPG公钥:sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
之后,您可以使用以下命令安全地安装HHVM的存储库:
sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
一旦你添加了存储库,你必须使apt,Ubuntu的软件管理器,意识到有新的包可以与它一起安装。这可以通过用命令更新apt的缓存来完成:
sudo apt-get update
最后,可以使用以下命令安装HHVM:
sudo apt-get install hhvm
以上命令安装HHVM并首次启动它。要确保HHVM使用Droplet自动启动和停止,请使用以下命令将HHVM添加到默认运行级别:
sudo update-rc.d hhvm defaults
组态
HHVM自带了一个脚本,使得与Nginx的集成非常容易。如果你有一个默认的Nginx安装,你可以运行脚本没有这样的任何参数:sudo /usr/share/hhvm/install_fastcgi.sh
在运行时,该脚本将配置文件
/etc/nginx/hhvm.conf
到默认Nginx的服务器模块配置
/etc/nginx/sites-enabled/default
。它只适用于没有任何FastCGI配置的默认Nginx配置。 如果您已经使用自定义FastCGI配置(例如PHP-FPM配置)修改了默认服务器块,那么您将不得不手动替换以前的FastCGI配置:
/ etc / nginx / sites-enabled / default
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
以上意味着Nginx的应使用HHVM处理任何
.php
或
.hh
(黑客)请求的文件。 您还需要重新启动Nginx以启用更改:
sudo service nginx restart
它还假定你没有改变默认的配置HHVM,使得在访问该服务
127.0.0.1:9000
。 此设置来自主HHVM配置文件
/etc/hhvm/server.ini
其中包含:
/etc/hhvm/server.ini
; php options
pid = /var/run/hhvm/pid
; hhvm specific
hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
在上面的配置,你可能会注意到变量
hhvm.server.port
这就决定了HHVM将TCP端口9000上监听此外,除非另有规定,否则将默认监听本地主机。 HHVM被认为适用于负载较重的环境,所以您可以做的第一个配置更改是使HHVM侦听套接字而不是TCP端口。因此,Nginx和HHVM之间的通信将需要更少的CPU和内存。 要配置HHVM监听套接字上,打开文件
/etc/hhvm/server.ini
在你喜欢的编辑器,例如用
vim
:
sudo vim /etc/hhvm/server.ini
然后取出开头的行
hhvm.server.port
,并在其位置添加下列之一:
/etc/hhvm/server.ini
hhvm.server.file_socket=/var/run/hhvm/hhvm.sock
保存配置文件,并使用以下命令重新启动HHVM:
sudo service hhvm restart
接下来,你必须让Nginx知道这个变化。为此,打开文件
/etc/nginx/hhvm.conf
编辑:
sudo vim /etc/nginx/hhvm.conf
在这个文件请确保
fastcgi_pass
指令指向HHVM插座,如下所示:
fastcgi_pass unix:/var/run/hhvm/hhvm.sock;
您将不得不重新启动Nginx也使此更改生效。为此目的使用命令:
sudo service nginx restart
该脚本
/usr/share/hhvm/install_fastcgi.sh
可以节省一些时间,但有些事情你必须手动调整,尤其是在问候你的Nginx服务器块。 例如,默认的服务器模块配置打开,如索引文件只
index.html
和
index.htm
同时,目录列表是被禁止的文件。 这是一件事你应该肯定改变,包括
index.php
文件,索引文件了。要做到这一点,使用您喜欢的编辑器重新打开默认服务器块的配置文件:
sudo vim /etc/nginx/sites-enabled/default
然后去
server
部分,添加
index.php
在使用索引的行,使其看起来像这样:
/ etc / nginx / sites-enabled / default
index index.html index.htm index.php;
重新启动Nginx使此设置生效:
sudo service nginx restart
测试和调整HHVM
您可以执行第一个测试是用PHP命令行界面(CLI)/usr/bin/php
,它指向
/etc/alternatives/php
,这在短期指向HHVM二进制
/usr/bin/hhvm
。
/usr/bin/php --version
当你运行上面的命令,你应该看到打印HHVM的版本和存储库信息,像这样:
HipHop VM 3.8.1 (rel)
Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660
Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33
如果您在HHVM之前安装了PHP,您仍然可以看到旧PHP的输出。要更改此值并使其指向HHVM,请运行以下命令:
sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60
接下来,你可以使用著名
phpinfo()
函数来查看HHVM的设置和选项。 为此,创建一个名为新文件
info.php
默认文档根目录里面-
/usr/share/nginx/html
用你喜欢的编辑器。
sudo vim /usr/share/nginx/html/info.php
新文件应包含:
/usr/share/nginx/html/info.php
<?php
phpinfo();
?>
它始终是一个很好的做法,以确保所有的Nginx Web文件是由Nginx的用户所有者
www-data
。 因此,更改此文件的所有权
www-data
与命令:
sudo chown www-data: /usr/share/nginx/html/info.php
现在尝试访问此文件在您的Droplet的IP。该URL就摆在你的浏览器应该是这样
http:// your_server_ip /info.php
。 您的浏览器中的结果应如下所示:
如果您没有看到类似的页面,请首先确保您已正确遵循先决条件中的安装说明。二,看在Nginx的(错误日志错误
/var/log/nginx/error.log
)和HHVM(
/var/log/hhvm/error.log
)。 让我们回到你的浏览器,您可能会注意到,这个页面是类似于制作一个
phpinfo()
与通常PHP。 事实上,大多数变量是相同的从通常的PHP与HHVM特定变量的异常开始与
hhvm.
前缀。 在探索变量注意,
memory limit
等于17179869184字节,这是一个有点超过17 GB。这样高的内存资源限制肯定会杀死具有几GB RAM的Droplet,使其无响应。您应该将此值减小到低于Droplet的可用RAM的值,以确保Droplet上的其他服务不会因缺少RAM而受损。 作为一个一般的例子,如果你的Droplet有2GB的内存,应该安全地专用于大约1.2 GB到HHVM。要做到这一点,编辑文件
/etc/hhvm/php.ini
用你喜欢的编辑器(
sudo vim /etc/hhvm/php.ini
),后添加一个新的变量
; php options
; php options
部分:
/etc/hhvm/php.ini
memory_limit = 1200M
以类似的方式,您可以根据您的需要和喜好修改任何PHP设置和变量。只需确保在每次更改后使用以下命令重新启动HHVM:
sudo service hhvm restart
接下来,您可以使用常用的Web应用程序执行更复杂的测试。重要的是要知道HHVM不是100%兼容通常的PHP或所有流行的PHP框架。我们在写这篇文章的测试显示,许多PHP Web应用程序,如WordPress,似乎工作正常。然而,正式,数量
支持的框架是有限的。 当您使用完整的框架/ Web应用程序测试时,应该不考虑HHVM特定的。安装和操作说明应与常规LEMP相同。这是因为,默认情况下,HHVM捆绑了所有大多数PHP模块提供良好的兼容性。 但是,在一些罕见的情况下,您可能需要为HHVM安装一个附加模块。例如,如果你使用PostreSQL作为数据库服务器,你将需要
pgsql
模块。 在这种情况下,第一次协商
HHVM的官方文档 ,即使它可能转发你给第三方的资源,如在案件
pgsql
。