Centos虚拟机SVN的安装和使用http方式访问svn服务器

1、查看是否安装旧版SVN
rpm -qa | grep subversion
2、卸载旧版本SVN
yum remove subversion
3、安装SVN
yum -y install subversion

上面3步都是常规设置。

4、创建SVN版本库(也就是项目要存放的仓库)
mkdir -p /home/svn     创建所有项目的根目录
svnadmin create /home/svn/ProjectName 创建一个项目要存放的位置(必须要在/home/svn根目录下创建)

我将我的版本库放在home/svn目录下,这个svn表示我所有项目的根目录,因为可能会存在多个项目都在一台虚拟机上存放的时候

svnadmin create是创建单个项目的版本库。ProjectName是项目的名字

当上面命令执行后会在/home/svn/ProjectName文件夹下生成以下文件

 

5配置代码库
进入/home/svn/ProjectName/conf文件夹下
authz:文件是权限控制文件
passwd:是帐号密码文件
svnserve.conf :SVN服务配置文件

 

设置可以访问这个远程仓库的人的帐号密码

vi passwd

在[users]下面进行用户名密码的设置

[users]
# harry = harryssecret
# sally = sallyssecret
user1 = 密码
user2 = 密码
。。。

编辑完后,按Esc键退出编辑模式,输入 :wq!       保存文件并退出  

 不用跟系统的/etc/passwd文件中用户名密码相同,用户名密码可以随意设置

 note:

  这里设置的用户名密码是用于svn://协议访问代码仓库使用的。

  这与http协议使用的帐号密码不是使用相同的帐号密码文件

设置权限控制

vi authz  编辑authz

 在[groups]中设置组,和组员

在下面分别为设计组design和开发组dev
设计组需要有对ProjectName项目中的doc文件有读写权限,而开发组只能拥有读的权限
[/doc]对这个文件夹有设置权限
开发组需要对ProjectName项目中的src源码文件有读写权限。其他人员不能进行写操作。
。所以分别设置/doc和/src文件的权限

为了测试方便,加一个[/]仓库根目录的访问权限,任意用户都可以读取内容

不直接对特定用户设置权限,而是对组进行授权,将用户加入该组。

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
design = user1,user2,user...
developer = user11,user22,user...

[/doc]
@design = rw
@dev = r
[/src]
@dev = rw
* = r
[/]
* = r

修改svnserve.conf文件 vi svnserve.conf

清空内容并添加下面内容。主要设置帐号,和权限。还有当前项目的版本库所在目录,

realm中为了避免相对定位出错,这里直接使用绝对路径设置版本库所在目录

[general]
anon-access = none #匿名用户不可访问 auth-access = write #授权用户可写 password-db = passwd #使用哪个文件作为账号文件 authz-db = authz #使用哪个文件作为权限文件 realm = /home/svn/ProjectName # 认证空间名,版本库所在目录

到此,svn仓库已经搭建完毕了

启动svn

svnserve -d -r /home/svn

让svn以deamon守护进程方式 以root用户启动运行。

注意,这路径不能到ProjectName
否则在访问时候会报svn: E170000: URL 'svn://虚拟机ip地址/ProjectName' doesn't exist

 

访问地址svn://ip/ProjectName    省略的svn这个根目录

 

配置Apache的http协议访问

查看httpd是否已经安装的svn模块

ls /etc/httpd/modules/ | grep svn  
mod_authz_svn.so  
mod_dav_svn.so

如果没安装,使用yum安装。

yum install mod_dav_svn

安装完成,对svn版本库下的项目ProjectName进行位置映射

在/etc/httpd/conf.d/文件下创建subversion.conf文件并编辑

vi subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so  
LoadModule authz_svn_module   modules/mod_authz_svn.so  
<Location /ProjectName>  
    DAV svn  
    SVNPath /home/svn/ProjectName/                  
    AuthType Basic  
    AuthName "Subversion repos"
    AuthUserFile /home/svn/ProjectName/conf/accesspwd
    AuthzSVNAccessFile /home/svn/ProjectName/conf/authz
    Require valid-user  
</Location> 

AuthType认证类型

AuthName 描述名,随便取 

AuthUserFile这个是http协议的访问账户密码文件,后面使用htpasswd命令创建

AuthzSVNAccessFile 权限认证文件,这个跟上面配置svn时候配置的权限设置一样

Require 需要认证用户才可以访问

 

htpasswd创建账户密码

htpasswd -c -m /home/svn/ProjectName/conf/accesspwd username

-c是创建新文件,只有第一次创建账户密码时使用

-m是强制使用MD5加密密码(默认)

accesspwd 是创建的文件名。

username你要创建的可访问用户的名字(如我想创建一个asd用户访问这个svn项目仓库,这个username就是asd)

