linux下搭建SVN服务器

2022-09-09 11:35:42 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

————以下内容为转载———————

https://blog.csdn.net/wuruijie321/article/details/83652705

Linux下的SVN服务器搭建

鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人

本文的目的,也就是想让后继之人在搭建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模块

代码语言:javascript复制
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

代码语言:javascript复制
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防火墙

CentOS7默认的防火墙不是iptables,而是firewalle.

安装iptable iptable-service

代码语言:javascript复制
#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables 
#安装iptables-services
yum install iptables-services

禁用/停止自带的firewalld服务

代码语言:javascript复制
#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld

设置现有规则

代码语言:javascript复制
#查看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

保存规则设定

代码语言:javascript复制
#保存上述规则
service iptables save

开启iptables服务

代码语言:javascript复制
#注册iptables服务
#相当于以前的chkconfig iptables on
systemctl enable iptables.service
#开启服务
systemctl start iptables.service
#查看状态
systemctl status iptables.service

以下为完整设置脚本

代码语言:javascript复制
#!/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代码

  1. [Mon Oct 07 01:20:37 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
  2. [Mon Oct 07 01:20:37 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id ‘usera’ not configured
  3. [Mon Oct 07 01:20:45 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
  4. [Mon Oct 07 01:20:45 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id ‘usera’ not configured
  5. [Mon Oct 07 01:21:26 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
  6. [Mon Oct 07 01:21:26 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id ‘usera’ not configured
  7. [Mon Oct 07 01:22:02 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
  8. [Mon Oct 07 01:22:02 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id ‘usera’ not configured

对于这个问题有人说关掉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

0 人点赞