Tracをマルチプロジェクト対応にする

 article  Comments Off on Tracをマルチプロジェクト対応にする
Mar 112011
 

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リポジトリへのアクセス制御に関してはこれから考えます。

 Posted by at 1:02 am  Tagged with: