「さくらの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を選びました。