httpでアクセスできるSubversionサーバーを構築する

最近はGitに押されて勢いのないSubversionですが、小規模な開発だったらまだまだ使えます。

今回はhttpでアクセス可能なSubversionサーバーを構築したいと思います。Apache httpdを使うので、当然SSLによる通信の暗号化もできます。また、htpasswdによるアクセス制限やアクセス制御等も行います。

前提条件

構築の前に、Apache httpdのインストールおよびSSLの設定が完了していることが条件となります。

イントラネットやVPNなど閉じたネットワークであればSSLは不要かもしれませんが、念のため。

オレオレ証明書もインストールしておくと楽です。

SVNコマンドのインストール

今回使用するsvnコマンドは、デフォルトでインストールされています(CentOS 7の場合)。なので特別な作業は不要ですが、インストールされていない場合はyumコマンドでインストールしておきます。

[root@sakura ~]# yum install svn
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: mirror.dmmlabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
パッケージ subversion-1.7.14-11.el7_4.x86_64 はインストール済みか最新バージョンです
何もしません
[root@sakura ~]#

mod_dav_svnのインストール

Apache httpdでSVNリポジトリを参照するモジュールmod_dav_svnはインストールされていないので、yumコマンドでインストールしておきます。

[root@sakura ~]# yum install mod_dav_svn
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: mirror.dmmlabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ mod_dav_svn.x86_64 0:1.7.14-11.el7_4 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

==========================================================================================================================================================================================================================================================
 Package                                                       アーキテクチャー                                         バージョン                                                        リポジトリー                                               容量
==========================================================================================================================================================================================================================================================
インストール中:
 mod_dav_svn                                                   x86_64                                                   1.7.14-11.el7_4                                                   updates                                                   102 k

トランザクションの要約
==========================================================================================================================================================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 102 k
インストール容量: 212 k
Is this ok [y/d/N]: y
Downloading packages:
mod_dav_svn-1.7.14-11.el7_4.x86_64.rpm                                                                                                                                                                                             | 102 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : mod_dav_svn-1.7.14-11.el7_4.x86_64                                                                                                                                                                                        1/1
  検証中                  : mod_dav_svn-1.7.14-11.el7_4.x86_64                                                                                                                                                                                        1/1

インストール:
  mod_dav_svn.x86_64 0:1.7.14-11.el7_4

完了しました!
[root@sakura ~]#

Apache httpdでSubversionサーバーを構築する設定

設定ファイルを作成します。

その前に、モジュールがちゃんとインストールされていることを確認します。

[root@sakura ~]# cd /etc/httpd/
[root@sakura httpd]# ls -la modules/mod_dav_*
-rwxr-xr-x 1 root root  57120 10月 20 05:40 modules/mod_dav_fs.so
-rwxr-xr-x 1 root root  19632 10月 20 05:40 modules/mod_dav_lock.so
-rwxr-xr-x 1 root root 181344  8月 24  2017 modules/mod_dav_svn.so
[root@sakura httpd]#

また読み込む設定ファイルとして/etc/httpd/conf.module.d/10_subversion.confが存在し、LoadModuleの記述があることを確認します。このファイルはhttpdの起動時に自動的に読み込まれます。

[root@sakura httpd]# ls -la conf.modules.d/10-subversion.conf
-rw-r--r-- 1 root root 164  8月 23  2017 conf.modules.d/10-subversion.conf
[root@sakura httpd]# cat conf.modules.d/10-subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
LoadModule dontdothat_module  modules/mod_dontdothat.so
[root@sakura httpd]#

次に設定ファイルを/etc/httpd/conf.d/subversion.confに用意します。

/etc/httpd/conf.d/subversion.conf<IfModule dav_svn_module>
    <Location /svn>
        SSLRequireSSL
        DAV                     svn
        SVNListParentPath       on
        SVNParentPath           /var/apps/svn/repos/

        #BASIC認証
        AuthType                Basic
        Require                 valid-user
        AuthName                "Suvbersion Repository"
        AuthUserFile            /var/apps/svn/htpasswd
        AuthzSVNAccessFile      /var/apps/svn/authz

    </Location>
</IfModule>

SSLRequireSSLでアクセスをSSLに限定しています。また、BASIC認証も設定しています。

htpasswdコマンドで/var/apps/svn/htpasswdにユーザー情報を作成します。

[root@sakura httpd]# htpasswd -bc /var/apps/svn/htpasswd hoge hogemura
Adding password for user hoge
[root@sakura httpd]#

/var/apps/svn/authzはいわゆるアクセスコントロールリスト(ACL)ファイルになります。ここに、どのリポジトリに誰がアクセスできるかを記述します。

/var/apps/svn/authz[groups]
admins=admin,hoge

[/]
@admins=rw
*=r

[sample:/]
@admins=rw

Subversionリポジトリの作成

svnコマンドで、リポジトリ(プロジェクトごとに作成する、ファイルを管理する領域)を作成します。Subversionのお作法として、trunk, branches, tagsの3つのディレクトリを作成します。

[root@sakura httpd]# svnadmin create /var/apps/svn/repos/sample
[root@sakura httpd]# svn mkdir -m '' file:///var/apps/svn/repos/sample/trunk

Committed revision 1.
[root@sakura httpd]# svn mkdir -m '' file:///var/apps/svn/repos/sample/branches

Committed revision 2.
[root@sakura httpd]# svn mkdir -m '' file:///var/apps/svn/repos/sample/tags

Committed revision 3.
[root@sakura httpd]#

作成したリポジトリや、各種設定ファイルはApacheがアクセスできるように権限を変えておきます。

[root@sakura httpd]# chown -R apache:apache /var/apps/svn
[root@sakura httpd]#

再起動してブラウザからアクセスしてみる

ここまで出来たら、Apacheを再起動してアクセスしてみます。

image

こんな感じでリポジトリのディレクトリが表示されれば成功です。

専用クライアントからアクセスしてみる

最後に、動作確認のために専用のクライアントTortoiseSVNを使って、リポジトリのチェックアウト、コミットなどを試してみます。

TortoiseSVNは以下からダウンロードしてインストールします。言語パックで日本語をインストールしておくと、インタフェースが日本語表示されます。日本語のファイル自体は言語パックをインストールしなくても使えます。

インストールが完了したら、日本語を使う設定をおこないます。マウスを右クリックし、TortoiseSVN→Settingで言語を設定する項目があるので「日本語(Japanese)」にしておきます。

image

Subversionリポジトリからチェックアウトするには、マウスの右クリックでコンテキストメニューから「SVN チェックアウト」(日本語を使う設定になっていない場合は、SVN Checkout」)を選択します。image

リポジトリのURLを入力し、チェックアウト先のディレクトリを指定します。

image

チェックアウトが完了するとこんな感じでディレクトリが作成されます。今回はカラのディレクトリをチェックアウトしたので、何もありません。

image

チェックアウトしたディレクトリ内にファイルを作成したら、これをコミットします。チェックアウトしたディレクトリを右クリックすると、「SVNコミット」とあるので、これを選択して、コミットメッセージなどを入力して、「コミット」します。

image

とりあえずコミットまでできれば、Subversionサーバーの構築は完了です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください