UbuntuサーバにTracを入れる
Subversionに続いてTracを入れてみる。
こんな感じの環境を考える。
- インタアクトの日本語版(Trac-ja)にする。
- データベースはSQLiteにする。
- 必要なPythonモジュールもパッケージで入れちゃう。
- FastCGIで動かす(Apacheを重くしたくない)。
- SSL+Digest認証に限定する。
- anonymousアクセスは認めない(業務運用を想定しているので)。
- 複数のプロジェクトを一括して管理する。
- プロジェクト一覧ページは見せない。
わざわざFastCGIにするぐらいならlighttpdでTrac専用サーバにしてもいいかもしれない。
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
TracのFastCGI用の準備
FastCGIで動かすためのtrac.fcgiをCGI用ディレクトリにコピーする。
どうやら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_pythonやFastCGI環境では使えない。
FastCGIの場合はFastCgiConfig(mod_fastcgiの場合)やDefaultInitEnv(mod_fcgid)で設定するのだが、これらのディレクティブはDirectoryやLocationの中では使えないので、URLを限定して設定したい場合には上記のようにするしかないようだ。
ちなみに、mod_pythonの場合はLocationの中でPythonOptionを使って同様の設定ができる模様。
ApacheのFastCGIモジュールのインストール
ApacheにFastCGIのモジュールをインストールする。
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