ConoHa VPS での CentOS 6.4 + nginx + php-fpm + Zend Framework 1系

さて、ConoHa VPS で CentOS 6.4 + nginx + php-fpm という環境を構築してみよう。ちなみに、動かすシステムは Zend Framework 1系で作ってあって、アクセスを /index.php に rewrite してあげる必要がある。このへんのことも書く。

nginx のインストール

ConoHa VPS で標準インストールされてる CentOS 6.4 には EPEL リポジトリが最初から追加してあった(/etc/yum.repos.d/epel.repo)。なので yum list | grep nginx とすると nginx 1.0 系のパッケージが見つかる。でもこれは古い。

最新の nginx を yum でインストールするには yum に nginx のリポジトリを追加してあげるといいらしい。/etc/yum.repos.d に nginx.repo という名前で以下のテキストファイルと作ってあげる。


# vi /etc/yum.repos.d/nginx.repo

($brush:plain)
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

nginx.repo を保存したら yum で nginx の最新版がインストールできる。


# yum list | grep nginx
nginx.x86_64                            1.4.2-1.el6.ngx                 @nginx

1.4.2 というのが当時の最新版だった。さて、インストール。


# yum install nginx

php-fpm のインストール

php-fpm は yum で簡単にインストールできる。


# yum install php-fpm

ちなみに、php-fpm の他にインストールした php 関連のパッケージは以下


# yum list installed | grep php
php.x86_64                           5.3.3-23.el6_4                     @updates
php-cli.x86_64                       5.3.3-23.el6_4                     @updates
php-common.x86_64                    5.3.3-23.el6_4                     @updates
php-devel.x86_64                     5.3.3-23.el6_4                     @updates
php-fpm.x86_64                       5.3.3-23.el6_4                     @updates
php-gd.x86_64                        5.3.3-23.el6_4                     @updates
php-mbstring.x86_64                  5.3.3-23.el6_4                     @updates
php-mysql.x86_64                     5.3.3-23.el6_4                     @updates
php-pdo.x86_64                       5.3.3-23.el6_4                     @updates
php-pear.noarch                      1:1.9.4-4.el6                      @base
php-pecl-apc.x86_64                  3.1.9-2.el6                        @base
php-xml.x86_64                       5.3.3-23.el6_4                     @updates

apc もインストールしてる。

さて、nginx と php-fpm を構成しよう。

/etc/php-fpm.conf はデフォルトのまま。

/etc/php-fpm.d/www.conf


; user/group を nginx に変更
user = nginx
group = nginx

; ConoHa の 1GB プランなので以下の設定で様子を見る
pm = dynamic
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500

/etc/nginx/nginx.conf


http {
    ~略~

    # localhost (127.0.0.1) からのアクセスを識別する
    geo $lh {
        default       0;
        127.0.0.1/32  1;
    }

    # サーバーの詳細を出力しない
    server_tokens off;
}

/etc/nginx/conf.d/default.conf


server {
    listen       80;
    server_name  localhost;

    # バッファサイズを変更 8k → 16k
    proxy_buffering    on;
    proxy_buffer_size  16k;
    proxy_buffers      8 16k;

    # ドキュメントルートを /data/www/html にする
    root   /data/www/html;

    # インデックス設定
    index  index.php index.html;

    # ドキュメントルートの構成
    location / {
        # localhost (127.0.0.1) からのアクセスをログに残さない
        if ($lh) {
            access_log  off;
        }
        # ファイルがなかったら /index.php にリライトする
        if (!-e $request_filename) {
            rewrite ^.*$ /index.php last;
        }
    }

    # php スクリプトの構成
    location ~ \.php$ {
        # localhost (127.0.0.1) からのアクセスをログに残さない
        if ($lh) {
            access_log  off;
        }
        # /etc/php-fpm.d/www.conf の listen の値を指定
        fastcgi_pass   127.0.0.1:9000;
        # インデックス設定
        fastcgi_index  index.php;
        # パスをドキュメントルートと同じにする
        fastcgi_param  SCRIPT_FILENAME  /data/www/html$fastcgi_script_name;
        # これはテンプレートと思う
        include        fastcgi_params;
    }
}

上記設定ファイルで、Zend Framework 1系用の rewrite がうまくいってる。ただし、運用したてなのでパフォーマンスのチューニングはまだ途中... という感じ。php-apc の設定とあわせて、うまいところを見つけてあげないとなーと。

何かの参考になれば。

ConoHa を使うことにした

たまに重いことがあるロリポップで運用していた Web サーバーを移管したいなと思うようになった。ちなみに www.koji27.com ではなく別のサーバー。www.koji27.com は長らくホスティングしていたサーバーからロリポップに移管させたばかりだし、アクセスも少ないし特別なことしてないしこのままでいい。

