最近我们准备改造公司的 svn 代码仓库
不再使用 svn 协议,改成 apache 实现的 http 协议,目的是请求能有日志,方便统计每天有多少人commit代码,checkout代码等
本期还有一个需求就是要把 svn的 passwd 文件删除掉,因为该文件是明文存储用户名和密码的,很不安全。我们准备才有windows的 AD 域来校验账号密码 (用户在用户中心平台修改密码会同步更新 ad 域的用户名和密码)
本文介绍下一些细节配置
一、apache 完整配置
先上完整配置,然后对几个核心的配置分别说明
记得将几个 so 文件从 svn 的bin目录拷贝到 apache 的modules
mod_authz_svn
mod_dav_svn.so
核心在 apache 的 httpd.conf 的配置
完整配置如下
ThreadsPerChild 128
MaxMemFree 64
MaxRequestsPerChild 0
MaxKeepAliveRequests 2000
KeepAliveTimeout 5
Win32DisableAcceptEx
LimitXMLRequestBody 0
LimitRequestFieldSize 12392
ServerRoot "F:/soft/Apache2.2"
ServerName "10.1.5.203:8080"
ServerSignature Off
ServerTokens Prod
DocumentRoot "htdocs"
FileETag MTime Size
PidFile "${TEMP}\VisualSVNServer.pid"
Listen "8080"
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule alias_module modules/mod_alias.so
LoadModule dir_module modules/mod_dir.so
LoadModule mime_module modules/mod_mime.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule expires_module modules/mod_expires.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule dav_module modules/mod_dav.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Directory />
Options FollowSymLinks
AllowOverride None
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/svn$
RewriteRule ^(.*/svn)$ %1/ [R=301,L]
</Directory>
SVNInMemoryCacheSize 16384
<Location /svn>
AuthLDAPBindDN "cn=administrator,cn=users,dc=xxhtest,dc=com"
AuthLDAPBindPassword "123456"
AuthName "Welcometo svn . Use your info to pass in !!!"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://192.168.0.123/dc=xxhtest,dc=com?sAMAccountName?sub?(objectClass=*)"
Require valid-user
DAV svn
SVNListParentPath off
SVNParentPath F:/soft/Subversion/repository
AuthzSVNReposRelativeAccessFile authz
</Location>
Alias /web-ui-static htdocs/web-ui-static
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
ErrorLog "logs/error.log"
LogLevel debug
LogFormat "[%h][%u][%{%Y-%m-%d %T}t][%{SVN-ACTION}e][%{SVN-REPOS-NAME}e]" combined
CustomLog "|F:/soft/Apache2.2/bin/rotatelogs -l F:/soft/Apache2.2/logs/svn-access_%Y%m%d.log 86400" combined env=SVN-ACTION
TraceEnable off
DefaultType text/plain
二、日志格式配置
最终生成的日志格式如下
[10.1.5.203][lyz][2021-12-24 08:45:05][checkout-or-export / r42 depth=infinity][%E6%B5%8B%E8%AF%95%E9%A1%B9%E7%9B%AE]
[10.1.5.203][lyz][2021-12-24 08:45:11][checkout-or-export / r31 depth=infinity][repo1]
[10.1.5.203][lyz][2021-12-24 08:46:00][commit r32][repo1]
[10.1.5.203][zhangsan][2021-12-24 11:42:06][status / r32][repo1]
[10.1.5.203][zhangsan][2021-12-24 11:47:06][commit r33][repo1]
[10.1.5.203][zhangsan][2021-12-24 12:14:43][commit r34][repo1]
[10.1.5.203][zhangsan][2021-12-24 12:15:04][log (/) r34:0 limit=100 discover-changed-paths revprops=(svn:log svn:date svn:author)][repo1]
关于日志的配置主要是这2行配置
LogFormat "[%h][%u][%{%Y-%m-%d %T}t][%{SVN-ACTION}e][%{SVN-REPOS-NAME}e]" combined
CustomLog "|F:/soft/Apache2.2/bin/rotatelogs -l F:/soft/Apache2.2/logs/svn-access_%Y%m%d.log 86400" combined env=SVN-ACTION
三、SVN 和 LDAP 配置
<Location /svn>
AuthLDAPBindDN "cn=administrator,cn=users,dc=xxhtest,dc=com"
AuthLDAPBindPassword "123456"
AuthName "Welcometo svn . Use your info to pass in !!!"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://192.168.0.222/dc=xxhtest,dc=com?sAMAccountName?sub?(objectClass=*)"
Require valid-user
DAV svn
SVNListParentPath off
SVNParentPath F:/soft/Subversion/repository
AuthzSVNReposRelativeAccessFile authz
</Location>
四、测试
经过以上配置,可以重启 apache
然后把 SVN 仓库里的passwd文件删除
用小乌龟 checkout,输入 AD 域里的用户名密码就可以了
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