基于apache搭建subversion服务及管理工具

理解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)


    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

启动服务

#启动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/

你可能感兴趣的:(基于apache搭建subversion服务及管理工具)