ローカルに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) (一部修正・追記)

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)