wordpress サーバ移設作業メモ（ubuntu14.04LTS）

# 初めに

Ubuntu14.04LTS 間で wordpress を移設したときの個人的メモです。

## 移設理由

主たる理由はサーバ統合によるコストダウン。現状は負荷が少ないのでより安いサービスに移設する。

# wordpressのインストール

## 前提

* Ubuntu-14.04 LTSに、apt から apache と mysql がインストールされれている。
（個人的にはnginx とか marinaDBも試したいが時間がないのでパス）
* Global IPアドレス、もしくは、ルータやLoadBalancer等でインターネット側からアクセスで http 
アクセスができる

## インストール

今回は apt を使い、依存パッケージを含めてまとめてインストール。

```
$ sudo apt-get install wordpress
```

https://ja.wordpress.org/ から最新版をダウンロードする方法でもよい。

## Apacheの設定

* 今回は、別ドメインを使うので、VirtualHost 設定を利用。

```
$ vi /etc/apache2/sites-available/wordpress.conf

<VirtualHost *:80>
    ServerAdmin staff@example.com
    ServerName www.example.com
    RewriteEngine on
    DocumentRoot /var/share/wordpress/
    <Directory /var/share/wordpress/>
        Options FollowSymLinks
        AllowOverride Limit Options FileInfo
        DirectoryIndex index.php
        Require all granted
    </Directory>
</VirtualHost>
```

非公開コンテンツがある場合は、設定がおわるまでダイジェスト認証等をつけておいたほうが安心。

* 設定の有効化

```
$ ln -s /etc/apache2/sites-available/wordpress.conf /etc/apache2/sites-enable/wordpress.conf
```

* 設定ファイルの文法確認

```
$ apache2ctl configtest
Syntax OK
```

* 設定反映

```
$ /etc/init.d/apache2 graceful
```

* 動作確認

必要であれば、設定したホスト名でアクセスできるようにＤＮＳ設定を行う。
ＤＮＳ設定確認後、curlコマンドで http://www.example.com にアクセスする。

```
$ curl http://www.example.com
Neither /etc/wordpress/config-www.example.com nor /etc/wordpress/config-example.com could be found. 
Ensure one of them exists, is readable by the webserver and contains the right password/username.
```

まだ設定ファイルがないので、このエラーで正しい動作。

# WordPress設定

ここからが本題で、旧サーバの環境を移行します。

## ＤＢデータの移行

* DBデータのダンプ
 
phpMyAdminが便利ですが、セキュリティ的にあまり使いたくないのでコンソールから行います。

まずは移行元にsshログインしてmysqldumpでダンプを取得し、scp等で移行先にコピーする。。

```
mysqldump -h [mysqlDBhost] -u [user] -p --default-character-set=binary [DBname] > wpdump.sql
```

SSLアクセスができるなら、一時的にポートを開けてリモートからダンプする方法も使えます。

* DBアカウントの作成
 
移行先サーバにログインしＤＢアカウントを作成する。

* DBデータのリストア

URLが変更になる場合は、予め sed を使ってＵＲＬを変更する。エディタでも可能ではあるいが、修正ミスのおそれがあるのでお勧めしない。

```
$ sed -i 's|[旧URL]|[新URL]|' wpdump.sql
```

あたらしいサーバのデータベースにリストア

```
mysql -h HOST -u USER -p DBNAME < wpdump.sql
```

* データベース内容の修正

旧サーバへのリダイレクト設定を修正する場合は、「wp_options」というテーブルの「siteurl」と「home」という項目を更新する。

```
UPDATE wp_options SET option_value = 'http://wptest.example.com' WHERE option_value = 'http://wp.example.com';
```

（追記）
 ＤＢのＵＲＬ修正について
 
「[Search and Replace for WordPress Databases Script](https://interconnectit.com/products/search-and-replace-for-wordpress-databases/)]
を使うのが公式な方法です。データベースを直接書き換えるのは、事故の元にななるので、このツールを使うほうが確実でと思われます。

## コンテンツの移行

　作業時間節約のため、コンテンツは丸ごとコピーします。
まず旧サーバにログインして、WordPressのディレクトリを丸ごとコピー。

```
$ cd /usr/share/wordpress/
$ car cvfz /tmp/wpdump.tgz *
```

ＤＢダンプと同様、scp等で新サーバにコピーし展開

```
mv /usr/share/wordpress /usr/share/wordpress.orig
cd /usr/share/wordpress/ /usr/share/wordpress/
tar xvfz wpdump.tgz
cd /usr/share/wordpress/ /usr/share/wordpress/
```

* 設定ファイルの修正

/usr/share/wordpress/wp-config.php のデータベース名、ＤＢユーザとパスワードなどを新サーバに合わせて修正する

* 動作確認

ブラウザでアクセスしてみる。

# その他Tips

* WordPress更新時にFTP接続情報入力画面となる場合の回避方法。

ウェブサーバの実行権限と、wordpressのファイル権限が違いことで発生するらしい。ubuntuの場合 www-data で統一すれば解消できる。

```
sudo chown -R www-data:www-data /usr/share/wordpress/
```

ファイルオーナが書き換えられない場合は「wp-config.php」に以下の行を書着こむことでも可能

```
define('FS_METHOD', 'direct');
```

# 参考

 * https://help.ubuntu.com/lts/serverguide/wordpress.html