すずかのメモ帳

最近VRの世界に突入した人のメモ帳

hhvm+nginxをWindowsAzureにインストール・自動起動設定など

お久しぶりです。前回の記事から約1ヶ月たってます。(諦めていました)
久しぶりにインストール作業を行ったらすんなり行けたので備忘録程度に書いていきます。


インストール環境は下記プランを実行した初期状態からです。
DBサーバは外部にあることを想定しているので、ここでは構築しません。
今回、hhvmはfastcgiサーバとして実行するので、hhvm自体でサーバーを建てる設定は行いません。また、/etc/init.d/hhvmを書き換えるので、バックアップはとっておいてください。

サーバー Windows Azure
プラン 基本:A1
OS Open Logic 6.5
WEB nginx/1.4.0
hhvm HipHop VM 3.2.0 (rel)

・目次
hhvm,nginxのインストール
nginx設定の変更
hhvm起動ファイルの修正
自動起動設定
起動

1.hop5リポジトリのインストール

cd /etc/yum.repos.d/
wget http://www.hop5.in/yum/el6/hop5.repo

2.パッケージのupdate, upgrade

yum -y update
yum -y upgrade

3.epelのインストール、公開鍵の登録

yum -y install epel-release
wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
rpm --import ~/RPM-GPG-KEY-EPEL-6
rm -f ~/RPM-GPG-KEY-EPEL-6

4.hhvmとnginxのインストール

yum clean all
yum -y install hhvm nginx

5.nginxの設定

/public/path/to/here は各自公開ディレクトリに設定してください。 
vim /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  example.com;
    location / {
        root   /public/path/to/here;
        index  index.php;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /public/path/to/here;
    }
    location ~ \.php$ {
        root           /public/path/to/here;
        fastcgi_keep_conn on;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /public/path/to/here$fastcgi_script_name;
        include        fastcgi_params;
    }
}

デフォルトだとfastcgi_paramsの設定に不備があるので、修正します。
vim /etc/nginx/fastcgi_params

fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;

fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
fastcgi_param   PATH_INFO               $fastcgi_path_info;
fastcgi_param   PATH_TRANSLATED         $document_root$fastcgi_path_info;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;

fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;

fastcgi_param   HTTPS                   $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;

6.hhvm fastcgiの起動設定

# hhvm --mode daemon -vServer.Type=fastcgi -vServer.Port=9000
を実行すればfastcgiサーバが起動するのですが、Consoleが持ってかれるのと、サーバ再起動したタイミングでコマンドを打たないといけないので、/etc/init.d/hhvmを少し修正します。
とりあえず起動すればいいや なので細かい修正方法あればまた教えてください・・・

cp /etc/init.d/hhvm /etc/init.d/hhvm.orig
vim /etc/init.d/hhvm
#!/bin/bash
#
#	/etc/rc.d/init.d/hhvm
#
# Starts the hhvm daemon
#
# chkconfig: 345 26 74
# description: HHVM (aka the HipHop Virtual Machine) is an open-source virtual machine designed for executing programs written in Hack and PHP
# processname: hhvm

### BEGIN INIT INFO
# Provides: hhvm
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop hhvm
# Description: HHVM (aka the HipHop Virtual Machine) is an open-source virtual machine designed for executing programs written in Hack and PHP
### END INIT INFO

# Source function library.
. /etc/init.d/functions

start() {
	echo -n "Starting hhvm: "

        #/usr/bin/hhvm --config /etc/hhvm/server.hdf --user nginx --mode daemon
        /usr/bin/hhvm --mode daemon -vServer.Type=fastcgi -vServer.Port=9000
	touch /var/lock/subsys/hhvm
}

stop() {
	echo -n "Shutting down hhvm: "
	killproc `cat /var/hhvm/hhvm.pid`
	rm -f /var/lock/subsys/hhvm
}

case "$1" in
    start)
	start
	;;
    stop)
	stop
	;;
    status)
	if [ -f "/proc/$(cat /var/run/hhvm.pid 2>/dev/null)" ];then
		echo "hhvm is running"
	else
		echo "hhvm is not running"
	fi
	;;
    restart)
    	stop
	start
	;;
    reload|condrestart|probe)
	echo "$1 - Not supported."
	;;
    *)
	echo "Usage: hhvm {start|stop|status|reload|restart[|probe]"
	exit 1
	;;
esac
exit $?

7.自動起動の設定

chkconfig nginx on
chkconfig hhvm on
*8.起動
>|sh|
service nginx start
service hhvm start

9.hhvm実行確認

echo ' /public/path/to/here/index.php

http://example.com/index.php にアクセスしてHello HHVM!!と出れば基本設定は完了です。



502 Bad Gatewayが出た場合

hhvm fastcgiの設定が間違えている or fastcgiサーバを起動できていない可能性があります。fastcgi鯖のポートを9000から変更した場合は、各種設定を見なおしてみてください。