废话不多说,直接上干货
1、通过yum安装subversion,根据提示完成安装
sudo yum install subversion
subversion安装在/bin目录
which svnserve
检查subversion是否安装成功
svnserve --version
2、建立版本库(subversion默认以/var/svn作为数据根目录,可以通过/etc/sysconfig/svnserve修改这个默认位置)
systemctl cat svnserve.service
修改/etc/sysconfig/svnserver将默认目录指定到/opt/svn(使用默认值也可以,后面几步的路径保持一致即可)
vim /etc/sysconfig/svnserve
3、使用svnadmin建立版本库code
sudo mkdir -p /opt/svn
sudo svnadmin create /opt/svn/code
版本库code创建成功后,我们看一下/opt/svn/code目录下现在有哪些文件:
创建用户,编辑用户文件passwd,新增两个用户:admin和guest
vim /opt/svn/code/conf/passwd
编辑权限文件authz,用户admin设置可读写权限,guest设置只读权限
vim /opt/svn/code/conf/authz
编辑svnserve.conf文件,增加以下配置信息:
vim /opt/svn/code/conf/svnserve.conf
anon-access = none #控制非鉴权用户访问版本库的权限 auth-access = write #控制鉴权用户访问版本库的权限 password-db = passwd #指定用户名口令文件名 authz-db = authz #指定权限配置文件名 realm = spring-hello-world #指定版本库的认证域,即在登录时提示的认证域名称
4、启动SVN服务
sudo systemctl start svnserve.service
检查服务是否启动成功
ps aux | grep svn
通过netstat可以看到SVN打开了3690端口
sudo netstat -tnlp
设置成开机启动,完成
sudo systemctl enable svnserve.service
通过客户端访问下面的svn地址即可:
svn://admin@ip-address/svn/code
客户端出现无法连接SVN服务器的解决方案:
绝大部分是因为防火墙的原因导致,如果是阿里云等服务器,需要检查服务器的安全组策略中的3690端口是否打开
通过systemctl检查服务器的防火墙配置:
firewall-cmd --list-all
如果提示"FirewallD is not running",说明防火墙没有开启,可以通过 systemctl start firewalld 开启防火墙,再通过 firewall-cmd --list-all 检查服务器的防火墙配置,结果显示:
public (default, active) interfaces: eno16777736 eno33554984 sources: services: dhcpv6-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules:
可以看到,没有3690端口,我们在防火墙中增加3690端口:
sudo firewall-cmd --permanent --add-port=3690/tcp
sudo firewall-cmd --reload
连接客户端可能会出现:No repository found in 'svn://***.***.***.***/code'
输入命令:
svnserve -d -r /opt/svn/code
会出现:
svnserve: Can't bind server socket: Address already in use
解决办法:
输入命令:
killall svnserve
这个命令是将 svn 相关的服务进程全部杀掉,也就是停止 SVN 服务,然后再执行下面的命令启动版本库code进程
svnserve -d -r /opt/svn/code
如果要启动所有版本库的进程,可以通过下面的命令启动
sudo systemctl start svnserve.service
通过客户端连接SVN服务器,已经可以正常连接了: