DELL PowerEdge SC440 タワーサーバをゲットした

某氏より日頃のごほうびとして DELL PowerEdge SC440 タワーサーバ を頂いた。
普通に買ったら ¥120,000 くらいするけど、安いときを狙ったので ¥50,000 くらい。

スペックはこんな感じ。OS は CentOS 5.1 をインストールする。

CPU: Core2Duo E4500 (2.2GHz DualCore)
メモリ: 1GB×2枚 ECC
HDD: 80GB×2台 SATA RAID1
その他: RAID ボード(SAS5iR)

DELL PowerEdge SC440
手前のが DELL SC440。奥のはデスクトップ。使い古したハードディスクはペーパーウェイトとして再利用。

DELL SC440 inside
ケースを開けてみたところ。レバーを引くだけで簡単に開く。
とてもスマートにおさまっているけど、こんなに長い SATA ケーブル見たことない。
HDD が本来あるはずのところにフロントファンがついてて、底に HDD が 2 台取り付けられている。
ちなみに、HDD は Western Digital 製、メモリは Kingston 製だった。

「日曜日にセットアップするよー」と事前に知らせておいたら、学科の後輩の 2 年生、3 年生が自宅兼実験室に見物に来た。だけど、「サーバってなに?」、「サブネットマスク ?」、「管理者権限 ?」って感じだったので、話しながらゆっくりやってたら 5 時間くらい経ってしまった。
教えるのは苦にならないけど、残りのセットアップは一人でやる。

WordPress のインストール、カスタマイズ、テーマ作成のメモ

前の記事 ( 新しいブログを始めました | BlueSky Lab. ) に掲載した、D1 FREAKS SITE は ブログ作成ソフトに WordPress を使っている。ちなみに、このブログは Movable Type を使っている。

設定をカスタマイズして、オリジナルのデザインに変更するのは当然ということで、作業記録の覚書。
全体を通して、WPJ Codex - WPJ_Codex 本家のマニュアルが参考になる。

インストール

1. 事前に必要なもの
・サーバ (Linux+Apache+MySQL+PHP 環境)
・データベース (MySQL)
・mod_rewrite, .htaccess を有効にする

2. 本体をダウンロード
本家サイト( WordPress | 日本語 ) から WordPress 本体をダウンロードする。
WordPress JAPAN のほうはファイルがごちゃごちゃしているので、本体だけならこちらがおすすめ。

3. wp-config.php の設定
細かいことは割愛。DB の設定など。

4. 解凍したものをサーバにアップ
WordPress の入っているディレクトリ、wp-content ディレクトリのパーミッションを 777 または 707 に。

5. URL にアクセス
あとはページに従うだけ。正しく設定できていれば、あっという間に終わる。

設定のカスタマイズ

・編集専用アカウントを作っておく
管理機能が無効になるので、フールプルーフ的によい。

・テキストエリアを広くする
設定画面 (wp-admin/) →「各種設定」→「投稿設定」→「記事投稿用テキストエリアのサイズ」 を 20 行くらいに設定。
これだけで作業効率が 1.5 倍向上する。

・ビジュアルエディタを無効にする
WYSIWIG エディタが嫌いな人は無効にしてしまおう。私の場合、WYSIWIG エディタより HTML のほうが絶対に早く書ける。
「ユーザー」→ユーザーごとの「編集」→「投稿時にビジュアルエディタを使用する」をオフに。

・記事の URL フォーマットを変更
デフォルトの
http://d1freaks.plavox.info/?p=123
より、
http://d1freaks.plavox.info/archives/123 や、
http://d1freaks.plavox.info/2008/03/13/sample-post/
としたほうが、SEO 的に良い。
「各種設定」→「パーマリンク設定」で行う。

・RSS フィードは全文配信に
「各種設定」→「表示設定」で「RSS / Atom フィード」を「全文を表示する」に。

・RSS フィードの改行を有効にする。
WordPress では RSS フィードの本文の改行が削除されてしまう。これでは RSS リーダーで読みづらいので、改行を有効にする。
デフォルトでは、ページからポイントされているフィードは RSS 2.0 なので、wp-includes/feed-rss2.php を開き、
<content:encoded><![CDATA[<?php the_content() ?>]]></content:encoded>
という行を
<content:encoded><![CDATA[<?php the_content('', 0, '', 0, 3) ?>]]></content:encoded>
にすればOK。それでもうまくいかないときは、「表示設定」で「全文を配信する」になっているかどうか、確認する。

テーマを自作

1.テーマファイルを作成
wp-content/themes にテーマが入っている。

ここに新しいフォルダを作成し、最低限必要な以下のファイルを作成する。
・style.css (スタイルシート、必須)
・index.php (トップページ、必須)
・single.php (個別の記事)
・archive.php (カテゴリ、月別のアーカイブ)
・page.php (ページ機能で作成したページ)

