CentOS7にApache or nginx + hhvmでWordPressを動かしてみる
logwが重たいので何か改善をしようと思いました。そこで思いついたのが、PHP7ではなくhhvmにしたら早くなるのか?というのと何故か突然hhvmを使ってみたくなったので遊びでWordPressを構築してみとうという邪な理由からやってみました。1ヶ月近くかかりました・・・
nginx、Apacheどちらでも問題ありません。
環境
- OS:CentOS7.4
- Webサーバー:Apache(2.4系) or nginx(1.13系)
- 実行環境:hhvm(3.15.3)
- DBサーバー:MariaDB(5.5.56)
- サーバー環境:さくらのクラウド(OSとSSHのみで基本的にApache、PHPなどは入っていない状態です)
- ドキュメントルート:/var/www/html
となります。Conohaなど他の環境では試していません。基本的に全ての作業はrootユーザーで行っています。
HHVMのインストール
まずはHHVMのインストールをします。HHVMとHackを触ってみるというサイトを元にやっていきます。
CentOSの更新
[root@localhost ~]# yum update -y
CentOSを更新して最新版にします
EPELリポジトリ更新
[root@localhost ~]# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
依存関係のあるライブラリ更新
[root@localhost ~]# yum install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl}-devel \ {ImageMagick,sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel \ lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel \ {unixODBC,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel \ glog-devel oniguruma-devel ocaml gperf enca libjpeg-turbo-devel openssl-devel \ mariadb mariadb-server make libc-client
ここで、mariadbなどのインストールもしています。が、ここでエラーがでます。libc-client.so.2007()(64bit)がありませんというエラーがでます。
※ここで僕は躓きました。このままではhhvmもインストールできません。hhvmインストールするときも同じエラーがでます。
ライブラリのインストール
[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libc-client-2007f-16.el7.x86_64.rpm [root@localhost ~]# rpm -Uvh libc-client-2007f-16.el7.x86_64.rpm [root@localhost ~]# yum install libc-client
wgetが無い場合は
[root@localhost ~]# yum install wget
でインストールができます。
HHVMのインストール
[root@localhost ~]# rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.15.3-1.el7.centos.x86_64.rpm
もしかしたら、この後
[root@localhost ~]# yum install hhvm
とやっていたかもしれません。色々調べて試したのでうろ覚えですいません。
HHVMのバージョン確認
[root@localhost ~]# hhvm --version HipHop VM 3.15.3 (rel)
無事インストールできました。
HHVMを実行(PHPファイル)
HHVMが実際に動くか確認します。とりあえず、test.phpをドキュメントルート直下に作ってみます。
[root@localhost ~]# vi /var/www/html/test.php
<? php echo "hellow World\n"; ?>
単純に表示しているだけです。実行コマンドは以下になります。
[root@localhost ~]# hhvm /var/www/html/test.php hellow World
無事実行できました。HHVMといえば、Hackです。Hackも実行できるかついでにやってみます
HHVMを実行(Hack)
Hackは拡張子が.hhなので、test.phpをコピーしてtest.hhにしていきます
[root@localhost ~]# cp /var/www/html/test.php /var/www/html/test.hh [root@localhost ~]# vi /var/www/html/test.hh
<?hh echo "hellow Hack\n";
Hackは始まりがhhになります。実行します
[root@localhost ~]# hhvm /var/www/html/test.hh Fatal error: /var/www/html/test.hh appears to be a Hack file, but you do not appear to be running the Hack typechecker. See the documentation at http://docs.hhvm.com/hack/typechecker/setup for information on getting it running. You can also set <code>-d hhvm.hack.lang.look_for_typechecker=0</code> to disable this check (not recommended).
エラーです。このエラーは、ドキュメントルート直下に.hhconfigというファイルを空でいいので置けば解決します。
[root@localhost ~]# vi /var/www/html/.hhconfig [root@localhost ~]# hhvm /var/www/html/test.hh hellow Hack
実行できました。これでインストール完了です。HHVMのインストールが終わったので今度はApacheからインストールします
Apacheのインストール
Apacheのインストールをします。IUSリポジトリを使います。CentOS標準のでも別に問題ないです。IUSにしたのは、httpd2でやってみたいからと思ったぐらいです(簡単にできるだろうと思っていたので)なので、別にIUSでなくても問題ありません。
CentOS7にApache2.4最新版をyum installするというサイトを参考にインストールします
IUSのリポジトリをインストール
[root@localhost ~]# yum -y install https://centos7.iuscommunity.org/ius-release.rpm
IUSのリポジトリをインストールする
[root@localhost ~]# vi /etc/yum.repos.d/ius.repo [ius] ... enabled=0 #enabled=1から変更 ...
Nghttp2のインストール
[root@localhost ~]# yum --enablerepo=epel -y install nghttp2
/etc/mime.typesのインストール
[root@localhost ~]# yum -y install mailcap
Apacheのインストール
[root@localhost ~]# yum --disablerepo=base,extras,updates --enablerepo=ius install httpd [root@localhost ~]# httpd -v Server version: Apache/2.4.29 (CentOS) Server built: Oct 23 2017 14:34:32
インストールできました。SSL関係もインストールします
SSL関係のインストール
[root@localhost ~]# yum -y install openldap-devel expat-devel [root@localhost ~]# yum -y install --enablerepo=ius -y install httpd24u-devel mod_ssl
Apacheのインストール完了です。
Firewallの設定
Firewallの設定を変更します。コマンドの参考はCentOS7のコマンドを見て下さい
[root@localhost ~]# firewall-cmd --permanent --add-service=htt
とりあえず80番ポートだけ空けておきます。
ブラウザで確認してデフォルトページがでていればOKです。
nginxのインストール
nginx僕がやり始めたときはソースからインストールしかできなかったのですが、最近はyumからでもインストールできるみたいです
参考サイト:CentOS 7 (5, 6) で "安定版 (最新版)" のNginxをインストールする方法
nginxの設定
[root@localhost ~]# vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
nginxのインストール
[root@localhost ~]# yum --enablerepo=nginx install nginx [root@localhost ~]# nginx -v nginx version: nginx/1.13.10
nginxのインストールも終わりました。というわけで実際にnginxが表示されるか確認します
Apacheの停止してnginxの起動
[root@localhost ~]# service httpd stop [root@localhost ~]# service nginx start
nginxのウエルカムページが表示されていればOKです
ブラウザでtest.phpにアクセスしてみる
apacheでもnginxでもいいので、ブラウザでtest.phpにアクセスしてみてください。おそらくこんなページが表示されます。(僕はApacheでやっています)
<?php echo "hellow World\n"; ?>
実行されていません。これはApache(nginx)とHHVMが連携していないからになります。ここから連携をしていきます。
ApacheとHHVMを連携
ApacheとHHVMの連携をします。ApacheとHHVMはfastcgiで連携します
参考サイト:【Apache】FastCGIで使用しているモジュールをmod_fastcgi → mod_fcgidに切り替える
mod_fcgidのインストール
[root@localhost ~]# yum install mod_fcgid
confファイルを設定します
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> #----追加------ AddHandler fcgid-script .php Options FollowSymLinks ExecCGI FcgidWrapper /usr/local/bin/php-wrapper .php #----追加------ <FilesMatch "\.php$"> SetHandler "proxy:fcgi://127.0.0.1:9001/" </FilesMatch> </Directory>
基本的に追加します。Optionsは元の設定はコメントアウトしています。proxy:fcgi://127.0.0.1:9001/は。HHVMの設定をみます
[root@localhost ~]# cat /etc/hhvm/server.ini hhvm.server.port = 9001 ←ポートが9001になっているので↑の方も9001を設定
保存をしたらApacheを起動します
Apacheの起動
nginxが起動していてApacheが停止している場合は以下のコマンドになります
[root@localhost ~]# service nginx stop [root@localhost ~]# service httpd start
nginxが停止している場合は以下のコマンドになります。
[root@localhost ~]# service httpd restart
もし構文が心配などありましたら、以下のコマンドで構文チェックするとOKです
[root@localhost ~]# service httpd configtest Syntax OK
とでていれば問題無いです。これで連携は完了です。連携完了しても表示はされません。多分503エラーです
nginxの連携
今度はnginxの連携をします。Apacheのだけで使いたい方は特に設定しなくても良いです。この後の作業に入って下さい
confファイルを編集
[root@localhost ~]# vi /etc/nginx/conf.d/default.conf location / { root /var/www/html; index index.html index.htm; } location ~ \.php$ { root /var/www/html; fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
と設定します。設定したら再起動してください。
nginxの再起動
Apacheが起動しているかたは以下のコマンドになります。
[root@localhost ~]# service httpd stop [root@localhost ~]# service nginx start
nginxが起動している場合は以下になります
[root@localhost ~]# service nginx restart
これで設定は終わりです。
ブラウザで表示してみる
503エラー・・・
Apacheもnginxでも503エラーになると思います。(もし503になっていない場合は問題ないですが、CentOS7の問題があるので設定はお勧めします)
CentOS7では/var/runを再起動すると削除してしまう
CloudAtCost, CentOS7, Nginx, hhvm, WordPressのサイトをみると、/var/run/hhvmが無くなって、hhvmが起動しなくなります。とあります。実際にコマンドを入れてみるとhhvmがないのがあわかります。サイトのようにconfファイルをいれてみます。
[root@localhost ~]# vi /etc/tmpfiles.d/www.conf d /var/run/hhvm 0700 nginx nginx
これでOKです。ここで再起動しても問題無く起動するようになります。これでApacheでもnginxでもHHVMがブラウザでも実行されます。ただし、hhvmの実行ユーザーがnginxになるので、Apacheで実行すると場合によっては503エラーとなります。
Apacheにすると503エラー
/var/run/hhvm ですが、これの設定を例えばd /var/run/hhvm 0700 apache apache にしても、503エラーになります。これは、hhvmの実行ユーザーがnginxになっているためになります。nginxでhhvmを動かす場合は特に設定はいりませんが、Apacheでhhvmを実行するには設定ファイルを編集する必要があります
まずはなぜ実行ユーザーがnginxなのか確認する
hhvmの実行ユーザーがなぜnginxになっているのか確認するには、以下のコマンドを使います。
[root@localhost ~]# ps auxw | grep hhvm nginx 470 0.1 25.4 1199016 258312 ? SLsl 3月26 1:34 /usr/local/bin/hhvm --config /etc/hhvm/server.ini --user nginx --mode daemon -vServer.Type=fastcgi -vServer.Port=9001
nginxが実行者になっていました。つまり、/var/runs/hhvmはapacheで実行しているのに、hhvmの実行ユーザーはnginxになっていました。これでは・・・apacheで503がでます。というわけで実行ユーザーを変えればapacheでも起動できることになります。まずはファイル編集します
[root@localhost ~]# vi /etc/tmpfiles.d/www.conf d /var/run/hhvm 0700 apache apache [root@localhost ~]# reboot
一度再起動します。
再起動後に/var/runを確認します
[root@localhost ~]# ls -all /var/run/ | grep hhvm drwx------ 2 apache apache 60 3月 27 15:08 hhvm
apacheになっています。しかし、今の段階ではhhvmの実行者はnginxなので、hhvmの実行者を変えるようにします
hhvmのserver.iniを修正?
ネットで検索すると、server.iniを修正すると良い記述がありましたが、僕の環境では意味無かったです。実行者がapacheになることはありませんでした。
まずはステータスで確認
[root@localhost ~]# service hhvm status Redirecting to /bin/systemctl status hhvm.service ● hhvm.service - HHVM HipHop Virtual Machine (FCGI) Loaded: loaded (/usr/lib/systemd/system/hhvm.service; enabled; vendor preset: disabled) Active: active (running) since 火 2018-03-27 15:19:47 JST; 24s ago Main PID: 468 (hhvm) CGroup: /system.slice/hhvm.service └─468 /usr/local/bin/hhvm --config /etc/hhvm/server.ini --user nginx --mode daemon -vServer.Type=fastcgi -vServer.Port=9001 3月 27 15:19:47 localhost.localdomain systemd[1]: Started HHVM HipHop Virtual Machine (FCGI). 3月 27 15:19:47 localhost.localdomain systemd[1]: Starting HHVM HipHop Virtual Machine (FCGI)...
どうやら、(/usr/lib/systemd/system/hhvm.serviceのとこでデーモンファイルを読み込んでいるみたいです。これはCentOS7のデフォルトになります。CentOS7では/etc/systemd/system/配下にカスタマイズ内容をいれるようになっています。というわけで、以下の情報を入れていきます。
参考サイト:CentOS7導入時に調べたsystemdの話
[root@localhost ~]# vi /etc/systemd/system/hhvm.service [Unit] Description=HHVM HipHop Virtual Machine (FCGI) [Service] ExecStart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini --user apache --mode daemon -vServer.Type=fastcgi -vServer.Port=9001 [Install] WantedBy=multi-user.target
やっている内容はuserをapacheに変えただけです。OSの再起動します
[root@localhost ~]# reboot
OSの再起動後に、hhvmの実行者を確認します
[root@localhost ~]# ps auxw | grep hhvm apache 467 0.4 17.9 774332 182016 ? SLsl 15:41 0:01 /usr/local/bin/hhvm --config /etc/hhvm/server.ini --user apache --mode daemon -vServer.Type=fastcgi -vServer.Port=9001
Apacheになっています。これで問題無いです。念のためhhvmのステータスも確認してみます
[root@localhost ~]# service hhvm status Redirecting to /bin/systemctl status hhvm.service ● hhvm.service - HHVM HipHop Virtual Machine (FCGI) Loaded: loaded (/etc/systemd/system/hhvm.service; enabled; vendor preset: disabled) Active: active (running) since 火 2018-03-27 15:41:49 JST; 9min ago Main PID: 467 (hhvm) CGroup: /system.slice/hhvm.service └─467 /usr/local/bin/hhvm --config /etc/hhvm/server.ini --user apache --mode daemon -vServer.Type=fastcgi -vServer.Port=9001 3月 27 15:41:49 localhost.localdomain systemd[1]: Started HHVM HipHop Virtual Machine (FCGI). 3月 27 15:41:49 localhost.localdomain systemd[1]: Starting HHVM HipHop Virtual Machine (FCGI)...
読み込みファイルも、/etc/systemd/system/hhvm.serviceに変っています。
WordPressのインストール
WordPressのインストールは特に何かWordPressのファイルを変えるなどはありません。しかし、このままだと今度はインストールが成功しても403エラーになります。(管理画面が表示できない)というわけでそれぞれのconfファイルを変えます。
Apacheの設定
Apacheはconfファイルの修正をします
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> DirectoryIndex index.php index.htmm ←これを追加 </Directory>
これで終わりです。Apacheを再起動すれば表示されます。
nginxの設定
nginxも簡単です。
[root@localhost ~]# vi /etc/nginx/conf.d/default.conf location / { root /var/www/html; index index.php index.html index.htm; ←index.phpの優先順位を変える }
ふたつとも優先順位を変えることで問題無く表示することができました。
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS