当前位置: > Linux服务器 > SVN >

CentOS搭建svn服务器支持https访问

时间:2014-12-05 21:11来源:linux.it.net.cn 作者:IT
关于svn,之前我也不了解这是个什么东西,去年(大二)的时候,在学校接触过一个项目,当时就用到了这个,也都不是我配置的,都是别人给我整好了,我就写代码呗,写了就提交上去,当时也没有考虑过什么事svn,现在在公司实习了,时间很充裕,就想玩玩svn,也顺便把我准备做的毕业设计都传上去,阿里云给了我机会,新手注册,ECS免费半年,多好的事,虽然没有外网带宽,但是买1M的外网带宽也就20多块钱一个月吧!我还是可以接受的,好了不废话了,阿里云在这里就不废话了,反正感觉很高大上,在这里就简单聊聊svn吧!也是借鉴了很多小伙伴们的博客!
 
svn,subversion的缩写,版本控制系统,项目中肯定用到它吧应该,尤其是团队开发,小伙伴们改动了某个文件,传到服务器上去,其他的小伙伴更新一下自己本机,这样我们的本机环境始终都可以保证是一致的,给开发带来了很多的便利性。并且他会记录版本,你每提交更新一次,都会产生一个版本出来,如果错了,还可以用相对较久远的版本对其进行恢复,当然了,我现在还不很清楚,恢复的具体操作!今天介绍一下怎么搭建SVN服务器!
 
首先,我们要明确的是,svn可以在脱离数据库的情况下,存储数据!一般的动态web网站,肯定都没法离开数据库吧,只有N年前的静态html站点才是死的!
 
更多知识可以看看:http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
 
 
 
阿里云给我提供的是CentOS 5.8 64位系统,并且支持SSH,这样我就可以用putty远程操作它了!
 
svn支持https访问,所以至少,你需要安装的有三个模块:
 
 
 
svn                     yum  install  mod_dav_svn subversion
apache                yum  install httpd httpd_devel
openssl               yum  install mod_ssl openssl
首先安装svn:
 
 
使用root账号去登录之后,直接输入命令就行了:yum  install  mod_dav_svn subversion
 
正常情况下,系统会自动的去下载所需要的数据包,然后活提示你是否立即安装,确认安装就是了
 
下面开始配置svn,让服务器可以通过svn://的访问方式
 
1.创建svn服务器根文件夹:
 
#mkdir  /home/svn
 
那么以后我的每个项目,如果需要提交到svn服务器上,我都应该放到这个路径下面去了
 
2.创建一个版本库
 
现在需要创建一个版本库,名字随便吧,尽量自己看懂哈!
 
#svnadmin  create  /home/svn/lfdcwtjxt
 
然后开始配置svn服务器,我还是比较喜欢用vi编辑器来编写基础文件,我不是玩linux的哈,我做java开发的,linux就会一点基础的东西!
 
在这里,需要注意的是,如果svn下面将来会有很多个项目的时候,我的建议是,专门建立一个统一的用户文件和权限文件,我也是这么做的!并且我都是放在svn根目录下,即: /home/svn/
 
其实在/home/svn/lfdcwtjxt/conf/路径下已经有了一个名叫passwd的文件了,这个就是一个用户文件,但是我不用他,我单独建立了一个统一管理用户的文件:
 
新建用户文件:(用vi编辑器就可以)
 
# vi  /home/svn/svn_passwd
 
# :wq
 
对用户文件的内容可以是:(键值对的方式:用户名 = 密码)
 
[users]
 
hujie = hujie123
 
接下来需要配置用户的读写权限,同样的,单独新建一个文件,来管理所有的项目
 
 
 
# vi  /home/svn/svn_authz
 
# :wq
 
文件的内容一般有这样几个部分:
[aliases]
 
[groups]                         svn的用户组
 
admins = hujie               admins用户组下目前只有hujie一个用户,多个用英文逗号隔开
 
[lfdcwtjxt:/]                    lfdcwtjxt版本库的根目录
 
@admins =  rw              用户组前面需要加上@符号,rw表示读、写权限
 
* =                                  其他一切用户连读都不让读
 
