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

WordPress レッスンブック 3.x対応

こういうときはアフィリエイトのリンクを貼るものなんでしょうが……

書店に平積みされているだけあって、とても読みやすく、わかりやすく書かれています。オリジナルのテーマを一から作り上げてしまおう、徐々に作り込んでいこうという方法論で書かれています。

たぶん、こういうのはアジャイルな開発方法というんでしょう。

空の index.php と style.css ファイルを用意して、そこに一つ一つ書き加え、書き直していきます。一冊の終わりまでやれば、最低限、ブログや静的ページを表示できるテーマができあがります。コードの追加・修正箇所とともにスクリーンショットもあるので、パソコンなしに本だけでも何をやっているのかわかります。

慣れている人なら、数時間で読めてしまうかもしれません。もっとも、そういう人にはこの本は必要ないかもしれません。私は2日ほどかけて目を通しました。

WordPress が「テーマ」を介して、どのようにウェブサイトを表示しているのかわかります。WordPress のシステム、PHP、HTML、スタイルシートの関わりが見えてきます。

一通り通読すると、WordPress Codex 日本語版 や標準のテーマ Twenty Ten / Twenty Eleven が読めるようになっている…かもしれません。

(2011/8/15)

Apache2 mod_rewrite と AllowOverride

仮想マシン上の WordPress でパーマリンクをデフォルトの (?p=番号) 形式以外にすると動かない件、考えてみるに、

  • Apache mod_rewrite

が入っていないのかもしれません。

仮想マシンは Ubuntu 10.04 desktop に tasksel で Apache、PHP、MySQL を入れたもので、WordPress の動作要件を調べていませんでした。

Apache の mod_rewrite が入っているかどうかの調べ方ですが、ターミナルで httpd -l としたら、そんなコマンドはありませんと言われてしまいました。

$ ps -e

でプロセスを調べたら、 apache2 という名前でした。

$ apache2 -l

Compiled in modules:
core.c
mod_log_config.c
mod_logio.c
prefork.c
http_core.c
mod_so.c

ということで、静的には mod_rewrite が入っていません。しかし、 mod_so があるので動的にロードしているかもしれません。

動的なモジュールも表示してくれる apache2 -M は受け付けてくれませんでした。どうやら、 apache2ctl というコマンドを使うようです。

$ apache2ctl -v  (バージョン)
$ apache2ctl -V (バージョン、環境)
$ apache2ctl -l  (静的モジュール)
$ apache2ctl -M  (静的・動的モジュール)

どれも実行可能でした。

$ apache2ctl -v
Server version: Apache/2.2.14 (Ubuntu)
Server built:   Sep 28 2010 12:52:38

Apache2 のバージョンは 2.2.14 ということです。

「動的共有オブジェクト (DSO) サポート」というそうですが、今動いているモジュールを調べると、

$ apache2ctl -M
apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
Loaded Modules:
core_module (static)
log_config_module (static)
logio_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)
Syntax OK

残念ながら mod_rewrite は入っていないようです。

それで、モジュールをどうやって有効にするのか。

Google 「ubuntu apache2 mod_rewrite」

と検索したら、

$ sudo a2enmod rewrite

とするようです。man a2enmod で調べると、逆は a2dismod だそうです。実行すると、

$ sudo a2enmod rewrite
[sudo] password for … :
Enabling module rewrite.
Run ‘/etc/init.d/apache2 restart’ to activate new configuration!

ということで、apache2 を再起動です。

$ sudo /etc/init.d/apache2 restart
$ apache2ctl -M

rewrite_module (shared)

mod_rewrite を有効にして再起動に成功したらしいので、WordPress を動かしてみます。

まだパーマリンクがデフォルトの (?p=数字) 形式しか動きません。

よく見ると、404 Not Found のページが WordPress ではなく Apache/2.2.14 から報告されています。これはどうやら Apache の設定をいじらなければならないような雰囲気です。WordPress が動き始めたときも、ルートの index.php が有効にならずに index.html が優先されたままだったので、おかしいなとは思っていました。 これは、.htaccess が有効になっていません。

などで検索。

これらを参考に、Apache の設定ファイル 「/etc/apache2/sites-available/default」 を sudo gedit で開き、AllowOverride のところを None から All へ変更。

<Directory /var/www/>
	Options Indexes FollowSymLinks MultiViews