以下のファイルも作成する。これらは上記のファイルのパーツとして使用される。
・header.php (ヘッダー)
・comments.php (コメント欄)
・sidebar.php (サイドバー)
・footer.php (フッター)
・images フォルダ (テーマに必要な画像等を入れるフォルダ)

以下のファイルは必要ならば作成する。私はどれも作成しなかった。
作成しなかったものは、デフォルトのものが使用されるので問題なし。
・404.php (記事が見つからない場合のページ...デフォルトのもので十分)
・comments-popup.php (コメントをポップアップ表示する際のページ...使わない)
・search.php (検索結果...サーバの負荷を考慮し、検索機能は Google に依頼した)
・searchform.php (検索フォーム)
・screenshot.png (テーマのスクリーンショット。300×225px。公開する場合はあったほうがいいかも。)

* CSS をたくさん分割しているテーマもあるが、読込速度向上の理由で CSS は 1 つのファイルにまとめて書くべき。

2. style.css にテーマ情報を記入。
絶対に記入する。テーマを認識するのに必要。
テーマ名、URL、著作者情報、などを記入する。
Author URI の下はコメント欄。ライセンスがあれば、コメント欄に記入する。ライセンスによっては、派生元のURL等も記入する。

例:

/* 
Theme Name: D1 FREAKS 2008
Theme URI: http://d1freaks.plavox.info/
Description: Theme for D1 FREAKS SITE.
Version: 1.0
Author: Takekatsu HIRAMURA
Author URI: http://d1freaks.plavox.info/
The CSS, XHTML and design is released under GPL: http://www.opensource.org/licenses/gpl-license.php */

3.上記ファイルを編集する
基本的に、「Default」のテーマをまねて書けばいい。
WordPress の関数を使う。Wptags.com公式の Function Reference (英語) が参考になる。

4. アップロード、設定
フォルダごとアップすれば、自動的にシステムで認識してくれる。
設定画面の「表示」→「テーマ」で選択すれば OK。

感想など

・ダイナミックパブリッシングなので快適
再構築の必要がなく、意外とページ生成も早いので便利。
設定画面のページ生成も Perl で作られている MT4 に比べて、WordPress は PHP なのでとても早い。

・改行の判定が MT に比べて素直な気がする。
<brockquote> の中に <p> が入る仕様は気にいらないけど。
仕方ないので、 CSS を使って無理やり解決させた。こんな感じ。

div.entry blockquote p{
 margin:0px;
 padding:0px;
}

・カテゴリとタグの概念が、カテゴリに統一されている。
カテゴリを複数指定できるなら、タグの概念と同じだからかな。

・トラックバックのリンクがない。
そもそもコメントスパムには、captcha やホワイトリスト、ベイズフィルタである程度対処できるけど、トラックバックスパムには対処できる決定的な手段がないからかな。
それに rel=nofollow ならスパムにも SEO にも意味をなさないしね。
そういえば、nowa や vox も TB の機能がなくなっていたような...。
「トラックバック終了のお知らせ」かな。

テーマのデザインがきれいにできたので、1カ月くらい運用して問題なければ、ロゴや広告を取り除いたものをテーマとして公開します。

mod_rewrite で 301 リダイレクトするサイトのお引越し例

Web サイトの URL を変更する時は、meta タグでジャンプさせるのではなく、 "HTTP 301 Moved Parmanently" の ステータスコードを出力するのが正しい。サーチエンジンのインデックスも自動的に書き換えてくれるので SEO 的にも良い。
ただし、RSS フィードのお引越しに関しては mala 氏の記事が大変詳しい。

ひとつひとつのファイルに対して設定するのは面倒くさいので、mod_rewrite を使って一括してリダイレクトすれば楽。
具体的には、ディレクトリのトップに .htaccess ファイルを置き、以下のコードを書けばよい。

例1. ファイル名を維持しないでリダイレクト
http://www.old-url.info/ → http://www.new-url.info/
http://www.old-url.info/somepage.html → http://www.new-url.info/

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* http://www.new-url.info/ [R=301]
</IfModule>

例2. ファイル名を維持してリダイレクト
http://www.old-url.info/ → http://www.new-url.info/
http://www.old-url.info/somepage.html → http://www.new-url.info/somepage.html

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule (.*) http://www.new-url.info/$1 [R=301]
</IfModule>

もちろん、.htaccess を有効にするには AllowOverRide を All にする必要があり、mod_rewrite も有効にしておかなければならない。

HTTP 403 を誤出力して Google の検索結果から削除された時の対処法

自分の HP がグーグル八分になっていた | BlueSky Lab.
大学内に作ってあった 私のページ がある日突然、Google のインデックスから削除されていた。

ということで、いろいろ対策を試みた。結論から言うと、下記 1. または 2. で解決可能。

