「さくらのVPS 2G」+ Ubuntuで”WordPress on nginx with FastCGI”環境を構築する
さくらのVPS 1.5Gから、さくらのVPS 2Gへ移行した時の作業メモです。基本的に上から下に向かって作業しています。
OSをUbuntuに入れ換え、Webサーバとしてnginxを使用し、WordPressを高速に、且つ安定して稼働させるのが目標です。
あくまで自分用メモですので、内容の正当性は保証しません。特にnginxは初めてのチャレンジなので「正しくない」設定の可能性があります。
このメモは随時更新されます。参照する場合は参考までにどうぞ。
申し込み
「VPS(仮想専用サーバ)のさくらインターネット」から、「さくらのVPS 2G」の利用申請。
申し込み再開初日(2012年4月2日)だったこともあり、VPS稼働を告げるメールが届くまで1時間ほど掛かった。
OS再インストール
初期OSであるCente OSをUbuntuに差し替える。
VPSコントロールパネル → OS再インストール → カスタムOSインストールへ → Ubuntu 10.04 i386
OSインストールは「SAKURA Internet // サポート – オンラインマニュアル – カスタムOSインストールガイド : Ubuntu 10.04」を見ながらやれば間違いない。
SSHセットアップ
SSH接続用の鍵ペアを作成し、秘密鍵をローカルにコピーする。
$ cd ~ $ ssh-keygen $ touch .ssh/authorized_keys $ cat .ssh/id_rsa.pub >> .ssh/authorized_keys $ cat .ssh/id_rsa # id_rsaをコピペ後、id_rsa.pubとid_rsaを処分 $ chmod 700 .ssh $ chmod 600 .ssh/*
sshの設定を変更する。
$ sudo vi /etc/ssh/sshd_config
file: sshd_config
    Port xxxx   #任意の番号に変更する
    PasswordAuthentication no
ssh再起動。
$ sudo service ssh restart
nginxのインストール
aptのリストに最新版のnginxを追加する。
$ sudo vi /etc/apt/sources.list
file: /etc/apt/sources.list
    deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main
公開鍵を登録する。
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
リストが最新版に更新されたか確認する。
$ sudo aptitude update $ sudo aptitude show nginx Package: nginx State: not installed Version: 1.0.14-0ppa1~lucid
nginxのインストール。
$ sudo aptitude install nginx
nginx設定ファイルの編集。
$ sudo vi /etc/nginx/sites-available/default
file: /etc/nginx/sites-available/default
server {
        listen   80; ## listen for ipv4; this line is default and implied
        #listen   [::]:80 default ipv6only=on; ## listen for ipv6
        #root /usr/share/nginx/www;
        root /home/hide10/www;
        index index.php index.html index.htm;
        # Make site accessible from http://localhost/
        server_name www.hide10.com;
        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to index.html
                try_files $uri $uri/ /index.php$args;
        }
        #error_page 404 /404.html;
        # redirect server error pages to the static page /50x.html
        #
        #error_page 500 502 503 504 /50x.html;
        #location = /50x.html {
        #       root /usr/share/nginx/www;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        #       # With php5-cgi alone:
                fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
        #       fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}
変更後に設定再読み込み。
$ sudo service nginx reload
エラーが出る場合は下記を参考に「/etc/nginx/fastcgi_params」を修正。
+ set $https off;
+ if ($scheme = https) {
+ set $https on;
+ }
php + fastCGIのインストール
必要なPHP関連パッケージをインストール。
$ sudo aptitude install python-software-properties $ sudo add-apt-repository ppa:nginx/stable $ sudo add-apt-repository ppa:brianmercer/php5 $ sudo service php5-fpm start
$ sudo aptitude install php5 php5-fpm php5-mysql php5-memcached php5-memcache php5-curl php-apc php-pear php5-mcrypt phpmyadmin memcached mysql-server mysql-client
☆ ubuntu10.04にnginxとphp-fpmを入れてwordpress動かす | tjun memo
☆ さくらVPS+ubuntu+wordpressにnginx入れたメモ | tjun memo
☆ さくら VPS の Ubuntu 10.04 に nginx + PHP(FastCGI) な Web サーバーを構築する | 暇人じゃない
☆ さくらVPSのWordPressをチューニングして30倍高速化した方法
☆ さくらのVPS2G(v3)で、Nginx + PHP5-fpm の環境を構築する方法 | NO AC.Milan, NO LIFE
WordPress用データベースの作成
“DB_NAME", “USER-NAME", “PASSWORD-USER"は、wp-config.phpに設定する値。
$ mysql -u root -p
    # パスワード入力