そのサーバーは php でバリバリサービスを提供しているので... もうちょっとなんか別のサーバーにしたいなと思った。アクセスもどんどん増えてるし。

もっと値段の高いレンタルサーバーにするとか、いっそ PaaS にしちゃえば?とか、いや、そもそも VPS で自分で環境構築するとかどうよ?とか、いろいろ考えた。

基本、ssh で接続できて apache + mod_php が動けばいい。メールもしてなければ MySQL も使っていない。これだったら VPS で自分で環境構築しても負担は少ないんじゃ? って思うようになってきた。VPS はサーバーとしての環境の構築と維持を自分でする必要があるけど、個人向けに安くなっている物もある。

で、新しい VPS に飛びついてみようかなと思った。GMO の ConoHa ってやつ。

紹介ページになんかアニメキャラが出てくるけど、中身はいたって普通(?)の VPS じゃないかと。コンパネにまでキャラは入りこんでいない。Microsoft のクラウドガールみたいな感じにしたいのかなとか思った。まあ、そこはどうでもいい。意味不明なキャラがでてくる Web 系サービスはロリポップで慣れた。

個人用としては金額的にも中身的にも新しいとい点でもなかなかの魅力的なサービスだと思った。さて、とりあえずは15日の無料期間を使って環境構築してみよう。

課金のタイミングは VPS を作成して、無料期間(15日)が終了した時らしい。アカウントを登録しただけでは課金されない。そして、作成した VPS も無料期間中に削除すれば課金されない。同時に 5 台の VPS という制限はあるみたいだけど、何度でも無料体験できるっぽい。

さて、VPSを作ってみよう。OS は標準で使い慣れた CentOS 6.4 の 64bit 版が入る。初期設定は ここ とか ここ を参考にした。とりあえず、リモートからの root ログインは禁止した方がいいと思う。ちなみに、SELinux は無効化されていた。まあ、これはこれでいいかな...

VPS には最初から apache(httpd) が入っていた。自動起動にはなっていなかったけど。そして、postfix がなぜか自動起動されていた。postfix は使わないので停止。アンインストールは... まあ、今はしなくてもいいか。

※追記2014/02/27
postfix は停止しない方がいいようだ。今は動かしてる。

基本、パッケージのインストールは全部 yum でしている。ソースからインストールとかは維持していくのが面倒。yum update でいいじゃないかと思う。

CentOS で apache + mod_php の環境は簡単に構築できる。ConoHa の VPS 最小プランだと、/ は 18GB しか容量がなく、/data に 80GB くらいがマウントしてある。80GB は /var にマウントしてくれればいいのに... とか思わなくもないが、マウントポイントはそのままに、httpd の DocumentRoot を /data 以下に作ることにした(たとえば /data/www/html にするとか)。

さて、httpd の起動も確認できたし自前のシステムをインストールして動かしてみよう。どんな感じかな... お、ロリポップより動作がきびきびしている。これ、いいんじゃない?

まあ、約1000円/月のサービスだし、約600円/半年のロリポップより遅かったらこまるんだけどね...

その他いろいろ実験してみた結果。VPS だとリソースが許す限り cron を自由に設定できるし、自前システムの構成的に cron を使って定期的にキャッシュを作ってあげるとユーザーの快適度も上がるし、1000円/月くらいだったら広告費で十分稼げるし、仮想であってもサーバー1台自由にできるってのはやっぱり魅力的だし... ConoHa への移行を決定することにした。

さて、移行が決定したのでテストで作った仮想サーバーはいったん削除。新しい仮想サーバーを作って、それを移行先サーバーとして構築すべく、15日の無料期間をフルに活用してやろう。そして... どうせ VPS で自前で環境構築するなら apache + mod_php じゃなくて、最近流行り(?)の nginx + php-fpm にしてやろう。とか考えた。

で、今は nginx + php-fpm で環境作ってロリポップから移行して数日... という感じ。チューニングもいろいろしたし、システムの体感速度は良くなっている。リソース的にも今のアクセス数だったら全然余裕。増えてくアクセスにもこれなら十分対応できそう。

だからと言って「apache + mod_php より nginx + php-fpm のが全然いい!」 ってワケでもないとは思う。だってこれを機会にシステム側のチューニングもしたし。cron でキャッシュもしてるし。なんといっても apache + mod_php は情報もノウハウもいっぱいあるし。nginx + php-fpm はまだ日本語の情報少ない。ただ、構築してみての満足感は高い!

ってことで、ConoHa VPS での CentOS 6.4 + nginx + php-fpm + Zend Framework 1系 という組み合わせでの構成例次回書く。

Recent articles

Categories

Monthly archive

  • (Empty)