ローカルに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)

仮想マシンに LAMP を入れる tasksel

ローカルな仮想マシンに LAMP を入れます。LAMP は Linux、Apache、MySQL、PHP ですね。

ホストは Windows 7 Ultimate、VirtualBox で Linux は Ubuntu 10.04 desktop です。個人でローカルに動かして試すだけなら、Ubuntu server よりも desktop にサーバを入れたほうが日本語等の扱いが楽だと思います。試しに Ubuntu server を入れるなら、まずは英語にしておくのが無難です。

なお、以下、セキュリティは考慮していません。

tasksel で一括インストール

Apache、PHP、MySQL については順に一つずつインストールしてもかまいませんが、tasksel コマンドを使えば、一括で入れることができます。ターミナルで、

sudo tasksel

で、ソフトウェアの選択画面が出るので、上下の矢印で項目を移動し、

[*] LAMP server

にスペースキーでチェック [*] を入れます。[tab] キーで <了解> に移り、[Enter] 。

MySQL の root のパスワードを求められるので入力します。

あとは放っておくとインストールされます。

cf.

動作確認

Apache

Apache (httpd) は Firefox を立ち上げて、http://localhost/ にすると 「It works!」と表示されます。

その index.html は /var/www/ にあります。

ユーザ名が USERNAME なら、

cd /var/
sudo chown USERNAME -hR www

などとしておくとよいかもしれません。

PHP

taskset でインストールした場合(個別にインストールした場合も)、直後はまだ apache が PHP を認識していないので、再起動します。

sudo /etc/init.d/ apache2  restart

適当につくった PHP ファイルを実行させてみます。たとえば、

<?php

print(“hello\n”);

?>

を /var/www/hello.php と名前をつけて保存、ブラウザで URL に http://localhost/hello.php を指定すると、hello と表示されます。(上の例をコピー&ペーストするときは、二重引用符「”」のコードが書き換わっているかもしれないので、半角英数の通常の二重引用符で上書きすること)

環境設定一式を眺めるなら、次のような PHP が実用的です。ただし、セキュリティ上あぶないので、外部には公開しないことが前提です。

<?php

phpinfo();

?>

cf.

phpMyAdmin

MySQL を管理するのに phpMyAdmin をインストールします。

sudo apt-get  install  phpmyadmin

しばらくすると設定をきかれるので、

自動再設定をする web サーバ: [*] apache2

を選択。

phpmyadmin のデータベースを dbconfig-common で設定しますか? <はい>

<はい>を選択。

データベースの管理権限を持つユーザのパスワード:

パスワードを(複数回)入力。

apache を再起動します。

sudo /etc/init.d/ apache2  restart

ブラウザの URL に

http://localhost/phpmyadmin/

と入力すると、phpMyAdmin のログイン画面になります。上述の root のパスワードで入れます。ちなみに、information_schema、mysql、phpmyadmin の3つのデータベースが作られた状態でした。

cf.

(2010.11.10 – 2010.11.11)

このメモは Ubuntu 10.04 desktop の環境ですが、Ubuntu desktop 11.04 日本語版でもほぼ同じでした。(2011.8.9)

(2011.8.9) (一部修正・追記)