好了,这样单独的用户与权限文件也就建立好了,我们需要在lfdcwtjxt版本库里面去配置让其生效,编辑 /home/svn/lfdcwtjxt/conf/svnserve.conf
 
[general]
 
anon-access  =  none                  
 
auth-access  =  write
 
password-db  =  /home/svn/svn_passwd                 这就是我建立的统一用户文件
 
authz-db  =  /home/svn/svn_authz                           我建立的统一的权限文件
 
3.启动服务
 
现在启动svn服务,就可以用svn://的方式访问了,建议是直接用下面的方式去启动
 
#svnserve  -d  -r  /home/svn
 
然后测试一下:
 
#svn  co  svn://localhost/lfdcwtjxt
 
会提示你输入用户名,密码,就和远程用putty连接远程主机很类似,登录进去就可以看到有关路径和文件信息了,
 
我之前用的  /etc/init.d/svnserve   restart方式启动,就碰到实际上并没有启动成功的现象,控制台是显示启动ok了,但是运行身份不是root,也导致无法用svn://的方式去访问,出现的错误是:
 
No repository found in 'svn://localhost/lfdcwtjxt'
 
这个错误,首先要保证上述的权限文件配置对了,也就是[lfdcwtjxt:/]这个地方
 
然后就是服务确实启动了,我用第一种方法启动就正常,第二种就出现这个错误了
 
但是现在还是不能够通过浏览器用http://的访问方式去访问,需要安装httpd
 
4.安装apache支持
 
#yum  install httpd httpd_devel
 
同样,一般都是下载,然后提示是否立即安装,安装即可,
 
5.这时候也是需要配置的:
 
第一步是新曾一个httpd的用户(不是svn用户,他们对用户验证是独立的)
 
#htpasswd   -c   /home/svn/svn_http_passwd   hujie
 
根据提示,输入密码即可
 
给httpd添加用户,必须是htpasswd命令,第一次添加需要新建文件,带上 -c参数,以后就不需要了
 
第二部需要修改一下这个文件/etc/httpd/conf.d/subversion.conf添加如下信息
 
<Location  /svn>
 
DAV  svn
 
#SVNPath   /home/svn/lfdcwtjxt             //如果你只有一个版本库可以用它
 
SVNParentPath  /home/svn/                 //多个版本库用它,配合SVNListParentPath
 
SVNListParentPath   on                         //多个版本库的时候可以用他,配合SVNParentPath
 
AuthType  Basic
 
AuthName   "Authorization Realm"
 
AuthUserFile  /home/svn/svn_http_passwd      //不可与svn的用户公用一个文件
 
AuthzSVNAccessFile          /home/svn/svn_authz     //这个可以与之前的那个权限文件公用
 
Require   valid-user                                  //需要验证用户
 
</Location>
 
上述需要注意的是:/home/svn/svn_http_passwd不应该与svn共同使用一个用户文件,原因是httpd与svn用户都是单独的,前者会对用户文件中的密码进行加密,后者则不会加密,我之前用的就是公用的,然后导致用svn://访问,密码始终都是错误的
 
<Location  /svn>,那么访问的时候,访问方式就变成了..../svn/lfdcwtjxt了
 
6.启动httpd服务
 
service  httpd  restart
 
然后用浏览器就可以访问了,比如:http://192.168.0,1/svn/lfdcwtjxt
 
输入用户名和密码即可
 
现在还不能支持https://的访问方式呢,eclipse里面好像是必须为https://
 
下面继续吧!
 
7.安装openssl
 
# yum  install mod_ssl openssl
 
还是一样,先自动下载,然后提示是不是安装,安装即可
 
下面的这些操作,表示我不很明白,我是按照小伙伴们的指示,这么做的:
 
#cd  /etc/pki/tls/private  
#openssl  genrsa  -out  my.key  1024    
#openssl  req  -new  -key  my.key  -out  my.csr  
#cd  /etc/pki/tls/certs  
#openssl  x509  -req  -days  365  -in  /etc/pki/tls/private/my.csr  -signkey  /etc/pki/tls/private/my.key  -out  my.crt
 
到这一步的时候,会让你输入很多东西
 
