CentOS7 + Subversion + SSL(certbot)

CentOS7にSubversionを設定したときの覚書。
今回はWebSVNをインストールして、コマンドを打たなくてもリポジトリを管理できる環境を構築してみた。

環境: CentOS 7.8, Subversion 1.10.6

1. Subversionをインストール

前にyum経由でインストールしたリポジトリを流用する。
# vi /etc/yum.repos.d/WANdisco-svn.repo
[WANdisco-svn110]
name=WANdisco SVN Repo 1.10
enabled=1
baseurl=http://opensource.wandisco.com/centos/7/svn-1.10/RPMS/$basearch/
gpgcheck=1
gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

インストール実行。dnfはyumとほぼ同じ。
# dnf install subversion subversion-perl subversion-python subversion-tools

2.Apache + mod_dav_svnをインストール

yum経由でインストール
# dnf install httpd mod_dav_svn

リポジトリ用ディレクトリを作って権限設定
# mkdir /home/svn
# chown apache. /home/svn/

apacheの設定。アドミンのメールアドレスを変更。
# less /etc/httpd/conf/httpd.conf
ServerAdmin info@dksg.co.jp

起動、自動起動ON、確認
# systemctl start httpd
# systemctl enable httpd
# systemctl list-unit-files -t service

インストール時に生成されたconfは別ディレクトリへ
# cd /etc/httpd/conf.d/
# mkdir bak
# mv *.conf bak/

svn用confファイルを作成
# vi 01_svn.conf
# Needed to do Subversion Apache server.
LoadModule dav_svn_module     modules/mod_dav_svn.so

# Only needed if you decide to do "per-directory" access control.
LoadModule authz_svn_module   modules/mod_authz_svn.so

<VirtualHost *:80>
  ServerName svn.hoge.co.jp
  <Location />
    DAV svn
    SVNParentPath /home/svn
    SVNListParentPath on
    #SVNAutoversioning on
  </Location>
</VirtualHost>

再読み込み
# apachectl configtest
# systemctl reload httpd

リポジトリを作ってみる。
# cd /home/svn/
# svnadmin create test
# chown -R apache. test/

ブラウザで「http://svn.hoge.co.jp/」へアクセスするとリポジトリ一覧が見えるはず。
TortoiseSVNでチェックアウトとコミットを試してみる。


3.certbotでSSL化

certbotをインストール。
# dnf install certbot

mod_sslをインストール
# dnf install mod_ssl

認証できるようにApacheのconf設定ファイルを編集。
# cd /etc/httpd/conf.d/
# less 01_svn.conf
<VirtualHost *:80>
  ServerName svn01.hoge.co.jp
  DocumentRoot /home/svn

  <IfModule mod_rewrite.c>
    RewriteRule "/\.|^\.(?!well-known/)" - [F]
  </IfModule>

  <Location /.well-known/>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
  </Location>
</VirtualHost>

<VirtualHost *:443>
  ServerName svn01.hoge.co.jp
  DocumentRoot /home/svn

  <Location />
    DAV svn
    svnparentPath /home/svn
    SVNListParentPath on
    SVNAutoversioning on
  </Location>
</VirtualHost>

configtestして再読み込み
# apachectl configtest
# systemctl reload httpd

認証実行
# certbot certonly --webroot -w /home/svn -d svn01.hoge.co.jp

Apache設定
# less 01_svn.conf
<VirtualHost *:443>
  ServerName svn01.hoge.co.jp
  DocumentRoot /home/svn

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/svn01.hoge.co.jp/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/svn01.hoge.co.jp/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/svn01.hoge.co.jp/chain.pem

  <Location />
    DAV svn
    svnparentPath /home/svn
    SVNListParentPath on
    SVNAutoversioning on
  </Location>
</VirtualHost>

configtestして再読み込み
# apachectl configtest
# systemctl reload httpd

ブラウザで「https://svn.hoge.co.jp/」へアクセスするとリポジトリ一覧が見えるはず。
TortoiseSVNでチェックアウトとコミットを試してみる。

4.cronで自動更新

crondがインストールされていなかったのでインストール
# dnf install cronie

crond起動、自動起動するようにインストールされてた。
# systemctl start crond
# systemctl is-enabled crond
# systemctl list-unit-files -t service

certbotをcronに登録する。
# vi /etc/cron.d/certbot
MAILTO=""

# Check ssl certificates at 5am
0 5 * * * root certbot renew && /bin/systemctl reload httpd

外部から丸見えなので、次回は認証するように設定。


【関連記事】