本文由ilanniweb提供友情赞助,首发于烂泥行天下

想要获得更多的文章,可以关注我的微信ilanniweb

要把svn代码同步到git服务器上,本来是想通过subgit直接同步进行就行了。但是自已以前没有搭建过svn服务器,所以有了这篇文章。

我们就来介绍下svn服务器的搭建,下一篇文章,我们再介绍svn与git服务器之间的代码同步。

Svn服务器的搭建与配置网上文章很多,我们只介绍自己关注的几点。

一、安装svn

和以前的文章一样,要搭建svn服务器,我们首先要安装svn,根据OS的不同,我们来介绍在centos和ubuntu上的安装。

1.1 在centos上安装

在centos上安装svn非常简单,我们直接使用yum方式进行安装即可,命令如下:

yum -y install install subversion httpd mod_dav_svn mod_perl mod_ssl openssl

Svn服务器的搭建与配置_ubuntu

Svn服务器的搭建与配置_ubuntu_02

svn安装完毕后,我们来查看svn的版本,如下:

svn –version

Svn服务器的搭建与配置_ubuntu_03

通过上图可以看到,目前centos6上svn的版本还是1.6的,版本比较旧了,不过不影响svn的使用就ok。

1.2 在ubuntu上安装

在ubuntu上安装svn也是非常简单,直接使用apt-get方式安装即可,命令如下:

sudo apt-get -y install subversion apache2 libapache2-svn ssl-cert

Svn服务器的搭建与配置_version_04

Svn服务器的搭建与配置_version_05

svn安装完毕后,我们来查看svn的版本,如下:

svn –version

Svn服务器的搭建与配置_文章_06

通过上图可以看到,目前ubuntu上svn的版本比较新是1.8的。

二、配置svn

svn安装完毕后,我们现在来配置svn。svn的配置在centos和ubuntu上上基本上是一样的,所以在此我们就不进行区分了。

2.1 创建svn仓库

首先,我们来新建一个ilanni目录用于存储svn仓库,如下:

mkdir -p /data/ilanni

Svn服务器的搭建与配置_version_07

现在我们来创建第一个svn仓库ilannisvn,使用如下命令:

svnadmin create /data/ilanni/ilannisvn

ll /data/ilanni/ilannisvn/

Svn服务器的搭建与配置_服务器_08

通过上图,我们可以很明显的看出svn创建仓库时会生成conf、db等相关的目录及文件。

现在,我们再来创建第二个svn仓库ilannitest,使用如下命令:

svnadmin create /data/ilanni/ilannitest

ll /data/ilanni/ilannitest/

Svn服务器的搭建与配置_version_09

2.2 svn仓库权限配置

svn仓库创建完毕,我们就可以配置svn仓库的访问权限。

svn仓库权限,我们可以进行单独配置,也可以进行统一配置。考虑实际情况,一般会有多个svn仓库,所以我们进行统一配置。

首先,我们创建用于管理所有仓库帐号密码、权限控制等的目录svndata,如下:

mkdir -p /data/svndata/

Svn服务器的搭建与配置_version_10

svndata目前创建完毕后,我们进行其他文件的配置。

2.2.1 创建svnserve.conf文件

接下来我们来创建svn仓库权限的总控制文件svnserve.conf,如下:

vim /data/svndata/svnserve.conf

[general]

#未鉴定的用户无权限访问该版本库

anon-access = none

#鉴定后的可读写版本库

auth-access = write

#使用的密码文件是同级路径的passwd文件,即是/data/svndata/passwd

password-db = passwd

#使用的权限控制文件是同级路径的authz文件,即是/data/svndata/authz

authz-db = authz

#realm指定版本库的认证域,即在登录时提示的认证域名称。各个仓库的认证域都可以自定义

realm = svndata

Svn服务器的搭建与配置_ubuntu_11

svnserve.conf文件主要是指定相关用户和权限等配置。

2.2.2 创建passwd文件

svnserve.conf文件创建完毕后,我们来创建用于保存用户和密码的文件passwd,如下:

