RT, 软件采用yum方式安装。
一、软件安装
1. 安装SVN、Apache及其他相关
yum install httpd mod_dav_svn subversion mod_ssl
2. 测试安装是否成功
出现截图所示内容表示安装成功,下面开始配置
二、配置SVN
1.创建svn服务器根文件夹
#mkdir /home/svn
那么以后我的每个项目,如果需要提交到svn服务器上,我都应该放到这个路径下面去了
2.创建一个版本库
#svnadmin create /home/svn/kbzc
3.配置配置权限、用户等
新建用户文件:(用vi编辑器就可以)
# vi /home/svn/svn_passwd
[users]
usera=666666
userb=666666
接下来需要配置用户的读写权限,同样的,单独新建一个文件,来管理所有的项目
# vi /home/svn/svn_authz
文件的内容一般有这样几个部分:
[aliases]
[groups] #svn的用户组
admins = usera #admins用户组下目前只有hujie一个用户,多个用英文逗号隔开
[kbzc:/] #kbzc版本库的根目录
@admins = rw #用户组前面需要加上@符号,rw表示读、写权限
* = #其他一切用户连读都不让读
启用自定义配置:
vi /home/svn/kbzc/conf/svnserve.conf
启用[general]的几行
[general]
anon-access = none
auth-access = write
password-db = /home/svn/svn_passwd #这就是我建立的统一用户文件
authz-db = /home/svn/svn_authz #我建立的统一的权限文件
现在启动svn服务,就可以用svn://的方式访问了,建议是直接用下面的方式去启动
#svnserve -d -r /home/svn
然后测试一下:
#svn co svn://localhost/kbzc
会提示你输入用户名,密码,登录进去就可以看到有关路径和文件信息了。
停止SVN服务器:
killall svnserve
三、Apache+SVN整合
1、新增一个httpd的用户(不是svn用户,他们对用户验证是独立的)
#htpasswd -c /home/svn/svn_http_passwd zhangdc
根据提示,输入密码即可
给httpd添加用户,必须是htpasswd命令,第一次添加需要新建文件,带上 -c参数,以后就不需要了
2、编辑Apache的Subversion配置文件
vi /etc/httpd/conf.d/subversion.conf
添加如下信息
<Location /svn>
DAV svn
#SVNPath /home/svn/kbzc #如果你只有一个版本库可以用它
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://访问,密码始终都是错误的
3、设置资源库文件所属账户
chown -R apache.apache /home/svn
重启Apache:
service httpd restart
现在就可以在浏览器尝试访问了:
http://svn_machine_ip/project
按提示输入用户名密码。
访问不了?页面提示:“
This server could not verify that you are authorized to access the document requested.”
查看下apache日志:
tail -100f /etc/httpd/logs/error_log
[Sat Oct 15 06:54:06 2016] [error] [client 192.168.22.1] (13)Permission denied: Could not open password file: /home/svn/passwd
[Sat Oct 15 06:54:06 2016] [error] [client 192.168.22.1] access to /svn failed, reason: verification of user id 'zdc' not configured
[Sat Oct 15 06:54:13 2016] [error] [client 192.168.22.1] (13)Permission denied: Could not open password file: /home/svn/passwd
[Sat Oct 15 06:54:13 2016] [error] [client 192.168.22.1] access to /svn failed, reason: verification of user id 'zdc' not configured
[Sat Oct 15 06:54:16 2016] [error] [client 192.168.22.1] (13)Permission denied: Could not open password file: /home/svn/passwd
[Sat Oct 15 06:54:16 2016] [error] [client 192.168.22.1] access to /svn failed, reason: verification of user id 'zdc' not configured
[Sat Oct 15 06:58:59 2016] [error] [client 192.168.22.1] (13)Permission denied: Could not open password file: /home/svn/passwd
[Sat Oct 15 06:58:59 2016] [error] [client 192.168.22.1] access to /svn failed, reason: verification of user id 'zdc' not configured
[Sat Oct 15 06:59:05 2016] [error] [client 192.168.22.1] (13)Permission denied: Could not open password file: /home/svn/passwd
[Sat Oct 15 06:59:05 2016] [error] [client 192.168.22.1] access to /svn failed, reason: verification of user id 'zhangdc' not configured
[Sat Oct 15 07:00:49 2016] [error] [client 192.168.22.1] (13)Permission denied: Could not open password file: /home/svn/passwd
[Sat Oct 15 07:00:49 2016] [error] [client 192.168.22.1] access to /svn failed, reason: verification of user id 'zhangdc' not configured
对于这个问题有人说关掉SElinux,个人没试过,不过肯定不好,影响主机安全性。
执行如下命令即可:
chcon -R -h -t httpd_sys_content_t /home/svn
四、配置Https方式访问版本仓库
需要用到OpenSSL工具。
1.生成需要的证书、密钥
上面是以http方式访问的,安全性低,下面设置强制https访问svn:
2.配置Apache的Subversion强制使用Https
生成私钥
cd /etc/httpd/conf
openssl genrsa -out httpd.key 1024
用前面的私钥生成证书
openssl req -new -key httpd.key -out httpd.pem -days 3650 -x509
修改Apache的SSL配置文件
# vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/conf/httpd.pem
SSLCertificateKeyFile /etc/httpd/conf/httpd.key
配置subversion强制使用https访问
# vim /etc/httpd/conf/httpd.conf
启用SSLRequireSSL配置(去掉前面的注释符)。