Trac/SVNサーバの構築と運用
今更感もありますがプロジェクト管理ではTracを愛用しています。Wikiもコードハイライトがしっかり効くので使いやすいですし、Subversionと連携しているのでリンクの作成やちょっとブラウジングする場合も重宝します。もちろん、チケットを使ってタスクを管理しておけばプロジェクトの管理も楽になります。
ところが、いざ導入するとなると導入方法や設定方法など面倒な所もあり、さくっと構築するというわけにもいきません。このメモを使えば30分程度で環境を構築できますので、試しにVMにでも入れてみてください。尚、OSはCentOSを使っています。
準備
使用した環境はVM Ware Server2上のCentOS5.3です。VMへCentOSをインストールする手順は割愛します。基本的に何も追加パッケージを入れ無くとも十分です。
Python
PythonはCentOS5.3にデフォルトで2.4系がインストールされていますので確認します。Python2.4は最新版ではありませんが、CentOSでは色々なスクリプトでPythonを使っているため、バージョンアップはしない方が無難です。
Subversion
バージョン管理システムにSubversionを使います。
インストールされていない場合は、yumでインストールしてください。
$ sudo yum install subversion
mod_wsgi
ApacheからPythonをキックするにはmod_pythonなど幾つかの方法がありますが、最近のオススメはmod_wsgiとのことです*1。yumではインストールできないので、ソースコードをダウンロードしてmakeします。
$ sudo yum install httpd-devel python-devel
$ wget http://modwsgi.googlecode.com/files/mod_wsgi-2.5.tar.gz
$ tar xvfz mod_wsgi-2.5.tar.gz
$ cd mod_wsgi-2.5
$ ./configure
$ make
$ sudo make install
ez_setup
ez_setupはPythonのライブラリ管理ツールで、RubyのGemsやPHPのpearに相当するものです。この後のインストールで必要になるので導入します。
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python ez_setup.py
DocTools(Option)
DocToolsはReST(ReStrucruedText)というWikiを拡張できる構文を利用する為には必要です。
$ sudo easy_install docutils
尚、環境によってはエラーが発生します。
Searching for docutils
Reading http://pypi.python.org/simple/docutils/
Reading http://docutils.sourceforge.net/
Best match: docutils 0.5
Downloading http://prdownloads.sourceforge.net/docutils/docutils-0.5.tar.gz?download
どうもダウンロードエラーになるようです。「?download」が邪魔な様なので次のようにURLを指定してください。
$ sudo easy_install docutils http://prdownloads.sourceforge.net/docutils/docutils-0.5.tar.gz
pygments(Option)
pygmentsはコードのシンタックスハイライトの為に必要です。あるとないではかなり使いやすさが違いますので必須です。
$ sudo easy_install pygments
Trac
Tracの本体はインタアクト社が翻訳しているバージョンをインストールします。
$ wget http://www.i-act.co.jp/project/products/downloads/Trac-0.11.4.ja1.zip
$ unzip Trac-0.11.4.ja1.zip
$ cd Trac-0.11.4.ja1
$ sudo python ./setup.py install
AccountManagerPlugin
AccountManagerPluginはアカウント管理用のプラグインは必須です。
$ sudo easy_install http://trac-hacks.org/svn/accountmanagerplugin/0.11
プラグインは各Tracのプロジェクトにインストールする方法と、Pythonのライブラリとしてインストールする方法があります。前者は他の個々のプロジェクト毎にインストールしたいものを管理し、全体で使用するようなプラグインはeasy_installでライブラリとしてインストールしてしまいましょう。
Pythonのdefaultencodingをutf-8にする
Pythonのdefaultencodingはasciiです。スクリプトでは優先度などを日本語化していますが、これを有効にするにはdefaultencodingをutf-8にする必要があります。
/usr/lib/python2.4/site-packages/sitecustomize.py を開き、次のコードを追加してください。
import sys sys.setdefaultencoding("utf-8")
優先度などを日本語化しない場合は不要です。
ディレクトリ構成
Tracを構築する場合に悩ましいのがどんなディレクトリ構造にすればいいのかかと思います。ここでは1つのサーバに幾つかのプロジェクトを配置する事を想定してサーバを構築していきます。各Trac/SVNは個々に管理されるので、クライアント毎にアクセス制限をかけて運用するなども可能にしておきます。まずディレクトリ構造は次のようになります。
/var/projects/ プロジェクトのルートディレクトリ
+- sample/ sampleプロジェクトホーム
+ repo/ sampleプロジェクトのリポジトリ
+ trac/ sampleプロジェクトのTrac
+ .htdigest sampleプロジェクトの認証ファイル
プロジェクトが追加された場合は、/var/projects/に追加します。
構築手順
構築する手順は以下の通りです。
1. リポジトリを作成する
1. trac-adminでTracのプロジェクトを作成する
1. 認証設定を行う
1. tracのwsgiファイルを作成する
1. Apacheのconfを作成し、SubversionとTracのパスを設定する
慣れてきても手作業で全て行うのはちょっと面倒ですので、自動化したスクリプトを用意しました。ダウンロードはこちらから。
このスクリプトはSVNのリポジトリとTracのプロジェクトを生成し、初期ユーザの設定まで行うスクリプトです。また、wsgiによつApacheとの連携スクリプトも追加します。
# sudo python gen_project.py
Enter project name[example: duke]: test ← プロジェクト名を入力
Enter projects root[/var/projects/]: ← プロジェクトルート
Enter username[admin]: ← 初期ユーザ(デフォルトはadmin)
Enter password[admin]: ← 初期パスワード(デフォルトはadmin)
project name: test
project root: test
create project_root: /var/projects/
create repository: /var/projects/test/repo
create trac env: /var/projects/test/trac
(中略)
create: /var/projects/test/.htdigest
create: /var/projects/test/trac/trac.wsgi
create: /var/projects/test/trac_test.conf
create: /var/projects/test/trac_test_vhost.conf
append: /var/projects/test/trac/conf/trac.ini
finish.
後はtrac_test.confをApacheの設定ディレクトリにコピーするだけです。尚、スクリプトで生成されるconfではリポジトリへのアクセスは誰でもできるがコミットは認証ユーザのみ、Tracへのアクセスは誰でもできるがチケットの登録などの権限はTracで管理というスタンスです。内部で使う場合はもっと緩くしても構いませんし、外部に見えるところにお客様の情報を置く場合はもっと厳しくしてください。
trac_test.conf
/var/projects/test/trac_test.confはバーチャルホストを使わない場合の設定ファイルの雛形です。要点のみ解説します。
# trac site setting
WSGIDaemonProcess test user=apache group=apache threads=10
WSGIScriptAlias /test "/var/projects/test/trac/trac.wsgi"
WSGIProcessGroup test
WSGIApplicationGroup %{GLOBAL}
パスはデフォルトでは、http://hostname/PROJECT_NAME/がTracのURLになります。修正する場合はWSGIScriptAliasの後を書き換えてください。
wsgiで起動させるTracのスクリプトtrac.wsgiはスクリプトで生成されます。内容としてはこれだけです。
# Generated Script. import os os.environ['TRAC_ENV'] = '/var/projects/test/trac' os.environ['PYTHON_EGG_CACHE'] = '/var/projects/.eggs' import trac.web.main application = trac.web.main.dispatch_request
次にSVNの設定です。
DAV svn
SVNPath /var/projects/test/repo
AuthType Digest
AuthName trac_users
AuthUserFile /var/projects/test/.htdigest
Require valid-user
リポジトリのパスはデフォルトでは、http://hostname/repos/PROJECT_NAME/です。修正したい場合は Locationの後を修正してください。
認証はGET等に関して認めているので閲覧は誰でもできます。閲覧も禁止したい場合は、LimitExceptを削ればOKです。
trac_test_vhost.conf
バーチャルホストで使用する場合は、/var/projects/test/trac_test_vhost.confを編集します。
デフォルトではtracが http://trac.example.jp/PROJECT_NAME/ 、リポジトリがhttp://svn.example.jp/PROJECT_NAME/ でアクセスできるように設定されています。ここは各自の環境にあわせて設定願います。
confファイルの配置とApacheの再起動
confファイルを設定し、サーバを再起動します。
sudo cp /var/projects/test/trac_test.conf /etc/httpd/conf.d
sudo /etc/init.d/httpd restart
アクセス出来ない場合
Apacheのエラーログに何も出力されず、真っ白な画面でタイムアウトする場合、mod_pythonが動いている可能性が高いです。mod_wsgiとは同時に使用できませんのでmod_wsgiの設定を解除してください。
ユーザ管理
ユーザ管理はTracのaccount management pluginで行います。初期設定でdigest認証となっており、apacheの認証設定でリンクさせていますので、Tracにユーザを追加すればSVNの認証ユーザとなります。
チケット日本語化
gen_project.pyを実行したとき、pythonのdefaultencodingがutf-8ならばチケット設定を日本語化します。色々と運用してみた結論としては、ここが英語だと使ってくれません。試しに日本語化してみてはいかがでしょうか?
チケットの種類
優先度
- 可能な限り早くやる / 他の作業をとめてでもやりましょう
- 優先的にやる / 他の仕事で割り込みは避けましょう
- 早めにやる / あいている限りはすぐに片付けましょう
- 後でやる / 残りのタスクが片付いたならばやりましょう
- やれたらやる / 多分やりません
重要度
- プロジェクトの危機 / 言語が変わりそうとか要件が満たせないとか…
- かなり重要 / プロジェクトの中でも特に重要な部分です
- 忘れないこと / 必ず最後までに片付けなくてはなりません
- 影響があるかも / やり残しはちょとまずいです
- 無視してOK / ありましたね、そんなチケットも
解決方法
- 解決 / TODOなら完了、バグなら解決しました
- チケットの誤り / チケット自体が無効なようです
- 修正の必要なし / 特に修正する必要なくチケットが解決します(回答のみなど)
- 重複 / 他のチケットと重複していました
- 再現せず / 不具合などが再現できません
それでは、よりよいTracライフを!
*1:「うぃすきぃ」と呼ぶらしい