mysql> create database DB_NAME;
mysql> create user USER-NAME@localhost identified by 'PASSWORD-USER';
mysql> grant all on DB_NAME.* TO USER-NAME@localhost;
mysql> exit
phpMyAdminのインストール
phpMyAdminのインストール。
$ sudo aptitude install phpmyadmin
    #Apache2 → Yes → パスワードx2
nginxの設定を変更して、/phpmyadminでアクセスできるようにする。
$ sudo vi /etc/nginx/sites-available/default
    file: /etc/nginx/sites-available/default
    server {
+        location /phpmyadmin {
+            root /usr/share;
+            index index.php index.html index.htm;
+            location ~ ^/phpmyadmin/(.+\.php)$ {
+                try_files $uri =404;
+                root /usr/share/;
+                fastcgi_pass 127.0.0.1:9000;
+                fastcgi_index index.php;
+                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+                include /etc/nginx/fastcgi_params;
+            }
+            location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
+                root /usr/share/;
+            }
+        }
+        location /phpMyAdmin {
+                rewrite ^/* /phpmyadmin last;
+        }
    }
$ sudo service nginx restart
本当は /phpmyadmin に認証を掛けたかったけど、良く分からなかったのでスルー。必要がなくなったらアクセス出来ないようにする。
WordPress用データベースのインポート
うちはDBファイルが28MBもあるので、upload_max_filesizeの設定を変更する。
$ sudo vi /etc/nginx/sites-available/default
    [ file: /etc/nginx/sites-available/default ]
            location ~ \.php$ {
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
            #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
            #
            #       # With php5-cgi alone:
                    fastcgi_pass 127.0.0.1:9000;
            #       # With php5-fpm:
            #       fastcgi_pass unix:/var/run/php5-fpm.sock;
                    fastcgi_index index.php;
+                    fastcgi_param PHP_VALUE "
+    upload_max_filesize = 100M
+    post_max_size = 100M
+    ";
                    include fastcgi_params;
            }
(なにかもう1個所設定を変えた気がするが忘れた…)
設定変更後、phpMyAdminを利用して、データベースファイルをインポートする。
インポート作業終了後は /etc/nginx/sites-available/defaultを再編集して、/phpmyadmin にアクセスできないようにする。
WordPressのインストール
ゴミを減らすため、新たにインストールし直し、必要なファイルのみ旧サーバからコピーする。
$ wget http://ja.wordpress.org/latest-ja.tar.gz $ tar zxf latest-ja.tar.gz $ mv wordpress /home/user01/www
wp-config.phpを旧サーバから上書きコピー。
https://api.wordpress.org/secret-key/1.1/salt/ にアクセスして取得したキーに書き換える。
ドメイン移行中は、wp-config.phpに下記設定を追加すると、DBの設定にかかわらず任意のURLで動作する。
    define('WP_SITEURL', 'http://example2.com');
    define('WP_HOME', 'http://example2.com');
その他、必要と思われるファイルをコピー。
WordPressのSSH2接続
「WordPress: SSH2の暗号鍵を使った自動アップデートを有効にした – Hinemosu」を参考に、SSH2を使ったWordPressアップデートをセットアップする。
$ sudo aptitude install libssh2-ph $ sudo service php5-fpm restart
wp-config.phpを編集し、WordPressのアップデート情報入力を省略する。
$ vi /home/user01/public_html/wp-config.php
    #file: wp-config.php
    define('FTP_PUBKEY','/home/user01/.ssh/id_rsa.pub');
    define('FTP_PRIKEY','/home/user01/.ssh/id_rsa');
    define('FTP_USER','user01');
    define('FTP_PASS','');
    define('FTP_HOST','localhost:xxxx');
ロケールを ja_JP.UTF-8 にする
$ sudo apt-get install language-pack-ja $ sudo locale-gen ja_JP.UTF-8 $ sudo update-locale LANG=ja_JP.UTF-8 $ export LANG=ja_JP.UTF-8
WP Super Cacheのインストール
「WP Super Cache」をインストールし、適切に設定する。
ntpセットアップ
ntpインストール後、ntpサーバを変更する。
$ sudo aptitude install ntp
$ sudo vi /etc/ntp.conf
    #file: ntp.conf
    server ntp.jst.mfeed.ad.jp
$ sudo service ntp restart
# ntpが実行されるまで、しばらく待つ
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp2.jst.mfeed. 210.173.176.4    2 u    1   64   77    8.787    1.360   0.296
#行頭が * だったら接続成功
muninインストール
サーバの状態監視ツール munin のインストール。「[Linux][Ubuntu][サーバ] サーバの状態監視ツール munin のインストール – Secondary Storage」を参考にしました。
$ sudo aptitude install munin munin-node
$ sudo vi /etc/munin/munin.conf
    #file: munin.conf
    htmldir /home/hide10/www/munin/
    [hide10.com]
$ cd ~/www
$ mkdir munin
$ sudo chown munin:munin munin
$ sudo -u munin vi /home/user01/public_html/munin/.htpasswd
    # http://www.luft.co.jp/cgi/htpasswd.php で作成したパスワードを貼り付ける
    munin:******
$ sudo service munin-node restart
muninにmysql監視を追加
「MuninでMySQLも監視 – Hinemosu」を参照のこと。
mysqlのWordPress用チューニング
「WordPress用のMySQLチューニングにチャレンジしてみた – Hinemosu」も併せて参照のこと。
$sudo vi /etc/mysql/my.cnf
    # file: my.cnf
-   key_buffer              = 16M
-   #max_connections        = 100
-   #table_cache            = 64
+   key_buffer              = 256M
+   max_connections        = 200
+   table_cache            = 256
MO Cacheインストール
「WordPress › APC Object Cache Backend « WordPress Plugins」をダウンロードし、"object-cache.php"を"wp-content/"フォルダに設置する。
その後、「WordPress › MO Cache « WordPress Plugins」をインストールし、プラグインを有効化する。
特定ディレクトリにBasic認証を掛ける
.htpasswdの生成。
$ sudo vi /etc/nginx/.htpasswd
    # http://www.luft.co.jp/cgi/htpasswd.php で作成したパスワードを貼り付ける
    munin:******
basic認証の設定。
$ sudo vi /etc/nginx/sites-available/default
    [file:/etc/nginx/sites-available/default]
    server {
+        location ^~ /munin/ {
+            auth_basic  "basic authentication";
+            auth_basic_user_file /etc/nginx/.htpasswd;
+        }
    }
nginx再起動。
$ sudo service nginx restart
ApacheBenchで性能テスト
現状の性能確認のため、ApacheBenchでテストする。
詳細は「さくらのVPS 2G、”WordPress on nginx with FastCGI”でApache Bench – Hinemosu」参照のこと。
worker_processesの設定
CPUコアの数によってnginx.confのworker_processesを調整する必要があるらしい。
$ sudo vi /etc/nginx/nginx.conf
    user www-data;
-   worker_processes 4;
+   worker_processes 3;
+   worker_cpu_affinity 001 010 100;
    pid /var/run/nginx.pid;
変更後にabテストしてみたけど、特に変わりはないみたい?
アクセスログ解析ツールのインストール
Visitorsでアクセスログを解析する。
詳細は「nginxでvisitorsを使う | Hinemosu」を参照。
ToDo
- nginxのプロキシキャッシュ設定
 - 毎日18時にサーバ負荷が増加する原因を確認する
 




ディスカッション
コメント一覧
なんで、W3TCではなく、WP Super Cacheなの?
コメントありがとう。
何ヶ所かでWP Super Cacheの方が速いと言う情報を聞いたので、それならばとWPSCを選びました。