本文由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安装完毕后,我们来查看svn的版本,如下:
svn –version
通过上图可以看到,目前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安装完毕后,我们来查看svn的版本,如下:
svn –version
通过上图可以看到,目前ubuntu上svn的版本比较新是1.8的。
二、配置svnsvn安装完毕后,我们现在来配置svn。svn的配置在centos和ubuntu上上基本上是一样的,所以在此我们就不进行区分了。
2.1 创建svn仓库
首先,我们来新建一个ilanni目录用于存储svn仓库,如下:
mkdir -p /data/ilanni
现在我们来创建第一个svn仓库ilannisvn,使用如下命令:
svnadmin create /data/ilanni/ilannisvn
ll /data/ilanni/ilannisvn/
通过上图,我们可以很明显的看出svn创建仓库时会生成conf、db等相关的目录及文件。
现在,我们再来创建第二个svn仓库ilannitest,使用如下命令:
svnadmin create /data/ilanni/ilannitest
ll /data/ilanni/ilannitest/
2.2 svn仓库权限配置
svn仓库创建完毕,我们就可以配置svn仓库的访问权限。
svn仓库权限,我们可以进行单独配置,也可以进行统一配置。考虑实际情况,一般会有多个svn仓库,所以我们进行统一配置。
首先,我们创建用于管理所有仓库帐号密码、权限控制等的目录svndata,如下:
mkdir -p /data/svndata/
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
svnserve.conf文件主要是指定相关用户和权限等配置。
2.2.2 创建passwd文件
svnserve.conf文件创建完毕后,我们来创建用于保存用户和密码的文件passwd,如下:
vim /data/svndata/passwd
[users]
ilanniadmin = 123456
test1 = 123456
test2 = 123456
test3 = 123456
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所有仓库没有任何访问权限。
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
修改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仓库权限配置已经完毕。
三、使用svn协议访问svn搭建与配置完毕后,我们现在来访问svn。svn的访问方法有几种,在此我们只介绍最常使用的三种。先来介绍使用svn协议访问的方法。
启动svn,使用如下命令:
svnserve -d -r /data/ilanni/
ps -ef |grep svn
netstat -tunlp
通过上图,我们可以很明显看出svn协议使用tcp的3690端口。
现在我们来直接使用svn协议访问svn服务器,如下:
svn co –username test1 –password 123456 svn://192.168.8.33/ilannisvn
svn info
通过上图,我们可以很明显的看出通过svn命令是可以访问svn服务器的。
现在我们再来添加一个文件,然后提交到svn服务器,如下:
vim ilannisvn.txt
this is a test file.
svn add ilannisvn.txt
svn commit -m ‘ilannisvn test’
现在我们使用windows下的svn工具查看,如下:
svn://192.168.8.33/ilannisvn
通过上图,我们可以看到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>
subversion.conf文件修改完毕后,我们要重新创建svn的用户和密码文件passwd,但是passed文件我们要使用apache的工具htpasswd进行创建。如下:
htpasswd -cm /data/svndata/passwd ilanniadmin
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
passwd用户和密码添加完毕后,然后我们在修改/data目录属性,如下:
chown apache:apache -R /data/
chmod 755 -R /data/
以上配置完毕后,我们来重启apache,使用如下命令:
/etc/init.d/httpd restart
4.2 使用svn客户端验证
现在我们来使用svn客户端来连接svn服务器,
以检出ilannisvn仓库为例,如下图:
http://192.168.8.33/repos/ilannisvn
上图中,输入具有权限的用户及密码。
通过上图,我们可以很明显的看出,我们已经从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>
subversion.conf文件修改完毕后,我们要重新创建svn的用户和密码文件passwd,但是passed文件我们要使用apache的工具htpasswd进行创建。如下:
htpasswd -cm /data/svndata/passwd ilanniadmin
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
passwd用户和密码添加完毕后,然后我们在修改/data目录属性,如下:
sudo chown -R www-data:www-data /data/
sudo chmod 755 -R /data/
以上配置完毕后,我们来重启apache,使用如下命令:
/etc/init.d/apache2 restart
4.4 使用svn客户端验证
现在我们来使用svn客户端来连接svn服务器,
以检出ilannitest仓库为例,如下图:
http://192.168.8.34/repos/ilannitest
上图中,输入具有权限的用户及密码。
通过上图,我们可以很明显的看出,我们已经从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>
而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>
以上配置完毕后,我们来重启apache,使用如下命令:
/etc/init.d/httpd restart
5.2 使用svn客户端验证
现在我们来使用svn客户端来连接svn服务器,还是以检出ilannisvn仓库为例,如下图:
https://192.168.8.33/repos/ilannisvn
接受ssl验证。
通过上图,我们可以很明显的看出,我们已经从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>
在ubuntu上启用svn的https访问方法和centos上还是有几个地方不一样的,不一样的地方如下:
启用ssl模块,使用如下命令:
sudo a2enmod ssl
这条命令相当于执行了以下两条命令,如下:
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
最后我们再来编辑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>
以上配置完毕后,我们来重启apache,使用如下命令:
/etc/init.d/apache2 restart
5.4 使用svn客户端验证
现在我们来使用svn客户端来连接svn服务器,
以检出ilannitest仓库为例,如下图:
https://192.168.8.34/repos/ilannitest
通过上图,我们可以很明显的看出,我们已经从svn服务器检出svn的代码。这说明svn已经能通过https访问。
六、svn仓库权限验证以上几个章节我们介绍了svn服务器的搭建与配置,以及svn服务器的访问方法,这个章节,我们再来验证下svn仓库权限。
在第二章节中,我们配置的svn仓库权限,如下:
这个权限控制是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
通过上图,我们可以很明显的看出ilanniadmin用户具有对ilannisvn和ilannitest仓库具有读权限,下面我们来测试写权限。
通过上图,我们可以很明显的看出ilanniadmin用户具有对ilannisvn和ilannitest仓库具有读写权限,这说明我们的权限配置是对的。
在此我们只验证admin用户组,其他的权限请各位童鞋自行验证。
到此有关svn服务器搭建与配置的文章就全部结束。