vim /data/svndata/passwd

[users]

ilanniadmin = 123456

test1 = 123456

test2 = 123456

test3 = 123456

Svn服务器的搭建与配置_服务器_12

passwd文件用于存储用户名和密码,其中等号的两边要有一个空格,=前面是用户名和,=后面是密码,密码是明文保存的。

2.2.3 创建authz文件

passwd文件创建后,我们开始创建svn仓库的权限控制文件authz。

注意:权限管理的统一思路是:创建多个组,将各个用户加入到各个组,控制各个组的权限。以后对权限管理就维持在组的维度上,否则以人为粒度管理,会死人滴。

vim /data/svndata/authz

[groups]

develop = test1,test2

android = test3

admin = ilanniadmin

[ilannisvn:/]

@develop = rw

@admin = rw

* =

[ilannisvn:/config]

@admin = rw

test1 = r

* =

[ilannitest:/]

@develop = r

@admin = rw

* =

现在这个权限控制是admin用户组,对ilannisvn和ilannitest仓库具有读写权限。

develop用户组对ilannisvn仓库具有读写权限,对ilannitest具有只读权限,并且develop用户组的test1用户对ilannisvn仓库下的config目录只读不能写。

android用户组对svn所有仓库没有任何访问权限。

Svn服务器的搭建与配置_version_13

2.2.4 单独配置svnserve.conf文件

在前面我们说了,要对svn仓库权限进行统一管理。而以上章节中,我们把相关的文件创建完毕后,我们只需要修改每个仓库的svnserve.conf文件,这样就能达到统一管理每个仓库的权限。

修改ilannisvn仓库的svnserve.conf文件,如下:

vim /data/ilanni/ilannisvn/conf/svnserve.conf

[general]

anon-access = none

auth-access = write

#说明使用总控制的密码文件

password-db = /data/svndata/passwd

#说明使用总控制的权限文件

authz-db = /data/svndata/authz

realm = ilannisvn

Svn服务器的搭建与配置_文章_14

修改ilannitest仓库的svnserve.conf文件,如下:

vim /data/ilanni/ilannitest/conf/svnserve.conf

[general]

anon-access = none

auth-access = write

#说明使用总控制的密码文件

password-db = /data/svndata/passwd

#说明使用总控制的权限文件

authz-db = /data/svndata/authz

realm = ilannitest

Svn服务器的搭建与配置_ubuntu_15

到此有关svn仓库权限配置已经完毕。

三、使用svn协议访问

svn搭建与配置完毕后,我们现在来访问svn。svn的访问方法有几种,在此我们只介绍最常使用的三种。先来介绍使用svn协议访问的方法。

启动svn,使用如下命令:

svnserve -d -r /data/ilanni/

ps -ef |grep svn

netstat -tunlp

Svn服务器的搭建与配置_天下_16

通过上图,我们可以很明显看出svn协议使用tcp的3690端口。

现在我们来直接使用svn协议访问svn服务器,如下:

svn co –username test1 –password 123456 svn://192.168.8.33/ilannisvn

svn info

Svn服务器的搭建与配置_服务器_17

通过上图,我们可以很明显的看出通过svn命令是可以访问svn服务器的。

现在我们再来添加一个文件,然后提交到svn服务器,如下:

vim ilannisvn.txt

this is a test file.

Svn服务器的搭建与配置_天下_18

svn add ilannisvn.txt

svn commit -m ‘ilannisvn test’

Svn服务器的搭建与配置_文章_19

现在我们使用windows下的svn工具查看,如下:

svn://192.168.8.33/ilannisvn

Svn服务器的搭建与配置_文章_20

Svn服务器的搭建与配置_文章_21

Svn服务器的搭建与配置_ubuntu_22

通过上图,我们可以看到test1用户提交的日志。这就说明使用svn协议访问svn服务器就已经ok了。

四、使用http访问

要使用http访问svn服务器,我们需要配置apache服务,下面根据OS不同分别讲解下。

