理解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 deps
brew install subversion
brew install nginx
#php-fpm
cp /private/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
#启动php-fpm
php-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/libexec
apache_libexec=/usr/local/libexec/apache2
cp $svn_libexec/mod_authz_svn.so $apache_libexec/
cp $svn_libexec/mod_authz_svn.so $apache_libexec/
创建svn仓库
#仓库的父路径
mkdir -p /data/www/svn_repos
cd /data/www/svn_repos
#创建svndata仓库
svnadmin create svndata
创建SVN服务所需的配置文件
mkdir /data/www/svnconf
cd /data/www/svnconf
cp /data/www/svn_repos/svndata/conf/svnserve.conf ./
touch passwd #用户名及密码配置(AuthUserFile)
touch authz #目录权限配置(AuthzSVNAccessFile)
vim /data/www/svnconf/svnserve.conf
修改svnserve.conf内容如下:
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
配置Apache的httpd.conf
vim /etc/apache/httpd.conf
#修改为88
Listen 88
#保证apache有权限访问文件,需调整_www用户为当前mac的用户
User YOUR_MAC_USER
Group YOUR_MAC_GROUP
#添加module
LoadModule 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)
<Location /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
</Location>
创建一个svn用户(admin用户)
htpasswd -c /data/www/svnconf/passwd admin
启动服务
#启动svnserve
svnserve -d -r /data/www/svn_repos --config-file /data/www/svnconf/svnserve.conf
#启动apache2
#mac可能配置了自动启动apache,
#查看下apache进程,使用stop或restart或start命令重启
sudo apachectl -k stop
sudo apachectl -k restart
下载ifsvnadmin
wget http://jaist.dl.sourceforge.net/project/ifsvnadmin/svnadmin-1.6.2.zip
unzip 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/