CentOS + plesk 環境での Subversion 外部公開リポジトリ公開

https://talk.plesk.com/threads/basic-subversion-svn-on-plesk-12-5.338617/

上記は Ubuntu + plesk 12.5 の例だが、
基本的にはこちらに書かれた内容で大丈夫だった。

0. 実装環境

  • CentOS 7
  • plesk Onxy

また、

  • ドメイン名: mydomain.com
  • レポジトリ作成先:/var/www/vhosts/mydomain.com/httpdocs/svn/test
  • 外部からレポジトリへのアクセス:http://mydomain.com/svn/test

と仮定する。

1. subversion インストール

事前に plesk で SSH できるように設定しておく。

(ウェブサイトとドメイン → ウェブホスティングアクセスで、システムユーザを設定)

SSH でログインしたら、スーパーユーザになってから subversion 取得。

$ su -
$ yum -y install subversion mod_dav_svn

バージョン確認してみる。

$ svn --version
svn, version 1.7.14 (r1542130)
   compiled Aug 23 2017, 20:43:38

Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
  - handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme

最新(ver.1.9.7)ではなかったので、以下を参考にして最新を取得する。

CentOS 6でsubversionのバージョンを上げる - ソフトウェアエンジニアリング - Torutk
Redmine

/etc/yum.repos.d/wandisco.repo の作成は、URL 先が存在することを確認してから書き換えておく。

[wandisco-svn]
name=WANDisco Repository - snv-1.9 centos7
baseurl=http://opensource.wandisco.com/centos/7/svn-1.9/RPMS/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-WANdisco
$ rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
$ yum install --enablerepo=wandisco-svn --disablerepo=base,updates,epel subversion

これで ver.1.9.7 の subversion をインストールできた。

2. レポジトリ作成

svnadmin でレポジトリ作成。あと apache に所有権与えておく。

$ svnadmin create /var/www/vhosts/mydomain.com/httpdocs/svn/test
$ chown -R apache: /var/www/vhosts/mydomain.com/httpdocs/svn/test

3. plesk からレポジトリに保護ディレクトリ設定

ウェブサイトとドメイン → パスワード保護ディレクトリ → 保護ディレクトリ追加 で保護ディレクトリに設定する。

ディレクトリ名: /svn/test
保護エリアのタイトル: svn テストレポジトリ

保護ディレクトリリストに /svn/test が追加される。
さらに、作成された /svn/test に「ユーザを追加」で、アクセスさせたいユーザとパスワードを指定しておく。

4. plesk から http ディレクティブ設定

3 を行うことで、

/var/www/vhosts/system/mydomain.com/pd/d..httpdocs@svn@test

というファイルにユーザ名と暗号化されたパスワードの列が記録される。
これはいわゆる htpasswd ファイルになっているので、
このファイルを http ディレクティブで AuthUserFile に設定することで、
特定のユーザ + パスワードでの http 接続ができるようになる。

ウェブサイトとドメイン → Apache と nginx の設定 → HTTP 用追加ディレクティブ に以下を追加。

<Location /svn/test> 
    DAV svn 
    SVNPath /var/www/vhosts/mydomain.com/httpdocs/repos/test 
    AuthType Basic AuthName "svn" 
    AuthUserFile "/var/www/vhosts/system/mydomain.com/pd/d..httpdocs@svn@test" 
    require valid-user
</Location>

以上。
あとは、外部から TortoiseSVN などのクライアントから

http://mydomain.com/svn/test

で接続すれば良い。

このレポジトリで、UE4 のソースコントロールもしてみたが、
問題なくコミットすることができた。