注意:无论是使用http还是https访问svn,passwd文件都是通过htpasswd命令创建。

4.1 在centos上配置

在centos上配置apache与svn集成,我们只需要修改apache的配置文件subversion.conf即可。

subversion.conf修改内容如下:

vim /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

<Location /repos>

   DAV svn

SVNParentPath /data/ilanni

#一定要放在这行下面,否则会出现权限混乱的现象

AuthzSVNAccessFile /data/svndata/authz

   AuthType Basic

   AuthName “Authorization Realm”

AuthUserFile /data/svndata/passwd

#告诉apache在authfile中所有的用户都可以访问。 如果没有它,则只能第一个用户可以访问新建库。

Require valid-user

</Location>

Svn服务器的搭建与配置_天下_23

subversion.conf文件修改完毕后,我们要重新创建svn的用户和密码文件passwd,但是passed文件我们要使用apache的工具htpasswd进行创建。如下:

htpasswd -cm /data/svndata/passwd ilanniadmin

Svn服务器的搭建与配置_服务器_24

htpasswd命令参数中-c是创建passwd文件,-m是使用md5加密。

passwd文件创建完毕后,我们再来添加test1和test2用户,使用如下命令:

htpasswd -m /data/svndata/passwd test1

htpasswd -m /data/svndata/passwd test2

htpasswd -m /data/svndata/passwd test3

Svn服务器的搭建与配置_服务器_25

passwd用户和密码添加完毕后,然后我们在修改/data目录属性,如下:

chown apache:apache -R /data/

chmod 755 -R /data/

Svn服务器的搭建与配置_文章_26

以上配置完毕后,我们来重启apache,使用如下命令:

/etc/init.d/httpd restart

Svn服务器的搭建与配置_ubuntu_27

4.2 使用svn客户端验证

现在我们来使用svn客户端来连接svn服务器,

以检出ilannisvn仓库为例,如下图:

http://192.168.8.33/repos/ilannisvn

Svn服务器的搭建与配置_version_28

Svn服务器的搭建与配置_version_29

上图中,输入具有权限的用户及密码。

Svn服务器的搭建与配置_服务器_30

通过上图,我们可以很明显的看出,我们已经从svn服务器检出svn的代码。这说明svn已经能通过http访问。

4.3 在ubuntu上配置

在ubuntu上配置apache与svn集成,和centos上一样的,也只需要修改apache的配置文件subversion.conf即可。

subversion.conf修改内容如下:

sudo vim /etc/apache2/mods-available/dav_svn.conf

<Location /repos>

   DAV svn

  SVNParentPath /data/ilanni

#一定要放在这行下面,否则会出现权限混乱的现象

AuthzSVNAccessFile /data/svndata/authz

AuthType Basic

AuthName “Authorization Realm”

AuthUserFile /data/svndata/passwd

#告诉apache在authfile中所有的用户都可以访问。 如果没有它,则只能第一个用户可以访问新建库。

Require valid-user

</Location>

Svn服务器的搭建与配置_ubuntu_31

subversion.conf文件修改完毕后,我们要重新创建svn的用户和密码文件passwd,但是passed文件我们要使用apache的工具htpasswd进行创建。如下:

htpasswd -cm /data/svndata/passwd ilanniadmin

Svn服务器的搭建与配置_天下_32

htpasswd命令参数中-c是创建passwd文件,-m是使用md5加密。

passwd文件创建完毕后,我们再来添加test1和test2用户,使用如下命令:

htpasswd -m /data/svndata/passwd test1

htpasswd -m /data/svndata/passwd test2

htpasswd -m /data/svndata/passwd test3

Svn服务器的搭建与配置_服务器_33

passwd用户和密码添加完毕后,然后我们在修改/data目录属性,如下:

sudo chown -R www-data:www-data /data/

sudo chmod 755 -R /data/

Svn服务器的搭建与配置_天下_34

以上配置完毕后,我们来重启apache,使用如下命令:

/etc/init.d/apache2 restart

Svn服务器的搭建与配置_文章_35

