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