2010年5月18日

kumofsをインストールしてみた

今年はじめに公開されたKVSのkumofsを今さらながらインストールしてみました。

「kumofsってなんぞや?」っていう方はこちらへどうぞ。

インストールした環境は以下のとおり。

CentOS5.2
g++4.1
ruby1.8.5

後にこの環境でインストールしたことを後悔することに‥
詳細は後ほど。

では、早速kumofsをインストールしていきます。

続きを読む "kumofsをインストールしてみた" ≫

2010年4月23日

[PHP] eZ Publishでオリジナルテンプレートを作成する

またまた一ヶ月ぶりの投稿です。

今回は最近仕事で使い出したeZ PublishというCMSについてのエントリーです。
業務でオリジナルテンプレートを作成しないといけない事態に迫られたのですが、
そのうち忘れてしまいそうな内容なので、備忘録の意味も込めての投稿です。

手順を書く前に、eZ Publishの説明を少し。

eZ Publishとは、ノルウェー生まれのPHPで書かれたエンタープライズ向けCMSです。
日本ではあまりなじみの無いCMSかも知れませんが、
海外では、出版業界等でよく使われており、日本でも徐々にeZを導入するサイトが増えてきつつあります。

公式サイトはこちら

さて、今回のテーマのテンプレートの作成についてですが、
eZにはいくつかのテンプレートが予め用意されています。

たとえば、「full.tpl」。
eZをインストールしたときに構築できるデモサイトでいうと下のページにあたります。
URLは「http://xxxx.xxxx/content/view/full/xxx」になります。

full.jpg
お次は、「sitemap.tpl」。
これもよく使うテンプレートですね。
URLは「http://xxxx.xxxx/content/view/sitemap/xxx」で、デモサイトでいうと↓です。

sitemap.jpg
その他にも「line.tpl」や「plain.tpl」などたくさんのテンプレートが用意されています。

で、これらのテンプレートはどこで定義されているのかというと、
特定の場所にxxx.tplファイルを置けば、eZで勝手に認識してくれるようです(すばらしい!)

で、どこかというと・・・


続きを読む "[PHP] eZ Publishでオリジナルテンプレートを作成する" ≫

2010年3月23日

Varnishを動かしてみた 設定編

前回から随分と日が経ってしまいましたが、
今回はvarnishの設定について書きたいと思います。

前回は基本的な構成で動作するところまで進めましたが、
バックエンドサーバから見るアクセス元のIPがvarnishサーバになるため、
アクセスログのIPが全てvarnishサーバのIPになってしまう。
「webが2台構成の場合どうすんの?」といった実際の運用で躓きそうな点を調べてみました。

まずは、IPアドレスの問題。

PHPの場合、アクセス元IPは$_SERVER["REMOTE_ADDR"]で取得しますが、
前述のとおり、$_SERVER["REMOTE_ADDR"]にはvarnishサーバのIPが入っています。

これを何とかしてリモートIPを取得するには、VCLのvcl_recvに以下の記述を追加します。

# Add a unique header containing the client address
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
こうすることで本来$_SERVER["REMOTE_ADDR"]に入るはずデータが$_SERVER["HTTP_X_FORWARDED_FOR"]で取得できるようになります。

次にWebサーバが複数台構成の場合。

varnishはデフォルトでロードバランシングする機能が備わっているので、この機能を利用します。
なお、バージョン2.0.5で試したところ、正常な設定でもVCLファイルがシンタックスエラーになる問題が発生しました。バージョンを2.0.6にあげると問題が解消されたので、同じような現象に遭遇した場合は最新版にアップデートすることをお勧めします。

さて、ロードバランシングの設定ですが、これもvclに設定を追加するだけです。
以下のように書いてみましょう。

director www_director round-robin {
    { .backend = { .host = "www1.example.com"; .port = "http"; } }
    { .backend = { .host = "www2.example.com"; .port = "http"; } }
}
sub vcl_recvに以下の記述を追加。

  if (req.http.host ~ "^www.example.com$") {
    set req.backend = www_director;
  }
これで、「www.example.com」にアクセスがあった場合、
「www1.example.com」「www2.example.com」のどちらかに転送されるようになります。

なお、director宣言の「round-robin」部分ですが、「round-robin」と「random」のどちらかを記述する必要があります。環境に応じて適宜変更しましょう。

続きを読む "Varnishを動かしてみた 設定編" ≫

2010年1月20日

Varnishを動かしてみた 導入編

リバースプロキシといえばSquidが有名ですが、
今回はリバースプロキシ専用のvarnishを動かしてみました。

ちなみにwikipediaによるとvarnishはSquidより10~20倍速いらしいです。

早速インストールしてみます。
今回使用した環境は「CentOS5.2」。
CentOSならRPMが公開されているので、インストールが簡単です。

ちなみに2010年1月20日現在の最新バージョンは2.0.6ですが、
残念ながらRPM版は2.0.5だったので、今回は2.0.5で検証しました。

wget http://download.fedora.redhat.com/pub/epel/5/i386/varnish-2.0.5-1.el5.i386.rpm
wget http://download.fedora.redhat.com/pub/epel/5/i386/varnish-libs-2.0.5-1.el5.i386.rpm
rpm -i varnish-libs-2.0.5-1.el5.i386.rpm varnish-2.0.5-1.el5.i386.rpm

インストールはこれだけで終了です。

次に設定ファイルを変更します。
このとき、変更するのは「/etc/sysconfig/varnish」と「/etc/varnish/default.vcl」の2つ。

「/etc/sysconfig/varnish」はvarnish起動時に読み込まれる設定で起動時のオプション等を設定します。
今回はインストールした際に出来るサンプルをそのまま使用することにしました。

続きを読む "Varnishを動かしてみた 導入編" ≫

2010年1月 4日

[PHP] SmartyでIncludeされているテンプレートを調べるには

あけましておめでとうございます。
本年もよろしくお願いいたします。

さて、2010年最初のエントリはSmartyのデバッグについてです。

SmartyはPHPのテンプレートエンジンでPHPエンジニアであれば、知らない人はいないんじゃないかと思われるほどのメジャーなプロダクトです。

最近はZend FrameworkやeZ Publishなど独自のテンプレートエンジンを持つフレームワークやCMSが登場していますが、まだまだSmartyを使っている人は多いのではないでしょうか。

Smartyを使っていて毎回困っていたのが、include関数を多用するとどのテンプレートに何が書かれているかわからなくなってしまうことです。
includeしたテンプレートの中でさらにincludeしてたりすると最悪です・・・

テンプレートを修正する度に毎回上位テンプレートから調べていくのは大変なので、
includeしているテンプレートの前後にテンプレート名のコメントを入れるようにしてみました。

続きを読む "[PHP] SmartyでIncludeされているテンプレートを調べるには" ≫