UbuntuサーバにTracを入れる

Subversionに続いてTracを入れてみる。
こんな感じの環境を考える。

  • インタアクトの日本語版(Trac-ja)にする。
  • データベースはSQLiteにする。
  • 必要なPythonモジュールもパッケージで入れちゃう。
  • FastCGIで動かす(Apacheを重くしたくない)。
  • SSL+Digest認証に限定する。
  • anonymousアクセスは認めない(業務運用を想定しているので)。
  • 複数のプロジェクトを一括して管理する。
  • プロジェクト一覧ページは見せない。


わざわざFastCGIにするぐらいならlighttpdTrac専用サーバにしてもいいかもしれない。

Tracのインストール

UbuntuにはTracのパッケージと日本語リソースパッケージもあるのだが、日本語リソースの方がなんか古かったりして不安なので、インタアクトが公開しているTrac-jaを入れることにする。


日本語版配布元
http://www.i-act.co.jp/project/products/products.html

sudo apt-get install python-{setuptools,subversion,pysqlite1.1,clearsilver,genshi,pygments}
cd /usr/local/src
wget http://www.i-act.co.jp/project/products/downloads/Trac-0.11.2.1.ja1.zip
unzip Trac-0.11.2.1.ja1
cd Trac-0.11.2.1.ja1
sudo python ./setup.py install

バージョンは適宜書き換える。
Pythonモジュールをeasy_installで入れたい人はそのように。

Trac Environment(リポジトリ)の準備

Subversion同様、まずはTrac Environment自体を格納するディレクトリを作る。お好みの場所でどうぞ。

sudo mkdir /var/lib/trac
sudo chown www-data /var/lib/trac

そして新規プロジェクト立ち上げ。

sudo trac-admin /var/lib/trac/foo initenv
sudo chown -R www-data /var/lib/trac/foo

こちらもApacheでアクセスすることになるので、オーナーをwww-dataに変えておく。


試しにtracdで立ち上げてみてちゃんと動くか確認する。

sudo tracd --port 8000 /var/lib/trac/foo

TracFastCGI用の準備

FastCGIで動かすためのtrac.fcgiCGIディレクトリにコピーする。
どうやらtrac 0.11からは/usr/share以下にファイルが置かれなくなったようなので、zipに入ってたやつを自分でコピーする。

sudo mkdir /usr/lib/cgi-bin-ssl
sudo cp /usr/local/src/Trac-0.11.2.1.ja1/cgi-bin/trac.fcgi /usr/lib/cgi-bin-ssl
sudo chmod +x /usr/lib/cgi-bin-ssl/trac.fcgi

デフォルトでは/usr/lib/cgi-binディレクトリがあるけど、これは非SSLで見える設定になっているので、SSL専用にcgi-bin-sslというディレクトリを用意してみた。


続いてPython eggのキャッシュディレクトリを用意する。

sudo mkdir /var/lib/trac/.egg-cache
sudo chown www-data /var/lib/trac/.egg-cache

場所はどこでもいいんだけど、Trac Environmentと同じ階層に置く場合は.egg-cacheというディレクトリ名固定でなければいけない。でないとTrac Environmentのディレクトリと誤認識されてしまう。
本当は別の場所にしておいた方がいいんだろうけど、/var/lib/tracに全て閉じ込めたかったので。


続いて環境変数を設定するためにtract.fcgiを書き換える。

# ファイル先頭のコメント部分
#         :
#         :

# 以下を追加
import os
os.environ['PYTHON_EGG_CACHE']    = '/var/lib/trac/.egg-cache'
os.environ['TRAC_ENV_PARENT_DIR'] = '/var/lib/trac'

提供されているファイルはあまり書き換えたくないので、本来であればApacheのSetEnvディレクティブで指定したいところなんだが、これはmod_pythonFastCGI環境では使えない。
FastCGIの場合はFastCgiConfig(mod_fastcgiの場合)やDefaultInitEnv(mod_fcgid)で設定するのだが、これらのディレクティブはDirectoryやLocationの中では使えないので、URLを限定して設定したい場合には上記のようにするしかないようだ。
ちなみに、mod_pythonの場合はLocationの中でPythonOptionを使って同様の設定ができる模様。

ApacheFastCGIモジュールのインストール

ApacheFastCGIのモジュールをインストールする。
FastCGIにはmod_fastcgiとmod_fcgidの二種類があるが、今回はmod_fcgidを使うことにした。正直どちらがいいのかわからない。

sudo apt-get install libapache2-mod-fcgid

Apacheの設定

Subversionの時と同様に、/etc/apache2/sites-available/default-sslに設定を書き加える。別ファイルにしてIncludeしてもいい。

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
</VirtualHost>
    :
    : # other configuration
    :

  # 以下を追加
  <Directory "/usr/lib/cgi-bin-ssl">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>

  ScriptAlias /trac /usr/lib/cgi-bin-ssl/trac.fcgi

  # プロジェクト一覧は見せない
  <Location ~ "/trac/?$">
    Order allow,deny
    Deny from all
  </Location>

  # 各プロジェクトはDigest認証
  <Location ~ "/trac/.+">
    AuthType Digest
    AuthName "Trac"
    AuthUserFile /etc/apache2/.htdigest
    Require valid-user
  </Location>

  # プロジェクト一覧を見せていい場合はこれだけでいい
  #<Location /trac>
  #  AuthType Digest
  #  AuthName "Trac"
  #  AuthUserFile /etc/apache2/.htdigest
  #  Require valid-user
  #</Location>
</IfModule>

パスや細かな設定はお好みで。
今回はプロジェクト一覧を見せたくなかったのでルートと配下で別々にアクセス制限をかけている。一覧を見せていいならコメントアウトしてあるほうだけでよい。
また、anonymousアクセスを許可するのであれば、/trac/[^/]+/loginでログインにだけDigest認証をかければよい。


続けてDigest認証用のファイルを作成する。

sudo htdigest /etc/apache2/.htdigest "Trac" username

ここでは既に導入したSubversionと同じファイルを使っているので-cオプションはつけていない(新規作成時は-cを付ける)。
realmはAuthNameと同じものを指定する。ここではSubversionとは異なるrealmとしたが、Subversionと同じrealmで運用したほうが利便性がよいかもしれない。

Apache再起動

設定が終わったのでモジュールを有効にしてApacheを再起動する。

sudo a2enmod fcgid
sudo /etc/init.d/apache2 restart

これでTracにアクセス出来るようになったはず。


2009年1月30日追記
mod_fcgidの設定(/etc/apache2/mods-available/fcgid.conf)をきちんと行った方がいいようだ。
デフォルト状態だと結構多くのプロセスを捌くようなので、デスクトップPCの仮想マシン上でApache Bench回したら大変なことになった。
設定内容は↓から。


The mod_fcgid Home Page
http://fastcgi.coremail.cn/doc.htm