搞定Ubuntu14.04 HHVM Nginx MariaDB Laravel

搞定Ubuntu14.04 HHVM Nginx MariaDB Laravel

PHP7出来很久了,唯一的竞争对手便是HHVM了。网上有各种性能对比测试,比较让人信服的答案依然是HHVM > PHP7

什么是 HHVM?

在2008年,Facebook 启动了一项工作,计划开发一个工具 将 PHP 脚本转换成 C++,这样就可以被编译后在 web 服务器上运行。目的是节省服务器资源,这是一个很重要的目标,因为 Facebook 的用户量正在快速增长。从这个意义上讲,这个项目是成功的,因为它可以让服务器处理之前五到六倍的请求量。

时间回到2010年,Facebook 的服务器需求已经增加了很多,是时候考虑用新的创新来提升更大的效率。基于这个需求,Facebook 开发了 HHVM。

HHVM 使用了 Just-In-Time (JIT) 编译方式将 PHP 代码转换成某种字节码。接下来把字节码再转换成机器码并进行优化,让它尽可能快的运行。

什么是PHP 7?

PHP 7 是 PHP 社区对 HHVM 的回应。PHP 7 发布的预览版本号称比之前的 PHP 5 的性能要提升100%。 你可能会问 PHP 的版本直接从 PHP5 跳到了 PHP7,答案是这样的:PHP6 的开发开始于2005年,但是它的进展过于缓慢又出现了很多的问题,这样 PHP6 在它还没有发布正式版本之前就有了不好的名声。所以PHP社区决定给这个语言的新版本直接命名为 PHP7。

真正的问题不是 PHP5 和 PHP7 之间的比较,因为已经很明显了, PHP7 提供了更快速的运行速度。但是我们想比较的是 PHP7 和 HHVM。很多专家已经分别使用了这两个方法来处理PHP代码,并且揭示了一些有趣的结论。

哪些公司使用 HHVM?

除了开发出 HHVM 的 FaceBook 公司外,还有很多其他公司也采用了这个方案,在服务器上用 HHVM 运行 PHP 应用,包括 Wikimedia 和电子商务网站 Etsy。

  • Wikimedia:Wikimedia 拥有大量的教育内容,包括著名的在线百科全书维基百科。维基百科每 个月吸引着近五亿的互联网用户,为了满足这样高级的需求,需要优化服务器的性能,和 PHP相比 HHVM 有一个显著的优点,它可以同时加载多个 SPU 核心, 而 PHP 是单线程语言,不能被并行化。维基百科部署了 HHVM 后,CPU 的负载从50%降到了10%,用户提交编辑时的平均响应时间减少到原来的一半,页面的平均加载时间从原来的1.3秒降到了0.9秒。
  • Etsy: 拥有五千四百万用户的 Tesy 同样迫切需要提高服务器性能,Etsy 的工程师对比了HHVM 和 PHP5.4 的性能,发现 HHVM 每秒可以处理280个服务器请求,而对于 PHP5.4,如果每秒的请求数超过了190次,服务器的响应时间就会急剧增加。

准备工作

su
apt-get update
apt-get upgrade
apt-get install unzip curl python-software-properties software-properties-common

使vim支持中文

vim /etc/vim/vimrc

set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=prc

安装Nginx

add-apt-repository ppa:nginx/stable
apt-get update
apt-get install nginx

安装HHVM

vim /etc/hosts
#加入
140.211.166.134 dl.hhvm.com
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
apt-get update
apt-get install hhvm

安装完成,显示如下信息

********************************************************************
* HHVM is installed.
*
* Running PHP web scripts with HHVM is done by having your
* webserver talk to HHVM over FastCGI. Install nginx or Apache,
* and then:
* $ sudo /usr/share/hhvm/install_fastcgi.sh
* $ sudo /etc/init.d/hhvm restart
* (if using nginx)  $ sudo /etc/init.d/nginx restart
* (if using apache) $ sudo /etc/init.d/apache restart
*
* Detailed FastCGI directions are online at:
* https://github.com/facebook/hhvm/wiki/FastCGI
*
* If you're using HHVM to run web scripts, you probably want it
* to start at boot:
* $ sudo update-rc.d hhvm defaults
*
* Running command-line scripts with HHVM requires no special setup:
* $ hhvm whatever.php
*
* You can use HHVM for /usr/bin/php even if you have php-cli
* installed:
* $ sudo /usr/bin/update-alternatives \
*    --install /usr/bin/php php /usr/bin/hhvm 60
********************************************************************

依据提示执行

/usr/share/hhvm/install_fastcgi.sh
/etc/init.d/hhvm restart
/etc/init.d/nginx restart
update-rc.d hhvm defaults

使用hhvm代替php命令

/usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60
php -v

显示如下信息

HipHop VM 3.13.1 (rel)
Compiler: tags/HHVM-3.13.1-0-g4f382ad928a6e2a0607a8dcb251002aca77f11f6
Repo schema: 655b5912cb8136e9df6f9be972153e38ac446e0f

安装MariaDB

apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu trusty main'

apt-get update
apt-get install mariadb-server

配置Nginx

cd /etc/nginx/sites-available/
cp default xSystem
vim xSystem

修改为

server {
        listen 80 default_server;

        root /var/www/xSystem/public;

        index index.html index.htm index.php;

        server_name www.phpwh.com;
        include hhvm.conf;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }
}

建立链接

ln -s /etc/nginx/sites-available/xSystem /etc/nginx/sites-enabled/xSystem
rm /etc/nginx/sites-enabled/default
service nginx restart

上传自己的项目到指定目录,上传、配置数据库(略)

cd /var/www
chmod -R 755 xSystem
chmod -R 777 xSystem/storage

访问,发现空白一片

检查hhvm日志

 vim /var/log/hhvm/error.log

出现如下信息

\nFatal error: unexpected St13runtime_error: locale::facet::_S_create_c_locale name not valid

解决方法

export LC_ALL=C
reboot

That's all. Enjoy Yourself~

上一篇课程 下一篇课程

学生登录