Wordpressの移行作業したときの覚書

· 2 min read
Wordpressの移行作業したときの覚書

学習発表用のこのWordpressですが、公開してるVMサーバのスペックが低いので
閲覧や編集するのに重すぎる状態です。
家庭用の回線なので表示に時間がかかり、ストレスが溜まるので
環境が安定している借りているVPSにWordpressを移行したときのメモ書きです。

概要

・移行元のサーバ
CentOS6.6
Apache2.2
MySQL5.1
PHP5.3

・移行先のサーバ
CentOS6.8
Nginx1.11
MySQL5.1
PHP5.6

OSやMYSQLのバージョンは同じ、PHPは移行先のサーバのバージョンが上。
大きく変わるのがWebサーバソフトウェアがApacheからNginxになること。
また、PHP-FPMでPHPを呼び出すので、通常の設定とは異なることが挙げられます。

作業の流れ
  1. DBのバックアップ取得(移行元)
  2. WordPressディレクトリのコピー(移行元→移行先)
  3. バックアップを取得したDBの流し込み(移行先)
  4. コピーしたWordpressディレクトリの権限変更
  5. NginxでWordpressを表示する為の各種設定変更
作業内容

1. DBのバックアップ取得

MySQLはバージョン同じなので一番手っ取り早くmysqldumpを使いました。
dumpしたDBはSCPで移行先サーバにコピー。

mysqldump -u root -p wpdb > dump.sql

2. WordPressディレクトリのコピー(移行元→移行先)

コピー方法はいろいろ考えましたが、ここはSSH経由でrsyncを利用します。
オプションがごっちゃりしてますが、ディレクトリ権限の状態はそのまま、通信を圧縮して、見やすく、結果を表示しながらrsyncするということになります。

rsync -avuhz -e "ssh -p22 -i /home/harada/default.pem" /var/www/html/wordpress/ harada@hdserver.mydns.jp:/home/harada/wordpress/

コピー先の /home/harada/wordpress/ ディレクトリはharadaユーザの書き込み権限がないとエラーが出るので、予め権限周りの設定をしておきます。

3. バックアップを取得したDBの流し込み(移行先)

dumpを流し込むデータベースを作成:

mysql -u root -p
create database wpdb;

dump流し込み:

mysql -u root -p wpdb < dump.sql

4. コピーしたWordpressディレクトリの権限変更

オーナーはroot、ファイルすべてに実行権限を与えました。
※セキュリティも考慮して、最終的に権限周りは調整します。

chown -R root.root wordpress/
chmod 755 wordpress/*

5. NginxでWordPressを表示する為の各種設定変更

Nginxでは .htaccess が使用できないので、それに合わせて新たにconfファイルを作成します。
また、移行先のサーバでは既に別サイトが構築されているので、それとは別で運用する必要があります。

# WordPress Site
server {
    listen       80;
    server_name   hdserver.mydns.jp;

    location ^~ / {
        alias /usr/share/nginx/html/wordpress;
        index index.php index.html index.htm;
        try_files $uri $uri/ /wordpress/index.php?$args;
    }

    location ~* /wp-config.php {
        deny all;
    }

    location ~* /wp-login\.php|/wp-admin/(^admin-ajax\.php) {
        auth_basic "Auth Basic";
        auth_basic_user_file "/etc/nginx/conf.d/.htpasswd";
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_split_path_info ^(/wordpress)(/.*)$;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $request_filename;
        include        fastcgi_params;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_split_path_info ^(/wordpress)(/.*)$;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $request_filename;
        include        fastcgi_params;
    }
}

設定確認:

nginx -t
/etc/rc.d/init.d/nginx reload

おしまい。

このNginxのconfファイルの設定が一番大変でした。
phpの設定を入れ子で記載する方法に辿り着くまでかなり時間がかかってしまいました。
apacheをバックエンドに置いてリバースプロキシさせる方法も考えましたが、既存のNginxだけの環境で動かしたかったのでがんばりました。

なお、PHPの設定が現状不完全なので、ページによってはエラーが出たり正しく表示できなかったりしますが、致命的なバグは発生していないのでよしとします。
ぼちぼち修正していきます。