SVN主从仓库搭建

作者: 岑吾 | 来源:发表于2021-08-07 01:48 被阅读0次

    一、介绍

    最近公司服务器做了些调整,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转发和数据迁移可以参考之前写的文章,这里就不在复述了
    Linux中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仓库了,其他配置和前面一样.

    相关文章

      网友评论

        本文标题:SVN主从仓库搭建

        本文链接:https://www.haomeiwen.com/subject/ofsivltx.html