Tracをlighty+FastCGIで動かす

今までyumで入れたhttpd上で動かしてたけど、独立性が欲しくなってきたので別途入れることに。せっかくなので、Apacheではなくlightyを試してみようと思ったのでメモ残します。基本方針はこんな感じ。

  • バージョンは英語版0.11
  • lighty+FastCGIで動かす
  • Trac全体に認証をかけてhttpsでアクセス
  • インストール先は/opt/trac11
  • lightyもFastCGITrac専用として/opt/trac11/下にインストール

ライブラリの扱いについては、

の設定を.zshrcとかに書いておくと/opt/*/lib/にあるライブラリには自動でPATHが通る。自分はこれを使ってるので、そこにまとめる。

■setuptoolsを入れる

wget http://peak.telecommunity.com/dist/ez_setup.py
sudo python ./ez_setup.py

Trac以外でもPythonなツールを使う時には必要なケースが多そうなので、setuptoolsだけは/opt以下じゃなくて普通にインストールする。

Trac本体のインストール

日本語版は0.11がまだなので(もうすぐ出る?)、本家から英語版を入れる。

mkdir -p /opt/trac11/lib/python2.4/site-packages
export PYTHONPATH=/opt/trac11/lib/python2.4/site-packages
python setup.py install --prefix=/opt/trac11
mkdir /opt/trac11/{cgi-bin,htdocs}
cp cgi-bin/trac.fcgi /opt/trac11/cgi-bin/

Pythonライブラリを任意のディレクトリに置く場合、環境変数PYTHONPATHに書くなどする必要がある。sudoすると環境変数がリセットされるので、rootで入れようとするとつまづく。sudoで通す環境変数を変更するのは気が進まないので、/optをグループライタブルにして自分のユーザ権限でインストールすることに。本当はちゃんと管理用のユーザを作ってそれで稼働させるべきでしょうね。

というか、Pythonライブラリはおとなしく/usr/lib/python2.4/site-packagesにインストールしてもいいかもしれない。

あとは、FastCGIスクリプトを/opt/trac11/cgi-bin/にコピーしておく。

■configobjのインストール

認証に必要なので入れる。

のDownloadingからzipを拾ってきて解凍して、

python setup.py install --prefix=/opt/trac11

■プロジェクト作成

mkdir /opt/trac11/projects
trac-admin /opt/trac11/projects/trac initenv

適当に入力して作る。Subversionリポジトリは後からでもいい。

FastCGI

./configure --prefix=/opt/trac11/fastcgi --libdir=/opt/trac11/lib
make
make install

■lighty

sudo yum install pcre-devel.x86_64 bzip2-devel.x86_64 
./configure --prefix=/opt/trac11/lighty --libdir=/opt/trac11/lib --with-openssl
make
make install
mkdir /opt/trac11/lighty/conf
cp doc/lighttpd.conf /opt/trac11/lighty/conf/
cd /opt/trac11/lighty/conf
vi lighttpd.conf
lighttpd.conf

module読み込み

  • mod_auth, mod_fastcgiを有効にする

document-rootの変更

server.document-root        = "/opt/trac11/htdocs/"

ポートの変更

server.port                = 4343

実行ユーザ/グループ

server.username            = "ryo"
server.groupname           = "wheel"

とりあえず自分用ということで。

SSLを有効にする

ssl.engine                 = "enable"
ssl.pemfile                = "/opt/trac11/lighty/ssl/server.pem"

末尾に追加

include "trac.conf"
trac.conf
fastcgi.server = ("/trac" =>
                   ("trac" =>
                     ("socket" => "/tmp/trac-fastcgi.sock",
                      "bin-path" => "/opt/trac11/cgi-bin/trac.fcgi",
                      "check-local" => "disable",
                      "bin-environment" => (
                        "PYTHONPATH" => "/opt/trac11/lib/python2.4/site-packages",
                        "TRAC_ENV" => "/opt/trac11/projects/trac"
                       )
                     )
                   )
                 )

auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/opt/trac11/lighty/conf/user.htdigest"
auth.require = (
       "/trac" => (
         "method"  => "digest",
         "realm"   => "lighty",
         "require" => "valid-user"
       ),
)
●digest認証パスワードファイル
htdigest -c user.htdigest lighty ryo
●起動スクリプト
sudo cp doc/rc.lighttpd.redhat /etc/init.d/lighttpd
sudo vim /etc/init.d/lighttpd

以下の箇所を変更

LIGHTTPD_CONF_PATH="/opt/trac11/lighty/conf/lighttpd.conf"

lighttpd="/opt/trac11/lighty/sbin/lighttpd"
オレオレ証明書作成
mkdir /opt/trac11/lighty/ssl
cd /opt/trac11/lighty/ssl
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
chmod 0600 server.pem
●起動する
sudo /etc/init.d/lighttpd start
●静的htmlの表示テスト
cat > /opt/trac11/htdocs/index.html
<html>
  <head>
    <title>lighty</title>
  </head>
  <body>
    <p>Hello, lighty!</p>
  </body>
</html>

ブラウザでhttp://localhost:4343/を叩いてみて表示されればOK

Tracの表示確認

http://localhost:4343/trac/にアクセスして認証経由でTracの画面になればOK

lightyを複数入れたりする場合はログとか起動スクリプトの管理もちゃんとしなきゃダメだけど、ひとまずこれで動くようにはなるはず。

Trac本に期待

Tracのまとまった資料が書籍という形で世に出るということで期待大。Tracは最初の一歩がわりと難しいと思うので、これでハードルが低くなってもっと普及すればいいなと思います。もちろん資料があったからといって、それだけで悲惨な現場が改善されるわけではないけど、書籍としてまとまる意義は大きいはず。

書籍情報をみるとすごく充実した内容っぽいので、これ読んで勉強しよう。