下面openssl会要求为证书输入一些相关信息:
Country Name (2 letter code) [XX]:CH
State or Province Name (full name) []:BEIJING
Locality Name (eg, city) [Default City]:BEIJING
Organization Name (eg, company) [Default Company Ltd]:173LU.COM
Organizational Unit Name (eg, section) []:CS
Common Name (eg, your name or your server's hostname) []:hujie
Email Address []:5349691@qq.com
 
然后还是要你输入信息,不过这时候enter可以结束输入了,没必要的就不输入了哈!
 
这时,在目录/usr/local/apache2/conf/下生成了两个文件:server.key,server.crt
 
8.修改/etc/httpd/conf.d/ssl.conf文件
 
SSLCertificateFile /etc/pki/tls/certs/my.crt  
SSLCertificateKeyFile /etc/pki/tls/private/my.key
 
9.修改/etc/httpd/conf/httpd.conf文件
 
<Directory />  
    Options FollowSymLinks  
    AllowOverride None  
    SSLRequireSSL                                     //添加此行  
</Directory>
 
如果是修改的/etc/httpd/conf/httpd.conf文件的话,localhost可能就没法访问了,也可以不在这修改,可以修改/etc/httpd/conf.d/subversion.conf
 
<Location  /svn>
 
DAV  svn
 
#SVNPath   /home/svn/lfdcwtjxt            
 
SVNParentPath   /home/svn/             
 
SVNListParentPath   on                  
 
AuthType  Basic
 
AuthName   "Authorization Realm"
 
AuthUserFile  /home/svn/svn_http_passwd    
 
AuthzSVNAccessFile          /home/svn/svn_authz   
 
Require   valid-user                
 
SSLRequireSSL           //在这里添加加密访问配置
 
</Location>
 
这样就可以了
10.重启httpd
 
service  httpd  restart
 
 
 
好了,现在可以去eclipse,把工程share了,前提是eclipse有svn插件哈!然后提交到svn服务器上去了
 
 
 
到了这,我还是遇到问题了,eclipse下提交的时候出现的:
 
Can't open file '/home/svnroot/repository/test/db/txn-current-lock': Permission denied
 
我这里出现这个原因是:之前创建使用root创建的,用hujie登录,目录权限不太一样,所以修改了一下权限就可以了:
 
cd /home
sudo chmod 777 -R svn
 
我在网上还看到别的小伙伴们用的解决方案:
 
http://aben328.iteye.com/blog/1070850
 
http://www.cnblogs.com/macula7/archive/2011/06/08/2075150.html
 
http://blog.csdn.net/spring21st/article/details/22556555
 
明天是周日,完了,我要睡一上午了!!!!!
 
值得注意的几个问题:
 
问题1:
 
后期添加新的版本库操作
 
svnadmin create /home/svn/newSubversionName
 
配置新建立的版本库,为其配置用户文件信息与权限文件信息(在这里我使用的是统一的管理文件,每个版本库中都会在conf文件夹下自带一个passwd用户文件和authz权限文件,而我使用的是自行建立的一个统一管理用户与权限的文件,在svn根目录/home/svn/路径下:svn_http_passwd、svn_authz)
 
修改新建版本库路径下的svnserver.conf,
 
修改的内容参考上述配置内容
 
 
 
如果需要添加新的用户:
 
htpasswd  -c  /home/svn/svn_http_passwd  userName
 
如果这个http的用户文件已经存在了,那么就可以不加参数-c了
 
根据提示输入两次密码即可
 
如果需要修改权限,直接编辑svn_authz即可
 
 
 
然后最好是重启httpd服务和svnserver
 
/etc/init.d/httpd   stop
 
/etc/init.d/svnserver  stop 
 
/etc/init.d/httpd   start
 
/etc/init.d/svnserver start
 
(似乎是可以直接用restart代替哈)
 
问题2
 
相关容易混淆的信息
 
权限文件:这里其实有两种,分别是svn版本库本身的和httpd服务的,但是可以使用同一个
 
用户文件:这里也是两种,一个是svn本身的,密码是明文,如hujie=hujie123,一个是httpd的,但是密码是加密的,所以就不能使用相同的一个文件了
 
 
(责任编辑:IT)
------分隔线----------------------------