Tracのサイトにはmod_pythonやFastCGI、CGIで動かす場合のマルチプロジェクト化方法が載っています。
TracMultipleProjects – The Trac Project
mod_wsgiを使う場合については上記に記述はなく、mod_wsgiの本家サイトに方法が載っています。
IntegrationWithTrac – modwsgi – How to use Trac with mod_wsgi. – Project Hosting on Google Code
Ubuntu 10.10の環境で以下のように設定してみました。
Tracはパッケージで導入し、Apacheの設定をあらかじめ作成します。
以下のディレクトリ構成となる前提です。
- /var/lib/trac/sites/${プロジェクト} … プロジェクト個別の設定が配置される
- /var/lib/trac/common … 全プロジェクト共通のファイルが配置される
- /var/lib/svn/${プロジェクト} … Subversionリポジトリ(ただし今回認証等考慮してません)
$ sudo aptitude install trac libapache2-mod-wsgi $ sudo a2enmod wsgi $ sudo vi /etc/apache2/conf.d/trac $ cat /etc/apache2/conf.d/trac WSGIScriptAliasMatch ^/trac/([^/]+) /var/lib/trac/common/cgi-bin/trac.wsgi WSGIPythonPath /usr/share/trac-ja-resource <Location /trac> WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all RewriteEngine On RewriteCond %{REQUEST_URI} ^/trac/([^/]+) RewriteCond /var/lib/trac/sites/%1/conf/trac.ini !-f RewriteRule . - [F] RewriteCond %{REQUEST_URI} ^/trac/([^/]+) RewriteRule . - [E=trac.env_path:/var/lib/trac/sites/%1] </Location> <LocationMatch "/trac/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /var/lib/trac/.htpasswd Require valid-user </LocationMatch>
trac.iniが存在しないURLを指定するとForbiddenが返答されるようになっています。
残念ながらmod_pythonの例のようにTopを指定するとプロジェクトの一覧が表示できる状態にはできていません。RewriteRuleうまく書いたらいけるかな 😕
実際にプロジェクトを作成するには、まずSubversionリポジトリを作成します。
$ sudo mkdir -p /var/lib/svn $ sudo svnadmin create /var/lib/svn/project1 $ sudo chown -R www-data /var/lib/svn/project1
次にTrac側にプロジェクトを作成します。Subversionリポジトリはさっき作成したものを指定します。
$ sudo mkdir -p /var/lib/trac/sites $ sudo trac-admin /var/lib/trac/sites/project1 initenv $ sudo chown -R www-data /var/lib/trac/sites/project1
最後に、これはプロジェクト毎には実施不要ですが、共通のTrac環境ファイル群を/var/lib/trac/commonにデプロイし、Basic認証用の.htpasswdファイルを用意します。
$ sudo trac-admin /var/lib/trac/sites/project1 deploy /var/lib/trac/common $ sudo htpasswd -c /var/lib/trac/.htpasswd username
ちなみにBasic認証の.htpasswdファイルは全プロジェクト共通になりますが、アクセス可能なプロジェクトはTrac側の設定で制御すればいいかと思っています。
Subversionリポジトリへのアクセス制御に関してはこれから考えます。
Sorry, the comment form is closed at this time.