CentOS7.3搭建web SVN

安装 subversion 1.11.0

1 安装 scons

[root@instance-l79ltvo6 ~]# cd /root/soft

[root@instance-l79ltvo6 ~]

# wget http://sourceforge.mirrorservice.org/s/sc/scons/scons/2.5.1/scons-2.5.1.tar.gz

[root@instance-l79ltvo6 ~]

# tar zxf scons-2.5.1.tar.gz

[root@instance-l79ltvo6 ~]

# cd scons-2.5.1/

[root@instance-l79ltvo6 ~]

# python setup.py install –prefix=/usr/local/scons

[root@instance-l79ltvo6 ~]

# cd .. //返回上级目录

2 安装 serf

[root@instance-l79ltvo6 ~]# wget http://mirror.bit.edu.cn/apache/serf/serf-1.3.9.tar.bz2

[root@instance-l79ltvo6 ~]

# tar xf serf-1.3.9.tar.bz2

[root@instance-l79ltvo6 ~]

# cd serf-1.3.9/

[root@instance-l79ltvo6 ~]

# /usr/local/scons/bin/scons prefix=/usr/local/serf APR=/usr/local/apr APU=/usr/local/apr-util

[root@instance-l79ltvo6 ~]

# /usr/local/scons/bin/scons install

[root@instance-l79ltvo6 ~]

# cd .. //返回上级目录

3 编译 subverion

[root@instance-l79ltvo6 ~]# wget http://www.sqlite.org/2017/sqlite-amalgamation-3190300.zip

[root@instance-l79ltvo6 ~]

# wget https://mirror.bit.edu.cn/apache/subversion/subversion-1.11.0.tar.gz

[root@instance-l79ltvo6 ~]

# tar zxf subversion-1.11.0.tar.gz

[root@instance-l79ltvo6 ~]

# unzip sqlite-amalgamation-3190300.zip

[root@instance-l79ltvo6 ~]

# mv /root/soft/sqlite-amalgamation-3190300 /root/soft/subversion-1.11.0/sqlite-amalgamation

[root@instance-l79ltvo6 ~]

# cd subversion-1.11.0/

[root@instance-l79ltvo6 ~]

# ./configure \ –prefix=/usr/local/svn \ –with-apr=/usr/local/apr \ –with-apr-util=/usr/local/apr-util \ –with-serf=/usr/local \ –enable-mod-activation \ –with-apache-libexecdir=/usr/local/apache/modules \ –with-apxs=/usr/local/apache/bin/apxs \ –without-berkeley-db \ –with-lz4=internal \ –with-utf8proc=internal

[root@instance-l79ltvo6 ~]

# make && make install

给SVN创建一个名为svn的非登录用户

[root@instance-l79ltvo6 ~]# useradd svn -s /sbin/nologin

把svn加入到系统环境变量

[root@instance-l79ltvo6 ~]# vim /etc/profile.d/svn.sh
//添加
export PATH=$PATH:/usr/local/svn/bin
保存后赋予执行权限

[root@instance-l79ltvo6 ~]

# chmod 0777 /etc/profile.d/svn.sh

[root@instance-l79ltvo6 ~]

# source /etc/profile.d/svn.sh

在/etc/ld.so.conf.d/创建一个serf-1.3.9.conf,指定lib目录,不然svn启动会报错

[root@instance-l79ltvo6 ~]# vim /etc/ld.so.conf.d/serf-1.3.9.conf
//添加
/usr/local/lib
保存后刷新

[root@instance-l79ltvo6 ~]

# /sbin/ldconfig -v

4 配置 subverion

下面我们先创建一个 test 项目

[root@instance-l79ltvo6 ~]# mkdir -p /data/svn

[root@instance-l79ltvo6 ~]

# cd /data/svn

[root@instance-l79ltvo6 ~]

# svnadmin create test

然后我们打开 /data/svn/test /就会发现里面自动创建了一些目录

conf
db
format
hooks
locks
README.txt

在conf里面的文件就是配置该项目的人员和权限,但如果多个项目,开发人员一样,那就要配置很多次了,这样很麻烦,所以我们要弄成配置一次权限就能直接应用到所有项目里面。

[root@instance-l79ltvo6 ~]# cp /data/svn/test/conf/authz  /data/svn/authz

[root@instance-l79ltvo6 ~]

# cp /data/svn/test/conf/passwd /data/svn/passwd

[root@instance-l79ltvo6 ~]

# cp /data/svn/test/conf/svnserve.conf /data/svn/svnserve.conf //然后设置一个用户密码,这里以创建root用户为例,这里的演示是将密码加密而非明文存储

[root@instance-l79ltvo6 ~]

# htpasswd -c /data/svn/passwd root New password: //输入密码 Retype new password: //再次输入密码

这样 root 用户就创建完成了,创建其他用户同理。 接下来我们需要修改配置文件

[root@instance-l79ltvo6 ~]# vim /data/svn/svnserve.conf
//删除所有内容,增加下面的代码
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
[sasl]
//保存
[root@instance-l79ltvo6 ~]# vim /data/svn/authz
//删除所有内容,增加下面的代码
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
administrators = root

[/]
@administrators=rw

[test:/]
* = r
//保存

我们尝试启动下svn服务

[root@instance-l79ltvo6 ~]# svnserve --config-file /data/svn/svnserve.conf -d -r /data/svn

没有报错,说明启动成功了 
把/data/svn/目录的拥有者更改为svn

[root@instance-l79ltvo6 ~]# chown -R svn:svn /data/svn

最后我们需要修改 apache 的相关配置文件 
编辑/usr/local/apche/conf/httpd.conf

//找到
User daemon
Group daemon
//修改为
User svn
Group svn

编辑/usr/local/apache/conf/extra/httpd-vhost.conf,把刚刚那次编辑的内容更换为

<VirtualHost *:80>
    ServerName 你的IP
    ErrorLog "logs/你的IP-error_log"
    CustomLog "logs/你的IP-access_log" common
    <Location /svn>
      DAV svn
      #support more repositories
      SVNParentPath /data/svn

      #list all repositories
      #SVNListParentPath on
      AuthType Basic
      AuthName "Please input Username and Password"
      AuthUserFile /data/svn/passwd
      AuthzSVNAccessFile /data/svn/authz
      Require valid-user
    </Location>
</VirtualHost>

然后停止 apache 服务

[root@instance-l79ltvo6 ~]# systemctl stop httpd.service

检查 apache 配置文件是否出错

[root@instance-l79ltvo6 ~]# /usr/local/apache/bin/apachectl -t
Syntax OK    //说明没问题,可以直接启动

重新启动 apache

[root@instance-l79ltvo6 ~]# systemctl start httpd.service

打开浏览器访问http://你的ip/svn/test,提示输入账号密码 也可以使用TortoiseSVN进行操作
输入刚刚设置的账号密码后显示

test - Revision 0: /

说明配置成功,apache+svn服务启动成功