如何在Ubuntu 14.04与Nginx的安装HHVM

介绍

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版本上类似,但配置文件的命令和位置可能不同。 对于本教程,您将需要: 本教程中的所有命令都应以非root用户身份运行。 如果需要该命令的root访问权限,它会在前面加 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.htmlindex.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 。 您的浏览器中的结果应如下所示: HHVM的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

结论

如本文所示,HHVM可以轻松地安装,配置和与Nginx集成。如果你有足够的资源,你应该试试看看HHVM的独特的JIT编译器在性能和稳定性方面如何工作。必须有一个很好的理由像Facebook这样的网站复杂的功能和无与伦比的流量信任它。但是,对于流量较少的较小站点,您可能会发现较低的内存占用量解决方案,如PHP-FPM仍然是一个更好的选择。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