ブログにも書いたけどこっちにも。
タイトルの通り。以下の環境・アプリケーションを使用して Subversion サーバーを構築する。
- Windows Server 2012
- Apache 2.4.16
- Subversion 1.9.0
- 外部からは
http://svn.example.com/svn/
の URL に対してアクセス。
1. 準備
ApacheHaus の Web ページから、Apache および Subversion のモジュールをダウンロードする。
Windows 向けのパッケージは ApacheHaus 以外のサイトでも公開されているが、ApacheHaus だと Subversion のモジュールも一緒に提供されているので安心感がある。
今回は以下のモジュールをダウンロード。
※ Apache および Subversion のモジュールは VC9 でコンパイルされたものと VC11 でコンパイルされたものの 2 種類があるので揃えるように注意する。
- Apache 2.4.16 x64 (Apache 2.4.x VC11)
- Mod Subversion 1.9.0 for Apache 2.4.x x64 (Modules for Apache 2.4.x VC11)
2. モジュールを展開する
ダウンロードしたモジュールを展開する。今回はそれぞれ以下のディレクトリに展開する。
- Apache : D:\Application\Apache\httpd-2.4.16-x64
- Subversion : **Apache と同じディレクトリに展開 (統合) する。
D:\
`- Application\
`- Apache\
`- httpd-2.4.16-x64\
3. リポジトリを配置するディレクトリを作成する
Subversion のリポジトリを配置するディレクトリを作成する。今回は D:\Application\Apache\_svn\repositories
というディレクトリを作成。
4. Apache の設定ファイルを修正
Apache の設定ファイルを修正。主な修正内容は以下のとおり。
httpd.conf
- デフォルトの設定だと
ServerRoot
が存在しないディレクトリをを指しているので修正 - 必要なモジュールを有効化
- 今回用に作成する設定ファイルを読み込むように設定
svn.conf (新規作成)
- Subversion サーバーの設定
- LDAP 認証の設定
- リポジトリごとのアクセス権限を設定できるようにする
httpd.conf
修正する箇所のみ記載。
(デフォルトの設定だと `ServerRoot` が存在しないディレクトリをを指しているので修正)
- Define SRVROOT "/Apache24"
+ Defile SRVROOT "D:/Application/Apache/httpd-2.4.16-x64"
(必要なモジュールを有効化。それぞれ先頭の # を削除してコメント解除。)
- #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
+ LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
- #LoadModule ldap_module modules/mod_ldap.so
+ LoadModule ldap_module modules/mod_ldap.so
(今回用に作成する設定ファイルを読み込むように設定)
+ Include conf/svn.conf
svn.conf
httpd-2.4.16-x64\conf
ディレクトリ内に新規ファイルとして作成する。
#### Subversion サーバー
# モジュールロード
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
# バーチャルホスト設定
<VirtualHost *:80>
ServerAdmin administrator@example.com
ServerName svn.example.com
CustomLog "logs/svn.example.com/access.log" common
ErrorLog "logs/svn.example.com/error.log"
Timeout 1200
ProxyTimeout 1200
<Location /svn/>
DAV svn
SVNParentPath "D:/Application/Apache/_svn/repositories"
SVNListParentPath on
AuthzSVNAccessFile "D:/Application/Apache/_svn/access-rule.txt"
# LDAP認証
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider ldap
AuthLDAPUrl "ldap://ad.example.com:389/DC=example,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN Administrator@example.com
AuthLDAPBindPassword administrator-password
Require valid-user
LDAPReferrals Off
</Location>
</VirtualHost>
以下、簡単にディレクティブの設定を解説。詳しくはお調べください。
- CustomLog, ErrorLog
該当のバーチャルホストにアクセスされた際のアクセスログとエラーログの出力先を指定。
今回はlogs\svn.example.com
ディレクトリにログを出力するように設定しているが、svn.example.com
ディレクトリを事前に作成していないと apache の起動に失敗するので注意。 - SVNParentPath
Subversion リポジトリが配置されているディレクトリを指定。 - AuthzSVNAccessFile
リポジトリごとにアクセス権限を設定するためのファイルを指定。権限の設定方法は後述。 - AuthLDAPUrl, AuthLDAPBindDN, AuthLDAPBindPassword
LDAP サーバー (今回は ActiveDirectory) に接続するための情報を指定。 - LDAPReferrals Off
よくわからないけど付けないとエラーが発生する。
5. リポジトリの作成
D:/Application/Apache/_svn/repositories
ディレクトリにリポジトリを作成する。他のサーバーに作成済みの Subversion リポジトリをコピーしてきても OK 。
リポジトリを作成するためのコマンドは、Apache ディレクトリに統合した際に httpd-2.4.16-x86\bin
に展開されているので、パスを通すか直接呼び出す。
初期ディレクトリの作成が長くて打ち間違えると大変なので、バッチ化した方がいい。
(リポジトリのルートディレクトリに移動)
> cd D:\Application\Apache\_svn\repositories
(リポジトリ hoge を作成)
> D:\Application\Apache\httpd-2.4.16-x64\bin\svnadmin.exe create hoge
(初期ディレクトリ作成)
> D:\Application\Apache\httpd-2.4.16-x64\bin\svn.exe mkdir ^
file:///D:/Application/Apache/_svn/repositories/hoge/trunk ^
file:///D:/Application/Apache/_svn/repositories/hoge/branches ^
file:///D:/Application/Apache/_svn/repositories/hoge/tags ^
-m "Create base directories"
6. リポジトリの権限設定
D:/Application/Apache/_svn/access-rule.txt
にリポジトリのアクセス権限を設定するためのファイルを作成する。
[groups]
hoge = rabitarochan, user_aaa, user_bbb
fuga = user_aaa, user_bbb
[repo_hoge:/]
* =
@hoge = rw
[repo_fuga:/]
* =
@fuga = rw
以下、簡単に解説。詳細は AuthzSVNAccessFile
でググろう。
-
[groups]
以下にグループを定義することができる。<グループ名> = <ユーザー名>
の形式で記述し、ユーザー名はカンマで区切る。 -
[<リポジトリ(ディレクトリ)名>:<パス>]
以下にアクセス権限を定義できる。パスは/hoge
のように詳細に設定することも可能。-
* =
をはじめに定義し、全てのユーザーからのアクセスを禁止する。 -
@hoge = rw
を定義し、hoge
グループのユーザーに対して read / write 権限を追加。
読み取り専用の権限を設定する場合は@hoge = r
と記述する。 - グループは必ず作成する必要はなく、
user_ccc = rw
とユーザーの権限を直接定義することも可能。
-
7. Apache を Windows サービスに登録する。
コマンドプロンプトにて以下のコマンドを実行。
(Windows サービスに登録)
> D:\Application\Apache\httpd-2.4.16-x64\bin\httpd.exe -k install
以下、オプションなど補足。
-
-n <サービス名>
とすると、サービス名を指定できる。デフォルトはApache2.4
。 - Windows サービスを解除する場合は
-k uninstall
を実行する。もし-n
オプションでサービス名を指定して登録した場合は、名前を揃える必要があるので注意する。
8. 起動, 動作確認
Windows サービスの管理画面から、登録したサービスを開始する。Apache の設定ファイルの記載ミスや、必要なファイル, ディレクトリがない場合は起動に失敗するため、Apache のログファイルを参照して解決する。
まとめ
Apache + Subversion on Windows Server の手順をほぼ 1 から解説してみました。 Collabnet Subversion Edge が遅いと苦情を受けた方 (おれおれ!!) は、ぜひお試しください。
お願い : 基本的にはこの流れで問題ないはずですが、上手くいかない場合はコメントください。