新規のプロジェクトでSubversionが選択されるケースも少なっていそうだし、よくあるネタですがすこし躓いたので整理してメモっておきます。
ほとんどはここに書いてあります。
前提
- RedmineとSubversionが同一サーバ
- apacheのperl_module、dav_svn_module、authz_svn_moduleのモジュールが使えるようになっていること1
- /var/www/svn以下がSubversionのリポジトリの置き場所
ポイント
- プロジェクト識別子とリポジトリ名を一致させる
- プロジェクトメンバーのアカウントでのみアクセス可能
subversion側の設定
ディレクトリのアクセス権限
apacheユーザが読み書きできるようにします。
chown -R apache:apache /var/www/svn
SELinuxが有効な状態では下記が必要みたいです。
chcon -R system_u:object_r:httpd_sys_content_t /var/www/svn
apacheの設定ファイル
apacheのconf.dにsubversion用の設定ファイルを追加します。
ここで/svnのアクセスに、Basic認証して、RedmineのDBを見に行くように設定します。
LoadModule perl_module modules/mod_perl.so
PerlLoadModule Apache::Authn::Redmine
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
RequestHeader edit Destination ^https http early
<Location /svn>
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName "subversion repository"
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
# RedmineのDBの接続情報
RedmineDSN "DBI:mysql:database=redmine;host=localhost"
RedmineDbUser "redmine"
RedmineDbPass "redmine"
Require valid-user
</Location>
Redmineとの連携手順
あとは、Redmineのプロジェクトと連携できるように、プロジェクトとリポジトリを作成します。
- プロジェクトを作成
- プロジェクト識別子と同じ名前でリポジトリを作成
- アクセスさせたいユーザをプロジェクトのメンバーに追加
- http://[redmine_server]/svn/[project_identifier]でリポジトリにアクセスできることを確認
1. プロジェクトを作成
Redmineの画面から作ります。識別子をおぼえておきます。
2. プロジェクト識別子と同じ名前でリポジトリを作成
これがポイントです。ここを間違えてハマリました...
# cd /var/www/svn
# svnadmin create [project_identifier]
# chown -R apache:apache [project_identifier]
SELinuxが有効な状態では下記が必要なです。
chcon -R system_u:object_r:httpd_sys_content_t [project_identifier]
3. アクセスさせたいユーザをプロジェクトのメンバーに追加
プロジェクト識別子で認証対象を制限しているので、アクセスできるのはプロジェクトのメンバーに限定されます。プロジェクトの設定タブのメンバーから、追加します。
(これに気付くのに、わざわざSQLのログを出して確認してしまいましたよ...)
4. http://[redmine_server]/svn/[project_identifier]でリポジトリにアクセスできることを確認
ブラウザからアクセスしてもよいですし、
svn ls "http://[redmine_server]/svn/[project_identifier]"
でも確認できます。
認証が要求されるので、プロジェクトメンバーのアカウント情報を入力して、アクセスできればOKです。
参考サイト
CentOSへのapache+subversionの入れ方
-
CentOSなら
yum install mod_perl mod_dav_svn subversion
↩