大家好,又见面了,我是你们的朋友全栈君。
————以下内容为转载———————
https://blog.csdn.net/wuruijie321/article/details/83652705
鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人
本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结
/******开始*********/
系统环境:Centos 7
第一步:通过yum命令安装svnserve,命令如下:
>yum -y install subversion
此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行
若需查看svn安装位置,可以用以下命令:
>rpm -ql subversion
第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)
选择在var路径下创建版本库,当前处于根目录下,一次性创建如下:
>mkdir -p /var/svn/svnrepos
第三步:创建svn版本库
在第二步建立的路径基础上,创建版本库,命令如下:
>svnadmin create /var/svn/svnrepos/xxxx (xxxx为你预期的版本库名称,可自定义)
创建成功后,进入xxx目录下
>cd /var/svn/svnrepos/xxxx
进入目录,可以看见如下文件信息:
第四步:配置修改
进入已经创建好的版本库目录下,也就是前文说创建的xxxx
进入conf
>cd /var/svn/svnrepos/xxxx/conf
conf目录下,一共存放三份重要的配置文件,如下:
authz:负责账号权限的管理,控制账号是否读写权限
passwd:负责账号和密码的用户名单管理
svnserve.conf:svn服务器配置文件
细节修改如下:(希望大家严格按照以下信息,不用参考网络上其他资料)
修改authz文件信息,如下:
>vi authz
在文件内容的末尾,添加如下:
只需在末尾添加,无需在文件其他部分修改和添加任何东西(请忽略groups被我马赛克的地方,那其实也是条无用的记录,我忘记删掉而已),末尾内容如下:
[/]
账号1 = rw
账号2 = rw
。。。。。
rw表示赋予此账号可读写的权限,请注意[]中的斜杠,一定是正斜杠,有些教程说,需添加版本库名称在括号内,我直接建议就这写,这样写允许访问的权限更大,避免一些错误
修改passwd文件信息
>vi passwd
账号密码文件无需做修改,也是直接将账号和密码信息追加到文件中即可,注意格式为:
账号 = 密码
例如:admin = 123456
修改svnserve.conf(重要)
vi svnserve.conf
原始文件内容,都被注释掉的,我们只需要去掉4条指定内容前注释即可,如下:
大多数网络资料,要将authz-db = authz这条给去掉注释
还有多数资料会让大家在realm = My First Repository处填写版本库地址 /var/svn/svnrepos/xxx
到此,配置已经全部完成,账号信息已经添加成功
第五步:防火墙开启
centos 7 开始采用firewall作为防火墙的操作指令, 要想用iptables必须先安装插件
多数情况下服务器安装完成,配置完成后,无法连接svn服务器,均是防火墙问题,大家按照如下3条命令逐一执行即可
>/sbin/iptables -I INPUT -p tcp –dport 3690 -j ACCEPT
>/etc/init.d/iptables save
>service iptables restart
执行结果如下图:
*如果你和我一样无法通过以上命令设置好防火墙,请参照本文《附录1》
六:启动svn服务器
在跟目录下,执行如下命令:
>svnserve -d -r /var/svn/svnrepos
启动成功后,可用netstat -tunlp 查看端口是否启用
七:客户端访问svn服务器
在windows客户端,输入地址:svn://ip地址:3690/xxxx (iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)
弹出输入用户名和密码,输入即可访问
八:Apache_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 /新建仓库名>
DAV svn
SVNPath /home/svn/新建仓库名/
AuthType Basic
AuthName "Subversion repos"
AuthUserFile /home/svn/新建仓库名/conf/accesspwd
AuthzSVNAccessFile /home/svn/新建仓库名/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错误
*如果你和我一样svn客户端ip浏览资源库时报服务器500错误请参考本文《附录2》
到此,Linux下svn服务器搭建就总结完毕,感谢大家的阅读
如果此文有帮助到你,请帮忙推广
附录1:————以下内容为文章中描述不详之处自己查资料填坑————-
CentOS7默认的防火墙不是iptables,而是firewalle.
安装iptable iptable-service
#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables
#安装iptables-services
yum install iptables-services
禁用/停止自带的firewalld服务
#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld
设置现有规则
#查看iptables现有规则
iptables -L -n
#先允许所有,不然有可能会杯具
iptables -P INPUT ACCEPT
#清空所有默认规则
iptables -F
#清空所有自定义规则
iptables -X
#所有计数器归0
iptables -Z
#允许来自于lo接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT
#开放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#开放21端口(FTP)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#开放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#开放443端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#开放3690端口(SVN)
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
#允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#其他入站一律丢弃
iptables -P INPUT DROP
#所有出站一律绿灯
iptables -P OUTPUT ACCEPT
#所有转发一律丢弃
iptables -P FORWARD DROP
保存规则设定
#保存上述规则
service iptables save
开启iptables服务
#注册iptables服务
#相当于以前的chkconfig iptables on
systemctl enable iptables.service
#开启服务
systemctl start iptables.service
#查看状态
systemctl status iptables.service
以下为完整设置脚本
#!/bin/sh
iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
service iptables save
systemctl restart iptables.service
附录2:svn客户端通过http://ip/资源库浏览资源库时出现500错误
tail -100f /etc/httpd/logs/error_log
Linux代码
对于这个问题有人说关掉SElinux,个人没试过,不过肯定不好,影响主机安全性。
执行如下命令即可:
chcon -R -h -t httpd_sys_content_t /svn目录/
设置资源库文件所属账户(这个不确定是否是引起500的原因):chown -R apache.apache /svn目录/
到这里为止就可以客户端查看资源库了,但是SVN 提交时报错 could not begin a transaction
执行如下命令即可:
1- chcon -R -t httpd_sys_content_rw_t /svn目录/
2 – setsebool -P httpd_unified=1
写得不好,仅仅自己做个记录,体验了一下,写一篇别人看得明白的文章太难,感谢csdn的大神们!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161763.html原文链接:https://javaforall.cn