【PHP / MySQL】CoreServer から さくらのVPS へ WordPress の移行

CoreServer(共用サーバ)上の WordPress が遅いのは気になっていたけど放置していた。
年に一度の契約更新が近づいてきたので重い腰を上げて, さくらのVPS(Ubuntu14.04)に移行したのでメモ。

CoreServerでMySQLDumpを取得する

CoreServer の管理画面から MySQLDump を取得してダウンロードする。160MB程。

Ubuntu14.04に PHP + Nginx + MariaDB(MySQL) インストール

さくらのVPSで動かしているUbuntu14.04に環境を構築する。

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install php5 php5-cli php5-gd php5-fpm php5-mysql
$ php5 --version
PHP 5.5.9-1ubuntu4.9 (cli) (built: Apr 17 2015 11:44:57)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
$ sudo apt-get install nginx

php5-fpmの設定。

$ sudo vim /etc/php5/fpm/pool.d/www.conf
...
listen = 127.0.0.1:9000

listen.owner = nginx
listen.group = nginx

listen.allowed_clients = 127.0.0.1

user = nginx
group = nginx

pm = static
pm.max_children = 3
pm.max_requests = 500
request_terminate_timeout = 500

Nginxの設定変更。

$ sudo vim /etc/nginx/nginx.conf
...
server {
    listen       80;
    server_name  www.xxxxx.com;
    root         /var/www/public_html;
    index       index.php index.html index.htm;

    try_files $uri $uri/ /index.php?q=$uri&$args;

    location ~ \.php$ {
      fastcgi_pass            127.0.0.1:9000;
      fastcgi_index           index.php;
      fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_buffers 8 128k;
      fastcgi_buffer_size 256k;
      fastcgi_read_timeout 500;
      include                 fastcgi_params;
    }
}

php5-fpm, nginx を再起動する。

$ sudo service php5-fpm restart
$ sudo service nginx restart

MariaDBのインストール。

$ sudo apt-get install mariadb-server
$ mysql --version
mysql  Ver 15.1 Distrib 5.5.43-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
$ sudo service mysql status
 * /usr/bin/mysqladmin  Ver 9.0 Distrib 5.5.43-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Server version		5.5.43-MariaDB-1ubuntu0.14.04.2
Protocol version	10
Connection		Localhost via UNIX socket
UNIX socket		/var/run/mysqld/mysqld.sock
Uptime:			3 min 7 sec

取得していた MySQLDump を scp で Upload する。

$ scp -i ~/.ssh/id_rsa mysql.dump user@xxxx.vs.sakura.ne.jp:~/wordpress

DBを作成して Upload した Dump を import する。

$ mysql -u[user] -p[pass]
MariaDB [(none)]> CREATE DATABASE [db-name] CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

$ mysql mysql -u[user] -p [db-name] < mysql.dump

入れるか確認。

$ mysql -u[user] -p[pass] -D[db-name]

vsftpdは必須ではないので今回は省略。

WordPressの配置

今回は, WordPress の最新版ソースを持ってきて配置する。webサーバに Nginx を使うので所有者を nginx に変更することで管理画面から WordPress を更新できる。

$ wget https://ja.wordpress.org/wordpress-4.2.2-ja.zip
$ unzip wordpress-4.2.2-ja.zip
$ mv wordpress/ public_html/
$ rm wordpress-4.2.2-ja.zip
$ chown -R nginx:nginx /var/www/public_html/

CoreServer にある wp-content/plugins など必要なファイルは適宜 public_html/wp-content 以下に mv する。
管理画面からの画像のアップロードは, wp-content/uploads/に置かれるので権限を変更しておく必要あるかも。

また, Plugin によっては配置だけでは動かない場合もある。例えばWP QuickLaTeXはSVGのキャッシュ置場を作っておくことが必要になる。

$ cd public_html/wp-content
$ mkdir ql-cache
$ chmod -R 777 ql-cache

WordPressのアップデート [1] の際もいくつかのディレクトリ/ファイルの権限変更が必要になる。

wp-config.phpを変更する

WordPressの設定ファイル, wp-config.php を変更する。

$ vim wp-config.php
...
define('DB_NAME', '[db-name]');
define('DB_USER', '[user]');
define('DB_PASSWORD', '[pass]');
define('DB_HOST', 'localhost');

define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('DB_TYPE', 'mysql');
define('WP_SITEURL','https://www.xxxxx.com' );

DNSのレコード設定変更

ドメイン登録機関のレジストラ [2] は VALUE-DOMAIN を使っているので, ログインしDNSの設定を CoreServerのIPアドレス から, さくらのVPSで動かしている 仮想サーバのIPアドレス に変更する。移行先のIPアドレスは さくらのVPSのコントロールパネル からも確認できる。

a * [サーバのIPアドレス]
mx @ 10
txt @ v=spf1 ip4:[サーバのIPアドレス] ~all

変更がDNSサーバ間で同期されるまで待ってから さくらのVPSのコントロールパネル にログインして設定 > ホスト名逆引き登録で, ドメインを登録する。

設定が完了したら, dig コマンドで正引できるか確認する。

$ dig fisproject.net

; <<>> DiG 9.8.3-P1 <<>> fisproject.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 829
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;fisproject.net.			IN	A

;; ANSWER SECTION:
fisproject.net.		1200	IN	A	160.16.116.76

;; Query time: 136 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Sun Sep 25 10:45:07 2016
;; MSG SIZE  rcvd: 47

また, IPアドレスからホスト名を調べる逆引の場合は xオプション で確認できる。

$ dig -x 160.16.116.76

; <<>> DiG 9.8.3-P1 <<>> -x 160.16.116.76
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23170
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;76.116.16.160.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
76.116.16.160.in-addr.arpa. 3600 IN	PTR	fisproject.net.

;; Query time: 146 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Sun Sep 25 16:36:11 2016
;; MSG SIZE  rcvd: 71

Nginx を起動しブラウザからWebサイトにアクセスして移行できているか確認する。

速度比較

Test a website's performanceで性能を比較してみる。設定は初期設定のままで試した。

DNS Lookup, Initial Connectionまではほぼ同じだけど, First Byteが1.351sから0.850sに短縮した。共用サーバからVPSに変更したことで速度向上という期待通りの結果になった。


[1] レジストラは お名前.com など様々なので設定方法はサービスごとに異なる。お名前.comのDNS設定は ネームサーバーの設定 > DNSレコード設定 から。