按提示输入两次密码,我们就创建了一个可访问用户名和密码。

如果想要新增加用户abc(第二次添加用户)

不需要使用-c参数,如果使用的会覆盖原来的accesspwd文件

htpasswd -m /home/svn/ProjectName/conf/accesspwd abc

  接着输入两次密码,

  继续增加用户。。。

你不再继续创建新用户,循环结束。

重启Apache的服务

service httpd restart  或者 systemctl restart httpd.service

 

现在就可以通过"http://ip/ProjectName"  来访问我们的svn服务器了

 

当然,上面的情况是在关闭防火墙或开放端口,或http服务正常启动情况。

检查端口是否被使用

netstat -tunlp | grep 80   检查80端口使用情况

netstat -tunlp | grep 3690 检查3690也就是svn的服务端口使用情况

端口被使用,说明服务正常开启。

使用curl进行模拟浏览器请求

curl http://localhsot:80/ProjectName  检查服务有没有响应。

一般会返回401 Unauthorized 未认证的401错误

 

检查防火墙

查看防火墙有没有开启

firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

systemctl status firewalld.service显示一个防火墙的状态

firewall-cmd --list-ports查看已经开放的端口

如果防火墙启动,且没有开放80和3690端口,
开启端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义:
–zone #作用域
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

firewall-cmd --reload #重启firewall

  iptables被开启

vi/etc/sysconfig/iptables #编辑防火墙配置文件添加80端口和3690端口

INPUT ACCEPT [0:0]
:FORWARD ACCEPT[0:0]
:OUTPUT ACCEPT[0:0]
-A INPUT -m state--state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -jACCEPT
-A INPUT -i lo -jACCEPT
-A INPUT -p tcp -mstate --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --Dport 3690 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080-j ACCEPT -A INPUT -j REJECT--reject-with icmp-host-prohibited -A FORWARD -jREJECT --reject-with icmp-host-prohibited 保存退出

systemctl restart iptables.service #最后重启防火墙使配置生效
或者service iptables restart这个语句重启iptables

备注:这里使用80和8080端口为例。
***部分一般添加到
“-A INPUT -p tcp -m state --state NEW -m tcp--dport 22 -j ACCEPT”行的上面或者下面,切记不要添加到最后一行,否则防火墙重启后不生效。

 

我们可以使用telnet命令查看虚拟机的某个端口是否可以连通

如,我们测试apache服务器的80端口是否连通(这需要服务器已经启动的情况下)

telnet ip 端口号

如果没有这个命令,使用yum安装这个命令

yum -y install telnet

其他情况

有可能我们虚拟机需要外网访问,我们需要外网电脑上进行端口地址转换

如我们外网地址为218.107.22.104

而我们虚拟机地址172.16.168.102

我们要将172.16.168.102:80端口映射到218.107.22.104:10020端口上,我们要保证我们的外网主机的防火墙策略允许对外网访问的10020端口映射到虚拟机的80端口上。

如果没有端口映射也会出现不能访问的问题。

 

如果我们想要配置多个svn仓库,我们可以在/home/svn/下创建其他的项目

svnadmin  create /home/svn/新创建的仓库名字

同样的需要修改配置

配置http访问,

在/etc/httpd/conf.d/路径下新建一个project2.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so  
LoadModule authz_svn_module   modules/mod_authz_svn.so  
<Location /新建仓库名>  
    DAV svn  
    SVNPath /home/svn/新建仓库名/                  
    AuthType Basic  
    AuthName "Subversion repos"
    AuthUserFile /home/svn/新建仓库名/conf/accesspwd
    AuthzSVNAccessFile /home/svn/新建仓库名/conf/authz
    Require valid-user  
</Location> 

重启httpd

最后通过

http://ip:80/新建仓库名

对代码仓库进行访问

ps 

  可能我们可以访问svn服务器,也可以checkout出来项目,但是我们上传文件到svn服务器上会出错。

SVN Access to ‘/svn/Test/!svn/me’ forbidden

  在上面设置都没有问题的情况下需要给文件设置对应的用户组,和设置文件权限

将/home/svn/目录下的项目名修改用户组

chown -R group:user url

chown -R apache:apache /home/svn/新建仓库名
-R 会将我们新建仓库文件夹及其子目录下的所有文件递归的更改用户组

apache:apache表示我们要将文件夹及其子目录下的所有文件修改组拥有着为apache,用户为apache

url 修改的文件夹路径

设置访问权限appache用户拥有读写可执行,组用户和其他组或用户可以读和执行

chmod -R 755 /home/svn/新建仓库名

这样设置完后,在使用svn就可以上传文件修改文件了

posted @ 2018-03-14 00:05  海绵般汲取  阅读(5210)  评论(0编辑  收藏  举报