さくらのVPS を改めて使いはじめる 7 - WordPress
さくらの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-conten
t が新環境のユーザー 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 / https://akabeko.me/
これで旧サイトへのアクセスは新 URL に変更される。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 のセットアップについて書く。
Comments from WordPress
- 小出大輔 2013-02-04T04:01:38Z
いつもアカベコマイリさんのブログには大変お世話になっております。
ひとつお伺いしたいのですが、サーバー設定からwordpressの設定までこちらのブログを参考にさせて頂き、設定をしたのですが、jpforce.net/blog/にアクセスしてもwordpressのセットアップ画面が出ず、「You don't have permission to access /blog/ on this server.」となってしまい、原因が掴めずにいます。
もし原因がおわかりであれば、ご教授頂けますと幸いです。
- akabeko 2013-02-04T12:40:38Z
エラーの内容から察するに、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
のような情報があるか、確認してみてください。
- bluez 2013-04-24T09:28:15Z
初めまして。さくらVPSのセットアップでいつも参考にさせて頂いております。
Wordpressは正常にインストールできたのですが、WPからメールを送信する事ができません。mail()関数が無い旨のエラーが出ます。
アカベコさんのところではどうでしょうか?
- akabeko 2013-04-24T10:23:09Z
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 のログを見ないと調査は難しそうです。
- bluez 2013-04-24T19:19:31Z
アカベコ様
早々のご返信を有り難うございます。
まず、さくら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
と記述しています。
これが問題なのでしょうか?
- akabeko 2013-04-24T23:12:36Z
bluez さん、おはようございます。
WordPress 以外からはメール送信できているのですね。私のサーバーでは、メール送信ポートや postfix に関する変更はおこなっていないので、このあたりの設定が原因なのかもしれません。
おそらく postfix を利用するときに設定されているかもしれませんが、
- 和風なギークに憧れて。 – さくらのVPSでメール送信が出来ないのでポート587番を使う
- 小悪魔女子大生のサーバエンジニア日記 » Blog Archive » SMTP-AUTHの設定をしてメールを送れるようにしよう
上記ページでおこなっているように、postfix submission inet のコメントアウトが解除されているかについても確認したほうがよいでしょう。
また、WordPress をデバッグモードにして、ログを調べてみると、より詳細な情報を得られる可能性があります。実運用しているサーバーの場合、ログをページ出力するのは問題があるため、もしこの方法で調査されるなら、以下の記事などを参考に、ファイル出力することをおすすめします。
- bluez 2013-04-25T01:19:05Z
ご丁寧に有り難うございます。
確認してみましたが、postfix submission inetのコメントアウトは行っております。 #そうでなければ、メールクライアントからsubmission portでメールの送信ができないですね…
WP_DEBUGをtrueにしても、メール送信の試験ではWordPressからはエラーが出力されません。
思うに、postfixでlocalhostからの送信は認証無しに設定できれば良さそうなのですが、その設定方法が恥ずかしながら分かりません。
色々ググってみたのですが、今一つ分かりかねています。
- bluez 2013-04-25T01:52:08Z
有り難うございました。自己解決できました。
php.iniの
sendmail_path = postfix
をsendmail_path = /usr/sbin/sendmail.postfix -t -i
とする事で送信できました。
有り難うございます!