理解subversion的权限管理及相关配置
首先svn的权限管理由3个文件配置组成,一个用户及组管理(passwd),一个目录权限管理(authz),一个svnserve.conf配置,其中svnserve中指定了passwd及authz配置。创建一个仓库的时候,默认会会在仓库的conf下生成这3个文件,但通常我们需要指出多个仓库,应该建立一个统一配置目录来保存这两个文件,并在启动svnserve时指定其svnserve.conf文件。 启动svnserve之后,即可通过svn://协议来访问仓库。 对于http协议的svn访问(包括checkout等svn操作),目前只能基于apache来做。虽然nginx可以配置成apache的代理读取但不支持checkout等svn操作(目前了解到,这是nginx对webdav协议支持的问题),nginx目前没有模块支持svn访问(可能是我没找到)。配置完apache的访问之后即可通过http对svn进行操作。 对于权限管理,虽然使用htpasswd可以方便的创建用户及更新用户信息,修改authz文件可以修改目录权限等设置,但是图形化的界面更好。目前比较好用的web管理工具是iF.svnadmin。具体配置可以参考本文iF.svnadmin的配置,本文使用nginx配置iF.svnadmin。
环境准备
#install depsbrew install subversionbrew install nginx#php-fpmcp /private/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf#启动php-fpmphp-fpm --fpm-config /usr/local/etc/php-fpm.conf --prefix /usr/local/var
Apache的svn依赖库
使用mac默认安装的apache,且apache加载的so库在/usr/libexec/apache2下,此目录在EI Captain之后已经不能修改了。 找到自己的svn安装目录,并复制apache需要的svn的动态库 brew安装的一般在/usr/local/Cellar/下
svn_libexec=/usr/local/Cellar/subversion18/1.8.13/libexecapache_libexec=/usr/local/libexec/apache2cp $svn_libexec/mod_authz_svn.so $apache_libexec/cp $svn_libexec/mod_authz_svn.so $apache_libexec/
创建svn仓库
#仓库的父路径mkdir -p /data/www/svn_reposcd /data/www/svn_repos#创建svndata仓库svnadmin create svndata
创建SVN服务所需的配置文件
mkdir /data/www/svnconfcd /data/www/svnconfcp /data/www/svn_repos/svndata/conf/svnserve.conf ./touch passwd #用户名及密码配置(AuthUserFile)touch authz #目录权限配置(AuthzSVNAccessFile)vim /data/www/svnconf/svnserve.conf
修改svnserve.conf内容如下:
anon-access = readauth-access = writepassword-db = passwdauthz-db = authz
配置Apache的httpd.conf
vim /etc/apache/httpd.conf#修改为88Listen 88#保证apache有权限访问文件,需调整_www用户为当前mac的用户User YOUR_MAC_USERGroup YOUR_MAC_GROUP#添加moduleLoadModule dav_module libexec/apache2/mod_dav.so #打开注释即可LoadModule dav_svn_module /usr/local/libexec/apache2/mod_dav_svn.so #新加LoadModule authz_svn_module /usr/local/libexec/apache2/mod_authz_svn.so #新加
访问路径配置(http://ip:port/svn_repos)
DAV svn #多仓库的配置,配置仓库的父路径 SVNParentPath /data/www/svn_repos AuthType Basic AuthName "svn" AuthUserFile /data/www/svnconf/passwd AuthzSVNAccessFile /data/www/svnconf/authz Require valid-user
创建一个svn用户(admin用户)
htpasswd -c /data/www/svnconf/passwd admin
启动服务
#启动svnservesvnserve -d -r /data/www/svn_repos --config-file /data/www/svnconf/svnserve.conf#启动apache2#mac可能配置了自动启动apache,#查看下apache进程,使用stop或restart或start命令重启sudo apachectl -k stopsudo apachectl -k restart
下载ifsvnadmin
wget http://jaist.dl.sourceforge.net/project/ifsvnadmin/svnadmin-1.6.2.zipunzip svnadmin-1.6.2.zip
复制到 /data/www/svnadmin
配置nginx的php
location /svnadmin { alias /data/www/svnadmin; index index.php; location ~ \.php$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; } }
配置ifsvnadmin
打开localhost/svnadmin
Subversion authorization file: /data/www/svnconf/authz User authentication file (SVNUserFile) : /data/www/svnconf/passwd Parent directory of the repositories (SVNParentPath): /data/www/svn_repos Subversion client executable: /usr/local/bin/svn Subversion admin executable: /usr/local/bin/svnadmin
比较好的参考
https://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/ http://www.opstool.com/article/282 https://kany.me/nginx-php-svn/