#	AllowOverride None
	AllowOverride All
	Order allow,deny
	allow from all
</Directory>

それから、apache2 を再起動

$ sudo /etc/init.d/apache2 restart

これでルートディレクトリの .htaccess が有効になり、WordPress が生成する動的なページ群が有効になりました。日付 + スラッグ のページ指定できちんと見えます。

(2010.11.13)

WordPressの引越―仮想マシンにクローンを作る

ローカルの仮想マシンに WordPress を引っ越してみます。ふつう逆だろうという突っ込みをしたくなりますね。ローカルでテストしてからインターネットに公開するのが手順というものです。それだといつまでたっても、こんどまた、で永遠に取りかかりそうになかったので…

に沿ってやればできそうです。

データのバックアップについては WordPress のバックアップ でやったとおり。

次が wp-config.php の編集になっていますが、その中身を見ると、MySQL の設定情報です。先にローカルの仮想マシンで、MySQL を最低限は設定してやらなければならないということですので、

を参照します。仮想マシンの phpMyAdmin は、ゲストの仮想マシン上では

http://localhost/phpmyadmin/

や、ホストマシンからなら

http://192.168.56.102/phpmyadmin/

でアクセスできるようにしました。「仮想マシンに LAMP を入れる tasksel」や「VirtualBox “ホストオンリー ネットワーク インターフェースの作成に失敗しました”」 で苦労したとおりです。

WordPress の解説に戻ると、「データベース」から「新規データベースを作成する」。次に「特権」から「新しいユーザを追加する」で追加して、特権をデータベース固有にするらしいのですが、何をやっているのか今ひとつよくわからないので、そのまま引用しておきます。

  1. WordPress 用のデータベースが左側のデータベースドロップダウンリストになければ、作成します:
    1. WordPress データベースの名前を決めて (例えば ‘wordpress‘)、新規データベースを作成するフィールドに入力し、作成をクリックしてください。
  2. 左上のホームアイコンをクリックしてメインページに戻り、特権をクリックしてください。もし WordPres s用のユーザーがまだ存在しなければ、作成します。
    1. 新しいユーザーを追加するをクリックしてください。
    2. WordPress のユーザー名を決めて (例えば ‘wordpress‘)、ユーザー名フィールドに入力します (テキストフィールドの値を利用するがドロップダウンメニューから選ばれていることを確認してください)。
    3. 推測しづらいパスワードを決めて (大文字、小文字、数字、記号を組み合わせたものが理想的です)、パスワードフィールドに入力してください(テキストフィールドの値を利用するがドロップダウンメニューから選ばれていることを確認してください)。それからもう一度入力してくださいフィールドにパスワードを再入力してください。
    4. ユーザー名とパスワードをメモしておきましょう。
    5. グローバル特権のすべてのオプションはデフォルトのままにしておきましょう。
    6. 実行するをクリックしてください。
  3. 特権画面に戻ったら、先ほど WordPress 用に作成したユーザー名の右にある特権を編集アイコンをクリックしてください。データベースに固有の特権セクション内にあるデータベースに特権を追加ドロップダウンから、先ほど作成したデータベース名を選択してください。ページはそのデータベース用に更新されます。すべてチェックするをクリックしてすべての特権を選択したら、実行をクリックしてください。
  4. 結果ページで、ページの上部にあるサーバ:の後に続くホスト名を確認してください (通常は localhost)。

となっていますが、4 の localhost は、2 でユーザを追加するときに、「ローカル」 localhost を明示的に指定するからそうなるのではないかと思われます(解説には書いてありません)。

さて、MySQL の設定がうまくいっているのかどうかわかりませんが、ファイルと SQL の編集に移ります。

wp-config.php を編集します。

データベースの .sql ファイルをエディタで開き、 www.makisima.org を localhost に置換します。今回はローカルホストで動かしてみることが目的なのでこれでかまいませんが、もともと存在したであろう localhost と区別がつかなくなるので、あまりよい方法ではありません。ユニークな文字列になっていたほうがよいですね。また、 URL としてではなく地の文で www.makisima.org と言及している部分を判別するのは困難です。正規表現を駆使すればできるのかもしれませんが。このあたりの書き分けは、今後、文章を書くときにも考慮したほうがよさそうです。

WordPress のファイルを仮想マシンにアップロードします。

