FreeBSD14にApache+SubversionをインストールしてNginxからリバースプロキシ
Subversionの容量が増えてきたので、複数サーバーにSubversionをインストールしてリポジトリを分けようとしているときの覚書。
環境: FreeBSD 14.0, Apache 2.4.59, Subversion 1.14.3
1. Apacheをインストール
pkg経由でインストール。
# pkg search apache
# pkg install apache24
ビルドオプションを確認。
# apachectl -V
Server version: Apache/2.4.59 (FreeBSD)Server built: unknownServer's Module Magic Number: 20120211:131Server loaded: APR 1.7.3, APR-UTIL 1.6.3, PCRE 10.43 2024-02-16Compiled using: APR 1.7.3, APR-UTIL 1.6.3, PCRE 10.43 2024-02-16Architecture: 64-bitServer MPM: preforkthreaded: noforked: yes (variable process count)Server compiled with....-D APR_HAS_SENDFILE-D APR_HAS_MMAP-D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)-D APR_USE_FLOCK_SERIALIZE-D APR_USE_PTHREAD_SERIALIZE-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT-D APR_HAS_OTHER_CHILD-D AP_HAVE_RELIABLE_PIPED_LOGS-D DYNAMIC_MODULE_LIMIT=256-D HTTPD_ROOT="/usr/local"-D SUEXEC_BIN="/usr/local/bin/suexec"-D DEFAULT_PIDLOG="/var/run/httpd.pid"-D DEFAULT_SCOREBOARD="/var/run/apache_runtime_status"-D DEFAULT_ERRORLOG="/var/log/httpd-error.log"-D AP_TYPES_CONFIG_FILE="etc/apache24/mime.types"-D SERVER_CONFIG_FILE="etc/apache24/httpd.conf"
自動起動するように設定。
# sysrc apache24_enable="yes"
サービス名とか起動スクリプトを確認。
# less /usr/local/etc/rc.d/apache24
設定ファイル編集してポート番号を変更する。
# less /usr/local/etc/apache24/httpd.conf
Listen 8080ServerAdmin info@hoge.jp
configtestしてApache起動。
# apachectl configtest
# service apache24 start
待ち受け中のポート確認。
# netstat -an -p tcp
2. Subversionをインストール
pkg経由でインストール。
# pkg search subversion
# pkg install subversion
Apache用モジュールをインストール。
# pkg search dav_svn
# pkg install mod_dav_svn
モジュールのconfファイルを確認。
# less /usr/local/etc/apache24/modules.d/220_subversion.conf
CentOSと違ってコメントアウトされていた。
3. ApacheとNginxの設定
リポジトリの置き場所を作成してApacheの設定ファイル編集。
# mkdir -p /home/svn/repo/
# cd /usr/local/etc/apache24/Includes/
# vim 01_svn.conf
LoadModule dav_module libexec/apache24/mod_dav.soLoadModule dav_svn_module libexec/apache24/mod_dav_svn.soLoadModule authz_svn_module libexec/apache24/mod_authz_svn.soLoadModule dontdothat_module libexec/apache24/mod_dontdothat.so<VirtualHost *:8080>ServerName svn.hoge.co.jp<Location />DAV svnSVNParentPath /home/svn/repoSVNListParentPath on</Location></VirtualHost>
Apache再読み込み。
# apachectl configtest
# service apache24 reload
nginxにリバースプロキシの設定をする。
ついでにcertbot用の設定も記述しておく。
# cd /usr/local/etc/nginx/conf.d/
# vim 02_svn.conf
server {listen 80;server_name svn.hoge.jp;# Accept for Let's Encrypt(certbot)location /.well-known/acme-challenge {access_log off;root /usr/local/www/nginx/;}location / {proxy_set_header Host $http_host;proxy_set_header Destination $http_destination;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_pass http://127.0.0.1:8080;}}
nginx再読み込み。
# nginx -t
# service nginx reload
テスト用のリポジトリを作ってウェブ経由でチェックアウトできるか試す。
# cd /home/svn/repo/
# svnadmin create test
# chown -R www:www test/
TortoiseSVNでチェックアウトしてコミットできるか確認する。
4. HTTPS化
NginxまでをTLSで暗号化する。
certbotで証明書取得。
# certbot certonly --webroot -w /usr/local/www/nginx/ -d svn.hoge.co.jp
nginx設定ファイル編集。
ついでに日本からのIPアドレスしか許可しないようにする。
# cd /usr/local/etc/nginx/conf.d/
# less 02_svn.conf
server {include conf.d/include/ssl_listen.inc;server_name svn.hoge.jp;# Accept for Let's Encrypt(certbot)location /.well-known/acme-challenge {access_log off;root /usr/local/www/nginx/;}# Restrict access from Japaninclude conf.d/include/allow/JP.inc;deny all;# Fixed for move japanese file in svnset $fixed_destination $http_destination;if ( $fixed_destination ~ ^https(?<myurl>.*)$ ) {set $fixed_destination "http$myurl";}location / {client_max_body_size 300M;access_log off;error_log /dev/null;proxy_set_header Host $http_host;proxy_set_header Destination $http_destination;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_pass http://127.0.0.1:8080;}include conf.d/include/ssl.inc;ssl_certificate /usr/local/etc/letsencrypt/live/svn.hoge.jp/fullchain.pem;ssl_certificate_key /usr/local/etc/letsencrypt/live/svn.hoge.jp/privkey.pem;ssl_trusted_certificate /usr/local/etc/letsencrypt/live/svn.hoge.jp/chain.pem;}
nginx再読み込み。
# nginx -t
# service nginx reload
さっきのtestリポジトリをRelocateして確認。
5. リポジトリへのアクセス制限
Basic認証ユーザーを作成する。
# cd /home/svn/
# htpasswd.py -b -c .htpasswd daiki password
Subversionのアクセス制御ファイルを作成。
# vim .htauthz
[groups]admin = daiki[/]* =@admin = rw
httpd設定ファイル編集。
# cd /usr/local/etc/apache24/Includes/
# less 01_svn.conf
LoadModule dav_module libexec/apache24/mod_dav.soLoadModule dav_svn_module libexec/apache24/mod_dav_svn.soLoadModule authz_svn_module libexec/apache24/mod_authz_svn.soLoadModule dontdothat_module libexec/apache24/mod_dontdothat.so<VirtualHost *:8080>ServerName svn.hoge.co.jpRequestHeader edit Destination ^https http early<Location />DAV svnSVNParentPath /home/svn/repoSVNListParentPath onSVNAdvertiseV2Protocol offRequire valid-userAuthType BasicAuthName "SVN"AuthUserFile /home/svn/.htpasswdAuthzSVNAccessFile /home/svn/.htauthz</Location></VirtualHost>
Apache再読み込み
# apachectl configtest
# service apache24 reload
さっきのtestリポジトリをUpdate/Commitして確認。
【関連記事】
- FreeBSD 14 + Nginx + PHP + MariaDB + Postfixの環境を構築(2024年版)
- CentOS8にSubversion1.14+httpdをインストールしてnginxでリバースプロキシする
- GeoIP2のCSVデータでPostgresSQLデータベースを更新して国別拒否リストを生成