1. 「Google ウェブマスター ツール」 から再審査のリクエストを行う。
受理されれば、1 週間 ~ 2 週間 で HTTP エラーが消える。
エラーが消えたことを確認したら、念のために 「サイトの登録 / 削除」 を行う。検索結果に復帰するまで、早くとも 2 週間前後かかるだろう。

2. URL を変更する
PageRank は 0 からスタートになるが、比較的早く復帰する。
PageRank がもともと高くないサイト、自分で被リンク先を書き換え可能な場合、ニッチなキーワードで検索される場合におすすめ。


私の場合、とにかく早く復旧させるため 2. を行った。

ちなみに、以下の方法は効果がなかった。
・「サイトの登録 / 削除」 を行う
・「Google ウェブマスターツール > 運用ツール > URL を削除」 、削除されたらキャンセルを行う
・「Google サイトマップ」を作成する

検索結果に戻って嬉しい!
403 Forbidden は生きているページに誤って出力しないよう、設定しなければならない。

リンク先を書き換えるついでに、デザインを少し変えておいた。
t.hira's page
平村 健勝 のページ

自分の HP がグーグル八分になっていた

大学内に作ってあった 私のページ がある日突然、Google のインデックスから削除されていた。

2008/01/24 にサイトの内容を一部変更したので、単なる Google Dance による順位変動か、もしくはキャッシュやインデックスの書き換えによる一時的な消失だろうと思ったら、数日たっても変わらないので、これは変だと思い始めた。

さっそく、 Google ウェブマスターツール で調査した。それによると、2008/01/23 にクロールしたとき、HTTP ステータスコードの 403 Forbidden (禁止) を受け取ってから、クロールするのをやめてしまったようだ。

403 エラーの原因を探っていたら、やはり、ファイルサーバの障害 だった。通常、サーバがダウンしていたらタイムアウトするはず。しかしこの場合は、ファイルサーバがダウンしていて、そのリバースプロキシ (?) である stu.cc サーバが生きていたため、ステータスコードを出力していたようだ。

誤って 403 Forbidden を吐いた後の始末は大変、ということを知りつつ、とりあえず、サイトの登録 / 削除 から再登録を行っておく。結果は後ほど追記する。


追記 (2008.02.17)
検索結果に復活しました。対処法はこちら。
HTTP 403 を誤出力して Google の検索結果から削除された時の対処法 | BlueSky Lab.

Apacheのmod_deflateの設定変更

mod_deflate - Apache HTTP サーバ

mod_deflateは圧縮してデータを送信することでトラフィックを抑えることができるが、「画像以外全て圧縮」のサンプルをそのまま使っていたため、不具合が発生。

不具合は、圧縮前と圧縮後でファイルサイズが変わるため、正確なファイルサイズがクライアントに通知されないことが原因。
このとき、PHPやPerlなどのWebアプリから、HTTPヘッダにファイルサイズを付加しても意味がなくなる。

具体的には、
1. ZIPファイルを再圧縮してしまう。
2. ブラウザでファイルのダウンロード画面のプログレスバーが表示されなくなる。
3. flashでプレローダーを設置している場合、プレローダが動作しない。
4. flashでストリーミング再生ができない。

なので、「数タイプのみ圧縮する」のサンプルに「古いブラウザのエラー処理」を付け加えたものを使うのがベスト。
まあこんな感じ。

<Location />
# DEFLATEの有効化 AddOutputFilterByType DEFLATE text/html text/plain text/xml
# 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮 BrowserMatch ^Mozilla/4 gzip-only-text/html
# 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない BrowserMatch ^Mozilla/4\.0[678] no-gzip
# 画像ファイルは圧縮しない SetEnvIfNoCase Request_URI\.(?:gif|jpe?g|zip|png)$ no-gzip dont-vary
# プロキシサーバが圧縮未対応ブラウザへ圧縮ファイルを送信しない Header append Vary User-Agent env=!dont-vary
</Location>

PHPからファイルを出力するときは圧縮をOFFにするため、
apache_setenv('no-gzip','1');
を設定するとOK。

PCケースのエアダクト取り外し

うちのAopen VL-201兄弟のうちの片方が暑い( CPU#1 Temperature above threshold. )としきりに訴えているので対策をとることにしました。

ケースを開けたところ、樹脂製のエアダクトが、埃を集めてフィルターを形成し、排気口を塞いでいる始末なので、エアダクトを取り外しました。


左(兄):Pentium4 2.4GHz。WinXP Home & Fedora Core 5.0。テスト専用マシン。
右(弟):CerelonD 2.2GHz。Fedora Core 6.0。元デスクトップ、今はWebサーバ。
FON APは結束バンドでアルミラックに取り付け(右上)


エアダクト除去前


ピンを押すと外れる


エアダクト除去後

1日経過しましたが、だいぶ快適になったようです。