4.4 使用svn客户端验证

现在我们来使用svn客户端来连接svn服务器,

以检出ilannitest仓库为例,如下图:

http://192.168.8.34/repos/ilannitest

Svn服务器的搭建与配置_服务器_36

Svn服务器的搭建与配置_version_37

上图中,输入具有权限的用户及密码。

Svn服务器的搭建与配置_服务器_38

通过上图,我们可以很明显的看出,我们已经从svn服务器检出svn的代码。这说明svn已经能通过http访问。

五、使用https访问

要使用https访问svn服务器,我们也是需要配置apache服务,下面根据OS不同分别讲解下。

注意:无论是使用http还是https访问svn,passwd文件都是通过htpasswd命令创建。

5.1 在centos上配置

在centos上配置apache与svn集成,我们只需要修改apache的配置文件subversion.conf和ssl.conf即可。

对于ssl.conf文件,我们使用默认的即可。但是如果我们要使用自己的ssl证书的话,可以修改ssl.conf文件的SSLCertificateFile和SSLCertificateKeyFile选项即可。

如果不使用自己的ssl证书的话,保持该文件默认就行了,如下:

vim /etc/httpd/conf.d/ssl.conf

LoadModule ssl_module modules/mod_ssl.so

Listen 443

SSLPassPhraseDialog  builtin

SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)

SSLSessionCacheTimeout  300

SSLMutex default

SSLRandomSeed startup file:/dev/urandom  256

SSLRandomSeed connect builtin

SSLCryptoDevice builtin

<VirtualHost _default_:443>

ErrorLog logs/ssl_error_log

TransferLog logs/ssl_access_log

LogLevel warn

SSLEngine on

SSLProtocol all -SSLv2

SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

<Files ~ “\.(cgi|shtml|phtml|php3?)$”>

    SSLOptions +StdEnvVars

</Files>

<Directory “/var/www/cgi-bin”>

    SSLOptions +StdEnvVars

</Directory>

SetEnvIf User-Agent “.*MSIE.*” \

         nokeepalive ssl-unclean-shutdown \

         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \

          “%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”

</VirtualHost>

Svn服务器的搭建与配置_文章_39

而subversion.conf文件,只需要添加SSLRequireSSL选项即可。如下:

vim /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /repos>

   DAV svn

   SVNParentPath /data/ilanni

#一定要放在这行下面,否则会出现权限混乱的现象

  AuthzSVNAccessFile /data/svndata/authz

   AuthType Basic

   AuthName “Authorization Realm”

   AuthUserFile /data/svndata/passwd

#告诉apache在authfile中所有的用户都可以访问。 如果没有它,则只能第一个用户可以访问新建库。

   Require valid-user

   SSLRequireSSL

</Location>

Svn服务器的搭建与配置_文章_40

以上配置完毕后,我们来重启apache,使用如下命令:

/etc/init.d/httpd restart

5.2 使用svn客户端验证

现在我们来使用svn客户端来连接svn服务器,还是以检出ilannisvn仓库为例,如下图:

https://192.168.8.33/repos/ilannisvn

Svn服务器的搭建与配置_服务器_41

Svn服务器的搭建与配置_ubuntu_42

接受ssl验证。

Svn服务器的搭建与配置_ubuntu_43

Svn服务器的搭建与配置_ubuntu_44

通过上图,我们可以很明显的看出,我们已经从svn服务器检出svn的代码。这说明svn已经能通过https访问。

5.3 在ubuntu上配置

在ubuntu上配置apache与svn集成,和centos上是差不多的,也是需要修改apache的配置文件subversion.conf和default-ssl.conf。

对于ssl.conf文件,我们使用默认的即可。但是如果我们要使用自己的ssl证书的话,可以修改default-ssl.conf文件的SSLCertificateFile和SSLCertificateKeyFile选项即可。

如果不使用自己的ssl证书的话,保持该文件默认就行了,如下:

sudo vim /etc/apache2/sites-available/default-ssl.conf

<IfModule mod_ssl.c>