アップロード… FTP サーバを入れていませんでした。FTP (に類似のサーバ)を入れてもいいですし、ホストマシンとファイルを共有してもかまいません。ホストとのファイル共有は別項 「ホスト Windows 7 の VirtualBox でゲスト Ubuntu とファイル共有(Guest Additions 導入)」 にて。

SQL のほうは

にしたがって行います。ログインは上で作った wordpress 用のアカウントです。

phpMyAdmin でデータベース名を選択します。その後でインポートする .sql ファイルを選択、アップロード実行します。

phpMyAdmin でデータベースを選択、さらに ‘wp-options’ テーブルを選択し、’site_url’ と ‘home’ の値を確認します。必要に応じて書き換えます。

デフォルトの index.html があると、apache がそちらを優先して表示する設定になっているかもしれません。その場合、とりあえずは index.html の名前を変えてブラウザのキャッシュを消去すれば WordPress の index.php が表示されるようになります。実際には、Apache の設定で AllowOverride None になっていて .htaccess が有効になっていない可能性が高いと思われます。(cf. Apache2 mod_rewrite と AllowOverride

WordPrss がサブディレクトリにインストールされていて、それでもトップになるようにしている場合、つまり、

のようになっている場合は、サブディレクトリの URL に相当するアドレスのほう( http://localhost/wp/ )で WordPress にログインできるかもしれません。ログインは WordPress のユーザ名で行います。WordPress の管理画面になれば、とりあえず再設定できるようになります。仮想マシンの localhost のルート (/var/www)  に .htaccess や index.php をきちんとコピーして設定する必要があります。

.sql をアップロードしたあとの設定方法は、なんとなくやっているうちに WordPress が動くようになったので、何がどう功を奏しているのかわかりません。クローンが仮想マシンで動いたので結果オーライということで…  🙂

サブディレクトリに配置した頃のメモ書きは wiki (第2巻)のほうです。

さて、すくなくとも、バックアップの方法が間違っていないこと、バックアップから復元できること、サーバの引越ができることは確認できました。これで、テスト用のサーバとして仮想マシンが使えます。

と喜んでいたら、パーマリンクが「デフォルト」 (?=数字)でないと動きません。とほほ。ということで、続きます……

(2010.11.13)

WordPress のバックアップ

WordPress をバックアップするには

ファイルのバックアップ

WordPress 全体(またはサイト全体)を FTP (に相当する方法)でバックアップ先にコピー(ダウンロード)

データベースのバックアップ

MySQL データベースを phpMyAdmin でバックアップ

  1. WordPress サイトの情報を保持しているテーブルだけを選択します
  2. “Add DROP TABLE” ボックスにチェックを入れます。
  3. “Complete inserts” ボックスにチェックを入れます。
  4. “Save as File” ボックスにチェックを入れます。
  5. 圧縮には “None” のチェックを入れます。データベースが巨大なら圧縮します。
  6. Go をクリック。データが自分のコンピュータに保存されます。

と、「WordPres のバックアップ」には書いてあるが、

のほうが詳しい。(以下、抜粋)

  1. サーバー上の phpMyAdmin にログインします。
  2. ログイン後のメイン画面から、WordPress のデータベースを選びます。
  3. 次のページでは、WordPress データベースに含まれるテーブルの一覧が表示されます。画面上部のタブで、「エクスポート」をクリックしてください。
  4. エクスポート画面の左上にあるリストボックスに、ステップ2で選択したデータベース内のテーブルが全て表示されているはずです。(「全選択」するか個別に選択)
  5. 「SQL」ラジオボタンをオンにします。
  6. 画面右上の「オプション」セクションで、以下のチェックボックスをオンにします。
    • DROP TABLE / VIEW / PROCEDURE / FUNCTION を追加
    • IF NOT EXISTS を追加
    • AUTO_INCREMENT 値を追加する
    • テーブル名やフィールド名を逆クォートで囲む
  7. さらに下のセクションでは、「データ」(見出し)以外のチェックボックスは外しておきます。
  8. その下で、「ファイルで保存する」のチェックボックスをオンにします。「ファイル名のテンプレート」はそのままで構いません。
  9. 圧縮タイプを選び、「実行する」ボタンをクリックし、ファイルを保存しましょう。(圧縮タイプは好みで、無圧縮でも可。保存先に単体ファイルとして保存される)
  10. これで、WordPress サイトの投稿、固定ページ、コメント、設定などのバックアップが完了しました。

(2010.11.10)