ローカルにLAMPでWordPressのバックアップを動かそうとしたら

あるウェブサイトのバックアップをローカルのテスト環境で動かそうとしたら、WordPress のバックアップが動作するまで大変でした。慣れていれば、どうということのない設定なのでしょうが、メモしておきます。間違ったことを書いているかもしれませんが、あしからず。

WordPress のバックアップ

WordPress の解説サイトにしたがって実行。

稼働中のサイトのファイル一式を Filezilla でダウンロード。デフォルトではテキストとバイナリが自動判別なので、常にバイナリの設定にしておいたほうが楽。

データベースのダンプは、不要で巨大なテーブルは外しておかないと、phpMyAdmin で読み込めるサイズに収まらない(ことがある)。

LAMP 環境のインストール

仮想マシンに載せる。サーバへのアクセスはローカルのマシンからしか実行できないという前提の状態。

ホストは Windows 8.1 Update、64bit の自作PC

仮想マシンは Oracle VirtualBox 4.3.10

ゲストは Linux Mint 16 (Petra) Mate, 64 bit

メニューから「ソフトウェアの管理」( mintInstall 7.5.2 ) で、Apache、MySQL、PHP をインストール。だいたいの手順は、

  • Installing LAMP (Linux, Apache, MySQL and PHP) On Linux Mint – Linux Mint Community
    • Apache 2
      • apach2
        • “It works!” 確認。
      • あとで apache2-doc も導入。http://localhost/manual で日本語マニュアルが読める。
    • PHP 5
      • php5
      • libapache2-mod-php5
        • Apache2 を再起動
        • /var/www/testphp.php の中身: <?php phpinfo(); ?> を表示テスト
      • php5-cli (コマンドライン インタプリタ. 端末での作業用)
    • MySQL
      • mysql-server
        • 「MySQL の “root” ユーザに対する新しいパスワード」を求められるので入力
      • php5-mysql
      • phpmyadmin
        • apache2 自動設定させる
        • 「データベースの管理権限を持つユーザのパスワード」入力
      • なお、libapache2-mod-auth-mysql は存在しない
      • /etc/php5/apache2/php.ini を編集
        • ;extension=msql.so → extension=msql.so (頭の ; を外す)
      • Apache 2 再起動
      • http://localhost/phpmyadmin
        • mcrypt 拡張がありませんと警告。(一応入れてみたが、よくわからない。放置中)

ローカルのテスト環境の設定

ここから多重に間違い設定をして数日間の遠回りをしたが、試行錯誤の細かいことは省略。

ローカルで、 http://dev.example.com/ でアクセスすることを仮定する。example.com にあたるところは、実際には私が実質管理しているドメイン。

phpMyAdmin で、元のサイトの状態のデータベース名・ユーザ名・パスワードで、作成。wp-config.php 参照。バックアップの SQL 読み込み。WordPress 公式の引越しに関する解説を参照。

phpMyAdmin で、データベースの wp_options テーブルの siteurl を http://www.example.com/wp から http://dev.example.com/wp に変更。

ファイル一式を(Filezilla でバイナリ扱いでダウンロードして)適当なディレクトリに置く。例えば、

/home/myusername/dev.example.com/web/

としておく。ここがローカルのウェブサイトのルート ディレクトリになる。WordPress は

/home/myusername/dev.example.com/web/wp/

にあるものとする。これらのディレクトリやファイルは Apache が読み書きできるようにしておく。WordPress から .htaccess の生成や書き換えができる必要あり。ほかにもファイルの書き込み権限が必要なことが多い。

テスト用の URL でアクセスできるように、/etc/hosts ファイルのローカル・ループバックを書き換える。

127.0.0.1    localhost

を、例えば、

127.0.0.1    localhost   dev.example.com

のように、ずらずらと追加していけばよい。localhost の IP アドレス 127.0.0.1 で複数のバーチャルホストを運用できる。もちろん、ローカルのテスト環境用で、外向きのサーバではない。

ここに記したホスト名を Apache に設定していく。

設定に関しては、まず、

/etc/apache2/apache2.conf

を読む。debian の conf はかなりカスタマイズされているらしく、次のドキュメントを参照せよと書いてある。

/usr/share/doc/apache2/README.Debian ( *.gz 解凍)

およそのしくみは、 利用可能な設定ファイル群を、dev.example.com.conf といった任意の名前で、ディレクトリ /etc/apache2/sites-available に書いておき、有効にしたい設定ファイルのリンクだけを /etc/apache2/sites-enabled/ ディレクトリに置くと Apache の設定ファイルの一部として読み込まれるようになっている。有効/無効の切り替え(リンクの作成/削除)はコマンドが用意されていて、

  • a2ensite で有効に(リンクが /etc/apache2/sites-enabled に作成される)
  • a2dissite で無効に(リンク削除)

名前順で最初に読み込まれるサイト設定ファイル 000-default.conf がデフォルトの設定ファイルで、 /var/www/ にある内容が表示されるようになっている。このファイルは残しておく。バーチャルホストの設定に失敗した時に表示される場所になる。

/etc/apache2/sites-available/000-default.conf

このデフォルトのファイルをコピーして書き換える。ファイル名は例えば dev.example.com.conf  としておくが、デフォルトのファイル名より後ろになれば、なんでもよい。コメント行(#…) を除くと、次のような内容。

<VirtualHost *:80>
ServerName dev.example.com
ServerAdmin webmaster@localhost
DocumentRoot /home/myusername/dev.example.com/web/
<Directory /home/myusername/dev.example.com/web>
Require all granted
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<Directory …> … </Directory> は 000-default.conf には存在しない。追加したもの。

Require all granted については、これがないとブラウザでアクセスした時に「Forbidden」エラーになった。

Apache 2.4 から大きく変わったらしく、検索してみつかりやすいのは 2.2 までの書式。ただし、2.4 でも従来の書式を有効にできるらしいので、2.4 の設定例だからといってそのまま使えるかどうかはわからない。

AllowOverride All については、これがないと、「パーマリンクの設定」が「デフォルト」以外の時に、ブラウザでアクセスした時に「Not Found」エラーになった。.htaccess が効かなくなるので、mod_rewrite が効かない状態になってしまう。

上記のような内容のサイト設定ファイルを作ったら、a2ensite で有効にして、Apache に読み込ませておく。

sudo a2ensite dev.example.com.conf
sudo service apache2 reload

インストール直後のデフォルトでは mod_rewrite が読み込まれない設定になっているので、有効にしておく。

apache2ctl -M

でモジュールを調べると、デフォルトでは mod_rewrite は読み込まれていないことがわかる。また、

/etc/apache2/mods-enabled

にも存在しない。

/etc/apache2/mods-available/rewrite.load

は存在している。これを有効にする。

sudo a2enmod rewrite
sudo service apache2 restart

 

なお、このような設定方式は他に、

/etc/apache2/conf-available/phpmyadmin.conf
/etc/apache2/conf-enabled/phpmyadmin.conf

でも使われている。phpMyAdmin のための .conf はここから読み込まれるようになっている。

(2014/5/1)

WordPress 本体とプラグインの更新

wp-config.php の下の方に追記すれば、ftp サーバがなくても更新できる。

define('FS_METHOD', 'direct');

upgrade 用のディレクトリは Apache ( www-data ) が書き込めること。どのディレクトリかはエラー メッセージですぐわかる。ローカルの環境ではパーミッションや所有者の書き換えは簡単なので、よしとしておく。

vsftpd などのサーバを入れてもよいが、設定ファイルの編集がやや面倒。

(2014/5/2)