あるウェブサイトのバックアップをローカルのテスト環境で動かそうとしたら、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
- あとで 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)