Help us understand the problem. What is going on with this article?

CloudAtCost, CentOS7, Nginx, hhvm, Wordpress

More than 1 year has passed since last update.

CloudAtCost にCentOS7, nginx, hhvm をインストールして、ぼくのかんがえたさいきょうのWordpressが構築できるか検証します。

CloudAtCost とは

ある特定の人たちで人気の激安VPSです。
一度$35を支払えば、CloudAtCost社が破たんするまでVPSが利用できます。
なんか、メンテナンス料を請求されるようになりました。
というわけで、もう使わない。
50%割引とか70%割引とかキャンペーンをしょっちゅうやってますので、実際はもっと安く導入できます。
サーバ本体はカナダにあるようです。
良く落ちてます。
動いていても重いです。
商用サービスで使用することはお勧めしません。
「カネはないけど時間はある人」向けのマニアックなおもちゃです。

CentOS7 を導入する

サーバを追加するときにCentOS7を選択するだけです。
ただインストールが開始されるまでにPendingのまますっげぇ待たされることがあります。
私は4日待ちました。
待った挙句にインストールに失敗することもよくあります。
これが最初の関門です。

DVD等からインストールする場合の「最小インストール」に相当するようです。
net-tools などは入れておいた方が後が楽です。

インストールが完了したら、速攻で「yum update」しておきましょう。

アップデート後に再起動するときもすっごい待たされます。(数時間とか)
失敗したと思ってサーバを削除しないようにしましょう。

私の環境ではアップデート後にDNSが引けなくなりました。
/etc/resolv.conf に

nameserver 8.8.8.8

/etc/sysconfig/network-scripts/ifcfg-eth0 に

DNS1=8.8.8.8

を追記しました。

hhvm をインストールする

hhvm はなぜかRedHat系OSを冷遇しています。
公式ではバイナリパッケージが配布されていません。
頑張ってソースからコンパイルしようとしましたが、
コンパイルに5日かかった挙句、見事に失敗してしまったので心が折れました。
親切なインド人によって配布されているバイナリをありがたくインストールします。

基本的に、GitHubのPrebuilt Packages on Centos 7.x に書いてある方法のままです。
さっきは公式では配布されていないと書きましたが、上記ディレクトリを見ると、もしかしたら公式なのかもしれません。

rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

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 zeromq-devel -y

rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.12.0-1.el7.centos.x86_64.rpm

c++ とか make 関連はいらないような気もしますが、考えるのがめんどくさいです。

もしかしたら最後の rpm コマンドで依存パッケージが足りないとか言われるかもしれません。
geoip とか libなんちゃらを2~3個追加で入れたような気がします。

2016/10/01 追記

rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.12.0-1.el7.centos.x86_64.rpm
の代わりに、
yum install http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.14.4-1.el7.centos.x86_64.rpm
ってやれば、依存関係はすべてやってくれるみたいです。知らんかった。

hhvm が無事インストールできたら、/etc/hhvm/server.ini でタイムゾーンを修正します。

[date]
date.timezone = Asia/Tokyo

hhvm --version
で、

HipHop VM 3.12.1 (rel)
Compiler: tags/HHVM-3.12.1-0-gf516f1bb9046218f89885a220354c19dda6d8f4d
Repo schema: f2e5f39b2ad4a08bcbd90b5d8bcb580f40fba6c8

とか出てくればバッチリです。

最後に hhvm の起動設定をしておきます。hhvm はfastcgi として動作するので、WWWサーバのバックエンドとして動かしておかないといけません。

systemctl enable hhvm
systemctl start hhvm

上記 rpm でインストールした場合、hhvm のポートが 9001 になっています。
普通は 9000 を使うのですが、将来 php-fpm で比較とかするかもしれませんので、とりあえずそのままにしておきます。

CentOS7 + hhvm での注意

OSが再起動されると「/var/run」が掃除されて「/var/run/hhvm(実際は/run/hhvm)」が無くなって、hhvmが起動しなくなります。
/etc/tmpfiles.d/ にwww.conf とか作って以下の1行を書いておきましょう。

/etc/tmpfiles.d/www.conf
d /var/run/hhvm 0700 nginx nginx

Nginx のインストール

CentOS 公式ではパッケージがありませんのでNginx 公式から頂いてインストールします。

yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install --enablerepo=nginx nginx

インストールはこれでおしまいです。

Nginxの設定

/etc/nginx/conf.d/default.conf をいじります。
以下わかりやすいようにコメントを日本語で書いていますが、実際の設定ファイルは英語のほうが安心な気がします。

hhvm へのブリッジ、Wordpressのパーマリンク対応、画像のブラウザキャッシュ、gz圧縮などの設定を入れています。

server {
    listen       80;
    server_name  www.example.com;

    access_log  /var/log/nginx/log/host.access.log  main;

    # Wordpressのパーマリンク対応入り
    location / {
        try_files $uri $uri/ @wordpress;
        root   /path/to/htdocs;
        index  index.php index.html index.htm;
    }

    # phpはhhvmにぶんなげる(ここもパーマリンク対応)
    location ~ \.php$ {
        try_files $uri @wordpress;
        root           /path/to/htdocs;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param  SCRIPT_FILENAME  /path/to/htdocs$fastcgi_script_name;
        include        fastcgi_params;
    }

    # 画像類はブラウザキャッシュさせる(例は8日)
    # WordPressの設定が終わったら、cssやjsもキャッシュさせていいと思う
    location ~ \.(jpg|gif|png|svg|woff)$ {
        expires 8d;
        root   /path/to/htdocs;
    }

    # パーマリンクの実際の処理
    location @wordpress {
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param  SCRIPT_FILENAME  /path/to/htdocs/index.php;
        include        fastcgi_params;
    }

    # .htで始まるファイルをアクセス禁止
    location ~ /\.ht {
        deny  all;
    }

    # gz圧縮を使う
    gzip              on;
    gzip_min_length   1024;
    gzip_buffers      4 8k;
    gzip_http_version 1.0;
    gzip_comp_level   2;
    gzip_proxied      any;
    gzip_types        text/plain text/css application/javascript
                      text/xml application/atom+xml application/xml+rss
                      application/json text/json text/javascript+json
                      image/svg+xml application/xml;
    gzip_disable      "MSIE [1-6].";
    gzip_disable      "Mozilla/4";
}

これで基本的には設定も終わりですが、Wordpress をいろいろメンテしていると、やたらとタイムアウトがでましたので、hhvm のタイムアウト関連を変更しました。

/etc/hhvm/server.ini で以下を変更・追加しました。

hhvm.server.request_timeout_seconds = 300
default_socket_timeout = 300

hhvm の設定を変更したら、忘れずに、
systemctl restart hhvm
です。

あとは nginx を起動します。

systemctl enable nginx
systemctl start nginx

もしかすると、/var/run/hhvm が書き込めねぇとか文句垂れるかもしれません。
そのときは、
chown nginx:nginx /run/hhvm
とかしておけばよかったような気がします。

Wordpress のインストール

nginx + hhvm だからといって特別なことはやっていません。
普通にインストールして、普通にチューニングするだけです。

Wordpressのページキャッシュなしでも、Google PageSpeed Insights で安定して90が出るようになりました。

以下は今回のインストールで実際に動いているサイトです。(2016年5月時点)
更新は放置されています。

http://www.mixp.net

CloudAtCost でもそこそこ実用的な速度が出ていると思います。
今後コンテンツが増えてきたり、プラグインを追加したりしたらわかりませんが。
というわけで今回はここまで。

追伸:phpMyAdmin 動かしたら100%落ちます。

y_irabu
WEB開発とかゴニョゴニョやってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした