Apache 2 + mod_dav_svnでsvnレポジトリをサブドメインで運用する

何気に結構ハマってしまったのでメモる。使用したOSはCentOS 5.1。

名前ベースのバーチャルホストを使う

今回は同一サーバで動かすので、名前ベースで利用する。

#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80

コメントアウトされているのを外す。

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

mod_dav_svnをインストール

yumでインストールできるのでそこから。

sudo yum install mod_dav_svn

mod_dav_svn用のバーチャルホスト設定

おいらは下記のように /opt/svn/repos 以下にプロジェクトごとにレポジトリを作るやり方をいつもしている。

  • opt
    • svn
      • repos
        • project1
        • project2
        • project3

このとき、プロジェクトごとに設定を増やすのがめんどいので /opt/svn/repos以下を一気に設定できるようにしてみた。

<VirtualHost *:80>
  ServerName svn.sample.com
  <Location />
    DAV svn
    SVNListParentPath on
    SVNParentPath /opt/svn/repos
    AuthType Basic
    AuthName "Authorization Realm"
    AuthUserFile /opt/svn/repos/.htpasswd
    Require valid-user
  </Location>
</VirtualHost>

Locationディレクティブの部分を '/' で終わらせてSVNListParentPathをonにすると、SVNParentPath以下のsvnレポジトリを svn.sample.com にアクセスすることで /opt/svn/repos 以下のレポジトリ一覧を出力してくれるっぽい。そして svn.sample.com/project1, svn.sample.com/project2, svn.sample.com/project3 はそれぞれのレポジトリにアクセスできる。
おいらはVirtualHostの設定は全部 /etc/httpd/conf/sites 以下に入れているので、それを読みにいくように httpd.confの最終行にでも書き加える。

Include conf/sites/*.conf

別に指定の仕方は conf/sites/* でも構わないけど、一時的に使用不可にするのに *.conf.disable とかやるので、こういう感じの書き方で。

.htpasswdの準備

さすがに公開する訳にもいかないものが数多く入っているので、Basic認証をかける。ので.htpasswdを準備。上のconfの書き方だと /opt/svn/repos/.htpasswd に書く。

sudo htpasswd -c .htpasswd user

続いてパスワードの入力を求められるので、Basic認証で使うパスワードを入力する。
もうファイルがある場合は -c オプションを外す。

sudo htpasswd .htpasswd new_user

Apacheの再起動

sudo /etc/init.d/httpd restart

ここにあると補完しにくいから、何かしらalias作った方が良さそうな気もするなー、と常々思っているところ。