<VirtualHost _default_:443>

ServerAdmin webmaster@localhost

DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combined

SSLEngine on

SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem

SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

<FilesMatch “\.(cgi|shtml|phtml|php)$”>

SSLOptions +StdEnvVars

</FilesMatch>

<Directory /usr/lib/cgi-bin>

SSLOptions +StdEnvVars

</Directory>

BrowserMatch “MSIE [2-6]” \

nokeepalive ssl-unclean-shutdown \

downgrade-1.0 force-response-1.0

BrowserMatch “MSIE [17-9]” ssl-unclean-shutdown

</VirtualHost>

</IfModule>

Svn服务器的搭建与配置_服务器_45

在ubuntu上启用svn的https访问方法和centos上还是有几个地方不一样的,不一样的地方如下:

启用ssl模块,使用如下命令:

sudo a2enmod ssl

Svn服务器的搭建与配置_服务器_46

这条命令相当于执行了以下两条命令,如下:

sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled

如果没有a2enmod指令,也可直接在apache2.conf中设置SSL模块加载,如下:

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so

启用SSL站点,使用如下命令:

sudo a2ensite default-ssl

Svn服务器的搭建与配置_version_47

最后我们再来编辑dav_svn.conf文件,加入SSLRequireSSL选项即可,如下:

sudo vim /etc/apache2/mods-available/dav_svn.conf

<Location /repos>

   DAV svn

   SVNParentPath /data/ilanni

#一定要放在这行下面,否则会出现权限混乱的现象

AuthzSVNAccessFile /data/svndata/authz

AuthType Basic

AuthName “Authorization Realm”

AuthUserFile /data/svndata/passwd

#告诉apache在authfile中所有的用户都可以访问。 如果没有它,则只能第一个用户可以访问新建库。

Require valid-user

SSLRequireSSL

</Location>

Svn服务器的搭建与配置_天下_48

以上配置完毕后,我们来重启apache,使用如下命令:

/etc/init.d/apache2 restart

Svn服务器的搭建与配置_服务器_49

5.4 使用svn客户端验证

现在我们来使用svn客户端来连接svn服务器,

以检出ilannitest仓库为例,如下图:

https://192.168.8.34/repos/ilannitest

Svn服务器的搭建与配置_version_50

Svn服务器的搭建与配置_天下_51

Svn服务器的搭建与配置_version_52

Svn服务器的搭建与配置_version_53

通过上图,我们可以很明显的看出,我们已经从svn服务器检出svn的代码。这说明svn已经能通过https访问。

六、svn仓库权限验证

以上几个章节我们介绍了svn服务器的搭建与配置,以及svn服务器的访问方法,这个章节,我们再来验证下svn仓库权限。

在第二章节中,我们配置的svn仓库权限,如下:

Svn服务器的搭建与配置_version_54

这个权限控制是admin用户组,对ilannisvn和ilannitest仓库具有读写权限。

develop用户组对ilannisvn仓库具有读写权限,对ilannitest具有只读权限,并且develop用户组的test1用户对ilannisvn仓库下的config目录只读不能写。

android用户组对svn所有仓库没有任何访问权限。

现在我们来验证admin用户组的ilanniadmin用户对svn仓库的权限,如下:

svn co –username ilanniadmin –password 123456 https://192.168.8.33/repos/ilannisvn

svn co –username ilanniadmin –password 123456 https://192.168.8.33/repos/ilannitest

Svn服务器的搭建与配置_服务器_55

通过上图,我们可以很明显的看出ilanniadmin用户具有对ilannisvn和ilannitest仓库具有读权限,下面我们来测试写权限。

Svn服务器的搭建与配置_天下_56

Svn服务器的搭建与配置_服务器_57

通过上图,我们可以很明显的看出ilanniadmin用户具有对ilannisvn和ilannitest仓库具有读写权限,这说明我们的权限配置是对的。

在此我们只验证admin用户组,其他的权限请各位童鞋自行验证。

到此有关svn服务器搭建与配置的文章就全部结束。