Trac on Windows(2)
複数プロジェクトのハンドリングを考えてみる。まず参考にしたのが
たしかにこれとSVNParentPathを組み合わせれば、Apacheの再起動なしでプロジェクトが追加できる。ただ「プロジェクト」=「開発案件」なので、アクセスできる人はプロジェクト毎に制御しなければならない。内部の人間は全案件アクセス可でも良いが、外注さんはそういうわけにいかん。そうなるとパスワードファイルを分ける必要が出てくる。またTracのサーバは外部セグメントに置く予定なので、認証に成功したらTopページを表示するようにしないとまずい。anonymousの閲覧を許すわけにはいかん。
ということを念頭に、ちょっと設定を考えてみる。今回想定した環境は次のようなもの。プロジェクトとしてProj1, Proj2, Proj3を作成する。Subversionはc:\svnrepos, Tracはc:\tracをリポジトリ置き場とする。
c:\svnrepos c:\trac | | +-- \Proj1 +-- \Proj1 | | +-- \Proj2 +-- \Proj2 | | +-- \Proj3 +-- \Proj3
各プロジェクトのパスワードファイルと登録ユーザは次のようにする。
プロジェクト | パスワードファイル | ユーザ | パスワード |
---|---|---|---|
Proj1 | c:\svnrepos\conf\Proj1_passwd | user1 | user1 |
Proj2 | c:\svnrepos\conf\Proj2_passwd | user2 | user2 |
Proj3 | c:\svnrepos\conf\Proj3_passwd | user3 | user3 |
では、複数のプロジェクト用にApacheを設定するを参考に設定してみる。
Tracプロジェクトのディレクトリ作成
Apacheのドキュメントルート、つまりhttpd.confのDocumentRootで定義されたディレクトリ下にTrac用のディレクトリprojectsを作成する。手順としては、もし
DocumentRoot "C:/www"
となっているなら
mkdir c:\www\projetcts
とするか、エクスプロラーでc:\wwwの下に新規フォルダprojetcts作成。そしてこのprojetctsの下に
する。
Subversionリポジトリの作成
Proj1, Proj2, Proj3に対応するリポジトリを作成する。ここでは以下のようなコマンドで作成。各プロジェクトにはproj1.txt, proj2.txt, proj3.txtをimportしておく。これはこのあとTracでアクセスしたとき、所定のSubversionリポジトリをアクセスできているか確認しやすくするためdummyで登録したもの。深い意味は無い。
SET SVN_EDITOR=notepad.exe svnadmin create c:/svnrepos/Proj1 svn mkdir file:///c:/svnrepos/Proj1/trunk file:///c:/svnrepos/Proj1/branches file:///c:/svnrepos/Proj1/tags mkdir Proj1_temp echo "This is Proj1" > Proj1_temp\proj1.txt svn import -m "importing Proj1" Proj1_temp file:///c:/svnrepos/Proj1/trunk svnadmin create c:/svnrepos/Proj2 svn mkdir file:///c:/svnrepos/Proj2/trunk file:///c:/svnrepos/Proj2/branches file:///c:/svnrepos/Proj2/tags mkdir Proj2_temp echo "This is Proj2" > Proj2_temp\proj2.txt svn import -m "importing Proj2" Proj2_temp file:///c:/svnrepos/Proj2/trunk svnadmin create c:/svnrepos/Proj3 svn mkdir file:///c:/svnrepos/Proj3/trunk file:///c:/svnrepos/Proj3/branches file:///c:/svnrepos/Proj3/tags mkdir Proj3_temp echo "This is Proj3" > Proj3_temp\proj3.txt svn import -m "importing Proj3" Proj3_temp file:///c:/svnrepos/Proj3/trunk
Tracリポジトリの作成
手順はC:\Python23\Scriptsへcdしてadminを実行する。
(1)python trac-admin c:/trac/Proj1 initenv
(2)Project Name [My Project]> に対して Proj1
(3)Database connection string [sqlite:db/trac.db]> に sqlite:db/Proj1.db
(4)Path to repository [/var/svn/test]> に c:/svnrepos/proj1/trunk
(5)Templates directory [C:\Python23\share\trac\templates]> は ENTERのみ
続けてProj2, Proj3も定義。上記Proj1の部分を、それぞれProj2, Proj3に変えて実行すればOK。
パスワードファイルの作成
各プロジェクト用パスワードファイルを作成。このファイルでアクセスできるユーザを定義する。手順としてはApacheのBasic認証用ファイルを作るのと同じ。
C:\Program Files\Apache Group\Apache2\bin>htpasswd -c -m Proj1_passwd user1 New password: ***** Re-type new password: ***** Adding password for user user1
同様にProj2, Proj3用も作成。そしてこれらファイル(=Proj[123]_passwdのことね)をc:\svnrepos\confへmoveする。
httpd.confの調整
以上の内容をもとにhttpd.confへ定義を追加する。すでにSubversion, Tracに関する設定が記載されている場合は、それらと干渉しないか確認。
# Subversion <Location /svnrepos/Proj1> DAV svn SVNPath c:\svnrepos\Proj1 AuthType Basic AuthName "svn Proj1" AuthUserFile c:\svnrepos\conf\Proj1_passwd Require valid-user </Location> <Location /svnrepos/Proj2> DAV svn SVNPath c:\svnrepos\Proj2 AuthType Basic AuthName "svn Proj2" AuthUserFile c:\svnrepos\conf\Proj2_passwd Require valid-user </Location> <Location /svnrepos/Proj3> DAV svn SVNPath c:\svnrepos\Proj3 AuthType Basic AuthName "svn Proj3" AuthUserFile c:\svnrepos\conf\Proj3_passwd Require valid-user </Location> # Trac <Directory "C:/Python23/share/trac/htdocs"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> RewriteEngine on RewriteRule ^/projects/+$ /projects/index.html [L] RewriteCond c:/trac/$1 -d RewriteRule ^/projects/([[:alnum:]]+)(/?.*) /projects/trac.cgi$2 [S=1,E=TRAC_ENV:c:/trac/$1] RewriteRule ^/projects/(.*) /projects/index.html <Directory "c:/www/projects"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch AddHandler cgi-script .cgi Order allow,deny Allow from all </Directory> <Location "/projects/Proj1"> AuthType Basic AuthName "trac Proj1" AuthUserFile c:\svnrepos\conf\Proj1_passwd Require valid-user </Location> <Location "/projects/Proj2"> AuthType Basic AuthName "trac Proj2" AuthUserFile c:\svnrepos\conf\Proj2_passwd Require valid-user </Location> <Location "/projects/Proj3"> AuthType Basic AuthName "trac Proj3" AuthUserFile c:\svnrepos\conf\Proj3_passwd Require valid-user </Location>
SubversionとTracのリポジトリは同じパスワードファイルを使いBasic認証させます。
最後にrewrite_moduleを有効にします。
#LoadModule rewrite_module modules/mod_rewrite.so ↓ LoadModule rewrite_module modules/mod_rewrite.so
これでApacheを再起動すれば準備OK。
プロジェクトへログイン
上記の設定により各プロジェクトはhttp://[サーバ名]/projects/[プロジェクト名]でアクセスできます。
- http://[サーバ名]/projects/Proj1
- http://[サーバ名]/projects/Proj2
- http://[サーバ名]/projects/Proj3
このときBasic認証のダイアログが表示されるので、所定のユーザ名/パスワードを入力します。ログイン後、リポジトリブラウザをクリックするとimportしたtxtファイルが表示されるます(Proj2ならproj2.txt)。
index.htmlの作成
以上で一応使えるようになりますが、index.htmlもあったほうが便利かな。上記の設定では、http://[サーバ名]/projectsがアクセスされるとc:\www\projects\index.htmlがブラウザに返されます。そこで以下のような内容にしておくと、ポータルっぽくなります。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-2022-JP"> <title>Trac projects center</title> </head> <body> <p>Trac projects center</p> <ul> <li><a href="Project">http://localhost/projects/Proj1">Project 1</a> <li><a href="Project">http://localhost/projects/Proj2">Project 2</a> <li><a href="Project">http://localhost/projects/Proj3">Project 3</a> </ul> </body> </html>
ただ不特定多数がアクセス可能なところにサーバを置く場合は、あまり詳しく書くのはまずいだろう。そういう運用にしたいときは、このページ自体をBasic認証の保護下にすべきなんだろうけど、パスワードが問題か。2回入力させるのもね~。各プロジェクトのパスワードファイルの最大公約数的なものを使うようにすればいいんだろうけど、維持管理がめんどくさそうな。このindex.htmlは使わない運用がスマートかも(をぃ。