SVN主从仓库搭建

一、介绍

最近公司服务器做了些调整,SVN服务器搭建在内网服务器上,但在云服务器上做一个备份。然后就想到了SVN主从仓库的搭建了。

二、环境

操作系统

CentOS 7.6

主服务器

局域网服务器 IP: 192.168.0.100

从服务器

阿里云服务器 IP: 47.97.208.x

svn版本

svnserve, version 1.7.14 (r1542130)

三、步骤

1、 安装svn环境

分别在二台服务器上安装SVN环境,并创建对应的仓库(这里可以是单仓库也可以是多仓库,二边保持一致就行了。如果是多仓库,每个创建的配置需要按下面步骤分别走一遍)。

svn环境搭建及配置Nginx转发和数据迁移可以参考之前写的文章,这里就不在复述了
CentOS中svn服务器安装与使用
SVN服务器跨平台迁移
Nginx转发SVN

实验环境

  • 主服务器svn仓库: /home/svn/test,配置http协议:http://192.168.0.100/test/
  • 从服务器svn仓库: /home/svn/test_backup,因为只作备份,直接使用svn协议:svn://47.97.208.x/test_backup/
  • 二台服务都有相同的账号和权限管理文件。账号 zengwu=zw123.guoke=gk123.都有test仓库所有读写权限

2、 在备份机上,修改刚刚创建的SVN库里的钩子脚本pre-revprop-change

cd /home/svn/test_backup
cp pre-revprop-change.tmpl pre-revprop-change
chmod +x pre-revprop-change
vim pre-revprop-change

#!/bin/sh
# 直接在脚本最前面加入exit 0退出程序就可以了
exit 0

3、 在主机上,初始化版本

因为主机在内网,外网无穿透情况下无法访问内网,所以同步操作在主机上执行。

svnsync init svn://47.97.208.x/test svn://192.168.0.103/test --username zengwu --password zw123. --no-auth-cache
  • svnsync init 从库的URL 主库的URL
  • –username –password: svn账号密码
  • –no-auth-cache: 不缓存账号密码

4、在主机上,开始同步主库的SVN数据

svnsync sync --non-interactive svn://47.97.208.x/test --username zengwu --password zw123.

5、在主机上,修改hooks下的post-commit脚本进行SVN实时同步

svn每次提交成功后,会调用hooks下的post-commit脚本,所以在这里将同步数据语句加入其中就可以了。

cd /home/svn/test
cp post-commit.tmpl post-commit
chmod +x post-commit
vim post-commit

#!/bin/sh
# 直接在脚本最前面加入
svnsync sync --non-interactive svn://47.97.208.x/test --username zengwu --password zw123.
# 如果没有其他调整直接退出,默认的后面的代码可以不用执行
exit 0

四、测试

本地Checkout: http://192.168.0.100/test/ 为 test目录
本地Checkout: svn://47.97.208.x/test_backup/ 为test_back目录
在test目录中创建测试.txt文件并以zengwu账号提交
在test目录中创建测试1.txt 文件并以guoke账号提交
在test_backup目录中update能更新到测试.txt测试1.txt 文件。
查看二个目录的日志也是一样的。

五、题外话

如果换过来,主服务器在外网云服上,从服务器在内网中,因为外网服务器无法使用svn://192.168.0.100/test/内网IP来访问时,该如何实现。

这里可以借助内网穿透服务来实现,如我们可以搭建一个frp内网穿
外网服务器为frp服务器,内网服务为frp客户端,在内网frp客户配置加入svn的tcp协议穿透

[SVN]
type = tcp
local_ip = 0.0.0.0
local_port = 3690
remote_port = 3691

然后外网服务器可以使用svn://127.0.0.1:3691/test/来访问内网svn仓库了,其他配置和前面一样.

0%