さくらのVPS を改めて使いはじめる 7 – WordPress

2012年5月3日 12 開発 , ,

さくらのVPS(v3) 2GB プランへの環境構築メモ 7。今回はWordPress のセットアップと環境の移行について書く。

もくじ

WordPress のセットアップ

WordPress が動作するために必要な環境を準備する。前回までの手順により MySQL と Apache が稼働していることを前提としておく。

まず PHP 系のパッケージをひととおりインストール。

$ sudo yum install php php-mbstring php-mysql php-mcrypt php-gd php-devel php-pear php-pecl-apc

次に WordPress 用のデータベースとユーザーを作成する。今回は両方とも wordpress という名前にした。

$ mysql -uroot -p
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY 'XXXXXXXXXXXXXXXX';
mysql> FLUSH PRIVILEGES;
mysql> exit;

準備ができたので WordPress をインストールする。日本語ローカルサイトのダウンロード欄から最新版の URL をコピーしておく。

コピーした URL から WordPress 本体をダウンロード、展開、インストール、所有者を変更する。

$ cd
$ wget http://ja.wordpress.org/wordpress-3.3.1-ja.zip
$ unzip wordpress-3.3.1-ja.zip
$ rm wordpress-3.3.1-ja.zip
$ sudo mv wordpress /var/lib/wordpress
$ sudo chown -R apache:apache /var/lib/wordpress

ここまでの手順が完了したら Apache の DocumentRoot 以下に WordPress をインストールしたディレクトリへのシンボリックリンクを貼る。今回は blog というサブディレクトリにしておく。

$ sudo ln -s /var/lib/wordpress /var/www/html/blog

これで Web 上に WordPress が公開された。ブラウザから http://ドメイン名/blog/ にアクセスすると、WordPress のセットアップ画面が表示されるはず。

WordPress Codex 日本語版 のインストール手順などでは wp-config.php を手動作成 & 編集する方法を紹介しているが、最近のバージョンだと WordPress が作成してくれる。

設定ファイルの作成

事前に必要な情報も教えてくれる。

親切な説明

wp-config.php に設定していた内容は、以下のように問い合わせられる。

データベース情報の入力

サイトとユーザー情報。

サイトとユーザー情報

特に難しい設定もなく画面の指示に従ってゆくだけで WordPress を利用できる。実に簡単・便利。

完了

作業が完了したときの「これだけです!」というメッセージに強い自信を感じる。

環境の移行

既に運用されている WordPress から新環境へ移行する場合の手順を書く。はじめに旧環境から必要なデータをバックアップする。

データベースに MySQL を利用しているならその内容を mysqldump コマンドで出力する。-u パラメータにユーザー名 ( XXXX の部分 )、-p でパスワード、続けてデータベース名 ( wordpress の部分 ) を指定する。phpMyAdmine を利用できるならそちらから出力してもよい。

$ cd
$ mysqldump -u XXXX -p wordpress > wordpress.sql

次に WordPress で利用していたテーマやプラグイン、メディア ファイルなどをバックアップする。これらは WordPress のインストール先にある wp-content ディレクトリ内へ格納されている。ファイルを個別にバックアップするのが面倒なら、wp-content を丸ごと保存してもよいだろう。

バックアップが完了したらデータ移行を開始。

移行先の環境については前述の WordPress 新規インストール & セットアップが完了し移行元の WordPress データベースを出力したファイル wordpress.sql と wp-content が新環境のユーザー HOME に保存されているものとする。

まずシンボリックリンクを消してブログを非公開にする。移行作業が終わるまでこの状態にしておく。

$ sudo rm /var/www/html/blog

以下のコマンドを実行してデータベースの作り直し & 旧データの移行を実行する。

$ mysql -uroot -p
mysql> DROP DATABASE wordpress;
mysql> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;
mysql> exit;
$ cd
$ mysql -u wordpress -p wordpress < wordpress.sql

もしドメイン名の変更がありブログの URL が変わっているならば、書き換えておく。まず WordPress のデータベースにログインし…

