SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

httpsでアクセスできるSubversionリポジトリの構築

問題

Subversionサーバーを立てたいです。

svn://~ は暗号化がないので却下。

svn+ssh://~ は悪くないけど、

https://~ にしようと思っています(運用上の都合で)。

答え

http(s)でアクセスできるのはクライアント側もだいたい対応していて楽ですね。gitもhttp対応しているぐらいだし。

以下、CentOS Stream 9 の場合

構想

将来いろいろ置くかもしれないのである程度ディレクトリを切っておく。

以下のようなURLにする。

https://repository.example.com/svn/project1
https://repository.example.com/svn/project2
……

リポジトリの物理的な場所は以下にする。

/var/svn/repos/project1
/var/svn/repos/project2
……

必要なパッケージ

http(s)でアクセスできるSVNリポジトリを作るには、以下のパッケージをインストール。

# yum install httpd subversion mod_dav_svn

apacheの設定

/etc/httpd/conf.d 以下に設定ファイルを追加。

# vi /etc/httpd/conf.d/subversion.conf

<Location /svn/project1>
    DAV svn
    AuthType Basic
    AuthName "private"
    AuthUserFile /var/svn/.htpasswd
    Require valid-user
    SVNPath /var/svn/repos/project1
</Location>
<Location /svn/project2>
    DAV svn
    AuthType Basic
    AuthName "private"
    AuthUserFile /var/svn/.htpasswd
    Require valid-user
    SVNPath /var/svn/repos/project
2
</Location>

SVNPath で指定するのはリポジトリ1個1個のディレクトリ。

SVNParentPath で複数のリポジトリが置かれている親ディレクトリの指定もできる。リポジトリの追加削除が頻繁に発生する場合は便利かもしれない。

# vi /etc/httpd/conf.d/subversion.conf

<Location /svn/>
    DAV svn
    AuthType Basic
    AuthName "private"
    AuthUserFile /var/svn/.htpasswd
    Require valid-user
    SVNParentPath /var/svn/repos
</Location>

認証設定

認証はベーシック認証と同じ要領。

# htpasswd -c /var/svn/.htpasswd user1
New password:
Re-type new password:
Adding password for user user1

場所を作る・リポジトリを作る

都合の良い場所でOK。上の設定と一致させること。

# mkdir /var/svn
# mkdir /var/svn/repos
# svnadmin create /var/svn/repos/project1
# svnadmin create /var/svn/repos/project2
# chown -R apache:apache /var/svn/repos

細かなアクセス制御をしたい場合は、新規作成したリポジトリの設定ファイルを編集して、apache側の AuthzSVNAccessFile に設定する。

# vi /var/svn/repos/project1/conf/authz

[groups]
developer=user1,user2,user3
manager=user4,user5
[/]
* = r
[project1:/trunk]
@developer = rw
[project1:/branches]
@developer = rw
[project1:/tags]
@manager = rw

# vi /etc/httpd/conf.d/subversion.conf

<Location /svn/project1>
    DAV svn
    AuthType Basic
    AuthName "private"
    AuthUserFile /var/svn/.htpasswd
    Require valid-user
    SVNPath /var/svn/repos/project1
    AuthzSVNAccessFile /var/svn/repos/project1/conf/authz
</Location>

AuthzSVNAccessFile を設定しない場合は、認証さえ通れば読み書き自由。

https対応

サーバー証明書取得。

上記の設定は443ポートのVirtualHostの設定内に書く。

<VirtualHost *:443>
    ServerName ~~~
    <Location ~~>
        DAV svn
        # 略
    </Location>
    SSLEngine on
    SSLCertificateFile ~~~~
    SSLCertificateKeyFile ~~~~
</VirtualHost>

apache起動

# systemctl start httpd

その他の設定

必要なら使用する。

SVNListParentPath on

Debian、Ubuntuの場合

apache2とsubversionの連携にインストールするのが以下のパッケージになる程度の違い。

# apt install libapache2-mod-svn

関連するメモ

コメント(1)

KM 2024年3月7日 16:53

yum install httpd subversion mod_dab_svn

yum install httpd subversion mod_dav_svn