$ mysql -u wordpress -p wordpress

以下のような SQL を実行してゆく。私の場合、旧ドメイン ( old の部分 ) が akabeko.sakura.ne.jp、新しいもの ( new の部分 ) は akabeko.me となる。

UPDATE wp_options  SET option_value = REPLACE( option_value, 'http://old/', 'http://new/' );
UPDATE wp_posts    SET post_content = REPLACE( post_content, 'http://old/', 'http://new/' );
UPDATE wp_posts    SET guid         = REPLACE( guid,         'http://old/', 'http://new/' );
UPDATE wp_postmeta SET meta_value   = REPLACE( meta_value,   'http://old/', 'http://new/' );
UPDATE wp_usermeta SET meta_value   = REPLACE( meta_value,   'http://old/', 'http://new/' );

以上でデータベースの移行が完了した。

wp-content 以下の構成ファイルについては移行元と新環境の WordPress バージョンが一緒なら一括で移行してもよい。心配なら個別に作業する。以下はユーザー HOME の wp-content を一括で移行させる例。

$ cd
$ sudo mv /var/lib/wordpress/wp-content /var/lib/wordpress/wp-content.original
$ sudo mv wp-content /var/lib/wordpress/
$ sudo chown -R apache:apache /var/lib/wordpress/wp-content

元々あった wp-content を wp-content.original にリネームしてから、移行元のものに置き換えている。もし移行したもののファイルに不足があった場合は、wp-content.original から持ってくる。移行して問題なければ、wp-content.original は消しても良い。

すべてのデータを移行し終えたなら、シンボリックリンクを貼ってブログを公開する。

$ sudo ln -s /var/lib/wordpress /var/www/html/blog

正しく移行できているなら Web ブラウザから http://ドメイン名/blog/ にアクセスすることで新ブログが表示される。またユーザー情報やパスワードも引き継がれているので、いままでどおりログインできるはず。

もし状態がおかしい場合はデータベースや wp-content 内のファイル構成を確認すること。

備考

その他の移行作業や考察、遭遇したトラブルなどを記録しておく。

301 リダイレクト

ドメイン変更により URL が変わったので、旧サイトから新サイトへ 301 リダイレクトするようにした。

旧ブログはさくらのレンタルサーバー スタンダードで稼働していたので、Web サーバーは Apache になる。また、.htaccess も有効だ。よって、以下の内容を記述した .httaccess ファイルをサイトのルートに配置。

Redirect 301 / http://akabeko.me/

これで旧サイトへのアクセスは、すべて新しいものに変更される。301 リダイレクトは Google のウェブマスター ツールでも、サイト移転の方法として推奨されている。

リダイレクトを開始すると Google 検索結果も新 URL へ切り替わってゆく。私の場合 2 週間ほどで主要なページの URL が変更されることを確認できた。

外部サービスに登録している URL 変更

ブログの移転にともない外部サービスのユーザー情報などに登録している URL を変更したのだが、いくつか気になるものがあったのでそれについて書く。

WordPress.com Stats や Akismet のように、WordPress.com の API キーを必要とするプラグインは従来のものがそのまま利用できる。Stats の登録 URL を変更した場合、前のアクセス解析を引き継いでくれるのは地味にありがたい。

Zenback は URL を変更する術がないようなので、いままでのものを削除してから新 URL を再登録した。

あわせて読みたいはそもそも URL 変更という概念がないらしい。ブログパーツを外すことで退会 ( 解除 ) して新サイトは再登録が必要となる。

ただし WordPress のあわせて読みたいプラグインがデータを取得してくれない。はじめは開発 API で説明されている以下の事情によるものだと思っていた。

なお、2010年秋のバージョンアップ以降の登録ユーザーについては、このJSONP配信機能は現在準備中です。

しかしこの条件にあたりそうなサイトでも JSONP を取得できているところがあるので集計期間の問題だと推定。しばらく標準ブログパーツ ( 画像になっているもの ) を配置して様子を見ることにした。

この対応が正しかったのかは謎だが 4 月の半ばあたりからプラグイン側でもデータ取得できるようになったので標準ブログパーツは削除した。

WordPress のアップロード ディレクトリ

新ブログのほうで画像をアップロードしようとしたらエラーになった。ググってみると wp-content/uploads のパーミッションが原因という指摘がたくさん見つかるのだが、その点については問題なかった。

途方にくれつつ、エラーメッセージをよく見ると….

“example.png” は、エラーのためアップロードに失敗しました ディレクトリ /home/XXXX/www/blog/wp-content/uploads/2012/04 を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?

なんだかパスがおかしい。wp-content/uploads の前に余計なディレクトリが付いている。

さくらのレンタルサーバーは、DocumentRoot がユーザー HOME 直下の www ディレクトリに割り当てられるため、WordPress のインストール先もその下になる。どうやらその設定を引き継いでしまったようだ。

というわけでパスを変更する。WordPress の管理画面から「設定」→「メディア」を開き、「アップロードするファイルの保存場所」欄の内容を標準の wp-content/uploads に設定。すると、無事、アップロードに成功した。めでたしめでたし。

…今回はここまで。次回は checkinstall のセットアップについて書く。


TRACKBACKS

COMMENTS

  • 2013年2月4日 1:01 PM 返信

    いつもアカベコマイリさんのブログには大変お世話になっております。
    ひとつお伺いしたいのですが、サーバー設定からwordpressの設定までこちらのブログを参考にさせて頂き、設定をしたのですが、jpforce.net/blog/にアクセスしてもwordpressのセットアップ画面が出ず、「You don’t have permission to access /blog/ on this server.」となってしまい、原因が掴めずにいます。
    もし原因がおわかりであれば、ご教授頂けますと幸いです。

  • 2013年2月4日 9:40 PM 返信

    エラーの内容から察するに、WordPress をインストールしたディレクトリのアクセス権に問題があるのだと考えられます。

    この記事の手順にある、以下のコマンドは実行されたでしょうか?

    sudo chown -R apache:apache /var/lib/wordpress

    これを実行することで、WordPress の全ディレクトリの所有権が、それを動かす apache ユーザーに設定されます。

    権限を確認するには、ls -l コマンドを実行します。

    ls -l /var/lib

    実行すると、このディレクトリ内のファイルやディレクトリ情報が一覧表示されます。その中に、

    drwxr-xr-x 5 apache apache 4096 1月 26 10:17 2013 wordpress

    のような情報があるか、確認してみてください。

  • 2013年4月24日 6:28 PM 返信

    初めまして。さくらVPSのセットアップでいつも参考にさせて頂いております。

    WordPressは正常にインストールできたのですが、WPからメールを送信する事ができません。mail()関数が無い旨のエラーが出ます。

    アカベコさんのところではどうでしょうか?

  • 2013年4月24日 7:23 PM 返信

    bluez さん、はじめまして。

    > WordPressは正常にインストールできたのですが、WPからメールを送信する事ができません。mail()関数が無い旨のエラーが出ます。

    私の環境ではメール送信できています。bluez さんのコメントも、WordPress から送信されたメールで気づきました。

    mail 関数のエラーというのは、「メールを送信できませんでした。考えられる理由: あなたのサーバーでは mail() 関数が有効になっていないのかもしれません。」でしょうか?

    もしそうであれば、以下のうち、いずれかが原因なのかもしれません。

    a.さくらのVPS がお試し期間中
    b.PHP のメール設定に問題がある
    c.iptables でメール送信に使用されるポートが無効化されている

    まず a ですが、さくらのVPS がお試し期間の場合、サーバーの設定が適切でもメール送信はおこなえません。通常、メール送信は 25 番ポートを利用するのですが、期間中は抑止されます ( logwatch のレポート用メールなども、送信に失敗します )。

    ご利用上の注意 | VPS(仮想専用サーバ)「さくらのVPS」
    http://vps.sakura.ad.jp/terms.html

    次に b ですが、これは PHP を yum からインストールしたなら、その初期設定で問題ないと予想されます。どうしても心配であれば、以下の記事を参考に php.ini をチェックしてみるとよいでしょう。ただし、単に WordPress を動かすだけであれば、php.ini の変更は必要ないはずです。

    php.iniの設定 – メール使用のための環境設定 – PHP入門
    http://www.phpbook.jp/tutorial/mailini/index1.html

    最後に c ですが、iptables で 25 番ポートを無効化している場合、メール送信に失敗します。ただし、iptables を本ブログの設定でセットアップされたなら、送信方向でこのポートを抑止していないため、問題ないはずです。

    まずは a を確認し、そのあとに b、c をチェックしてゆくのがよいでしょう。これら以外の要因である場合、PHP と Apache のログを見ないと調査は難しそうです。

  • 2013年4月25日 4:19 AM 返信

    アカベコ様
    早々のご返信を有り難うございます。

    まず、さくらVPSは試用期間ではありません。

    メールの送信はSubmission Portを使っていますので、php.iniのSMTPのところでポートを587に書き換えています。

    メーラーからは同サーバーで送受信出来ています。ですので、iptablesも問題無いかと思います。

    一点気になるのが、メールのサーバー認証を行っているのです。
    /etc/postfix/main.cfに

    smtpd_sasl_auth_enable = yes
    smtpd_sasl_local_domain = $myhostname
    smtpd_recipient_restrictions = permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination

    と記述しています。

    これが問題なのでしょうか?

  • 2013年4月25日 8:12 AM 返信

    bluez さん、おはようございます。

    WordPress 以外からはメール送信できているのですね。私のサーバーでは、メール送信ポートや postfix に関する変更はおこなっていないので、このあたりの設定が原因なのかもしれません。

    おそらく postfix を利用するときに設定されているかもしれませんが、

    和風なギークに憧れて。 – さくらのVPSでメール送信が出来ないのでポート587番を使う
    http://blog.crara.cc/archives/770
    小悪魔女子大生のサーバエンジニア日記 » Blog Archive » SMTP-AUTHの設定をしてメールを送れるようにしよう
    http://co-akuma.directorz.jp/blog/2010/04/pop%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E3%81%97%E3%81%A6%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E9%80%81%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%82%88%E3%81%86%EF%BC%8A/

    上記ページでおこなっているように、postfix submission inet のコメントアウトが解除されているかについても確認したほうがよいでしょう。

    また、WordPress をデバッグモードにして、ログを調べてみると、より詳細な情報を得られる可能性があります。実運用しているサーバーの場合、ログをページ出力するのは問題があるため、もしこの方法で調査されるなら、以下の記事などを参考に、ファイル出力することをおすすめします。

    WordPressのWP_DEBUGによるPHPのエラーをファイルに出力する方法 | kwLog http://blog.makotokw.com/2011/06/12/wordpress%E3%81%AEwp_debug%E3%81%AB%E3%82%88%E3%82%8Bphp%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

  • 2013年4月25日 10:19 AM 返信

    ご丁寧に有り難うございます。

    確認してみましたが、postfix submission inetのコメントアウトは行っております。
    #そうでなければ、メールクライアントからsubmission portでメールの送信ができないですね…

    WP_DEBUGをtrueにしても、メール送信の試験ではWordPressからはエラーが出力されません。

    思うに、postfixでlocalhostからの送信は認証無しに設定できれば良さそうなのですが、その設定方法が恥ずかしながら分かりません。

    色々ググってみたのですが、今一つ分かりかねています。

  • 2013年4月25日 10:52 AM 返信

    有り難うございました。自己解決できました。

    php.iniの
    sendmail_path = postfix

    sendmail_path = /usr/sbin/sendmail.postfix -t -i
    とする事で送信できました。

    有り難うございます!

REPLY

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です