使用docker搭建版本控制系统-SVN

简介: 快速搭建容器版本SVN

  • 作者简介:一名Linux运维工程师,主要分享自己遇到的学习过程与遇到的问题。 

    认识SVN

    image.png

    SVN的全称是Subversion,即版本控制系统。它是最流行的一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(Repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。
    SVN采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。
    SVN的客户端有两类,一类是基于Web的WebSVN等,另一类是以Tortoise SVN为代表的客户端软件。前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。SVN存储版本数据也两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

    优势

    1.存储

    SVN服务器既具有CVS所具有数据储存的优点,像是信息资源存储后会形成资源树结构,便于存储的同时,数据一般不会丢失,同时又拥有自己的特色。SVN是通过关系数据库及二进制的存储方式,同时解决了既往不能同时读写同一文件等问题,同时增添了自己特有的“零或一”原则。

    2.速度

    与人们初始的CVS相比,SVN在速度运行方面有很大提升。因为SVN服务器只支持少量的信息、资源传输,与其他系统相比,更支持的是离线模式,因此避免了网络拥挤现象的出现。

    3.安全性

    SVN是一种技术性更加安全的产品,实现了系统和控制两方面的结合。一方面可以将系统整体的安全功能有效地分布在分支系统中,进而保证分支系统能正常运行,从而使各分支系统能够互补,最终在系统整体性的安全性得以保障,通过均衡原则实现最终追求安全的目的。

    环境要求

    SVN与CVS一样,也是一个跨平台的软件,支持大多数常见的操作系统。例如Windows,Linux等。
    本文主要是用Linux做搭建环境。

    搭建过程

    OS:CentOS Linux release 7.9.2009 (Core)
    docker:Docker version 19.03.14, build 5eb3275
    如果不清楚如何安装docker,可查看 直达链接

    查找svn镜像

    [root@localhost ~]# docker search svn
    NAME                           DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    garethflowers/svn-server       A simple Subversion server, using `svnserve`.   81                                      [OK]
    elleflorio/svn-server          Lightweight Docker container running an SVN …   76                                      
    krisdavison/svn-server         A pre-configured SVN source control server.     28                                      
    svnedge/app                    SVN Edge Official Release Image                 20                                      
    paulovsm/svn-server            Subversion + Apache + SVNAdmin                  10                                      
    nbrun/svn-client               Old SVN clients to work with old svn reposit…   5                                       
    ryandocker/svn2git             Docker wrapper around the svn2git tool.         4                                       
    atlassian/fisheye              Fisheye: search, monitor, and track across S…   4                                       
    jgsqware/svn-client            A Simple SVN client based on Alpine             3                                       [OK]
    polinux/svn2git                svn2git in a docekr (Alpine)                    2                                       [OK]
    aneesv/svn-client              Svn Client                                      2                                       [OK]
    yodamad/svn2git                Tool to help migration from SVN to Gitlab       2                                       
    ksaito1125/svn-resource-type   concourseのresource-typeです。 Subversionリ…         1                                       [OK]
    vertigo/svn2git                A minimalist container to use the (awesome) …   1                                       [OK]
    svnovikov/test                                                                 0                                       
    svnedge/devbuild               SVN Edge Development Build                      0                                       
    takanomasaki/svn-resource                                                      0                                       
    timimages/svn                                                                  0                                       
    svnbadrinath/hello_world                                                       0                                       
    marouen13/svn-mar              an svn image                                    0                                       
    0urob0r0s/svndaemon            Container agent for a simple, repo-based con…   0                                       
    yukinagae/svn-to-git                                                           0                                       [OK]
    crazymax/svn2git-mirror        Mirror SVN repositories to Git periodically     0                                       
    kurento/svn-client                                                             0                                       
    cycletime/svn-test             SVN Server with Test Data
    

    下载 garethflowers/svn-server

    [root@localhost ~]# docker pull docker.io/garethflowers/svn-server
    Using default tag: latest
    latest: Pulling from garethflowers/svn-server
    2408cc74d12b: Pull complete 
    f454a8fbcebf: Pull complete 
    3c76ba5eee8a: Pull complete 
    Digest: sha256:e97746b18bf7eddbfc5024221212ceb18436addc59adc711a3b13f29fe0dce2a
    Status: Downloaded newer image for garethflowers/svn-server:latest
    docker.io/garethflowers/svn-server:latest
    

    查看images

    [root@localhost ~]# docker images
    REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
    garethflowers/svn-server                 latest              2a8481254cd2        6 months ago        14.7MB
    

    启动容器

    #先创建宿主机的数据存储目录
    [root@localhost ~]# mkdir /usr/local/data
    docker run --restart always --name svn -d -v /usr/local/dev/svn/repo:/var/opt/svn -p 3690:3690 garethflowers/svn-server
    #启动容器
    [root@localhost ~]# docker run --restart always --name svn -d -v /usr/local/data/:/var/opt/svn -p 3690:3690 garethflowers/svn-server
    8a9304411bf397bcadcbf965eace9ab3db7636480d7f83a87e3ae838e5b4e68f
    
    • --restart always:代表自启动
    • --name svn:代表容器名是svn
    • -d:后台启动
    • -v /usr/local/data/:/var/opt/svn:挂载数据目录
    • -p 3690:3690:将容器内部3690映射到宿主机3690

      查看容器

    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS                   PORTS                                            NAMES
    8a9304411bf3        garethflowers/svn-server                               "/usr/bin/svnserve -…"   2 minutes ago       Up 2 minutes (healthy)   0.0.0.0:3690->3690/tcp                           svn
    

    进入容器内部,进行相关配置

    登录容器

    [root@localhost ~]# docker exec -it svn sh
    

    创建名为test的svn资源仓库

    /var/opt/svn # svnadmin create test
    

    查看目录结构

    /var/opt/svn/test # ls /var/opt/svn/test/
    README.txt  conf        db          format      hooks       locks
    

    配置修改

    进入刚刚创建的test资源仓库

    /var/opt/svn #  cd /var/opt/svn/test/conf
    /var/opt/svn/test/conf #
    

    基础配置修改

    /var/opt/svn/test/conf # vi svnserve.conf
    /var/opt/svn/test/conf # cat svnserve.conf |grep -rn -v ^#
    
    19:anon-access = none
    20:auth-access = write
    27:password-db = passwd
    36:authz-db = authz
    52:realm = test
    
    #配置详解
    anon-access = none             # 匿名用户不可读写,也可设置为只读 read
    auth-access = write            # 授权用户可写
    password-db = passwd           # 密码文件路径,相对于当前目录
    authz-db = authz               # 访问控制文件
    realm = /var/opt/svn/test       # 认证命名空间,会在认证提示界面显示,并作为凭证缓存的关键字,可以写仓库名称比如test
    

    权限文件修改

    密码文件修改

    /var/opt/svn/test/conf # vi passwd
    [users]
    # harry = harryssecret
    # sally = sallyssecret
    admin = test123456
    

    鉴权文件修改

    /var/opt/svn/test/conf # vi authz
    [groups]
    admin = admin   #前面是用户组admin,=后面的为用户admin
    
    [test:/]
    @admin = rw  #表示对test根目录有读写权限
    
    [test:/test1]
    @admin = rw  #表示对test目录下的test1有读写权限
    

    重启容器

    /var/opt/svn/test # exit
    [root@localhost ~]# docker restart svn
    svn
    

    安装客户端测试

    Windows验证

    tortoisesvn官网:https://tortoisesvn.net/downloads.html
    image.png

    image.png
    image.png

    自定义文件路径
    image.png
    image.png
    image.png

    输入设置的账号密码
    image.png

    image.png

    Liunx验证

    安装svn工具

    [root@localhost ~]# yum -y install svn
    

    查看资源仓库

    [root@localhost ~]# svn checkout svn://192.168.6.231:3690/test/test1
    Authentication realm: <svn://192.168.6.231:3690> test
    Password for 'root': 
    Authentication realm: <svn://192.168.6.231:3690> test
    Username: admin
    Password for 'admin': 
    
    -----------------------------------------------------------------------
    ATTENTION!  Your password for authentication realm:
    
       <svn://192.168.6.231:3690> test
    
    can only be stored to disk unencrypted!  You are advised to configure
    your system so that Subversion can store passwords encrypted, if
    possible.  See the documentation for details.
    
    You can avoid future appearances of this warning by setting the value
    of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
    '/root/.subversion/servers'.
    -----------------------------------------------------------------------
    Store password unencrypted (yes/no)? yes
    Checked out revision 1.
    

    码字不易。如果文章对您有希望的话,请三连支持一波。
    如有问题,欢迎留言,一起探讨,感谢。
    也可关注早九晚十二微信公众号,看到留言后会第一时间回复。

相关文章
|
5月前
|
Windows
Windows下版本控制器(SVN)-启动服务器端程序
Windows下版本控制器(SVN)-启动服务器端程序
186 4
|
5月前
|
Java Linux 开发工具
Linux下版本控制器(SVN) -命令行客户端
Linux下版本控制器(SVN) -命令行客户端
159 4
|
5月前
|
Linux
Linux下版本控制器(SVN) -服务器端环境搭建步骤
Linux下版本控制器(SVN) -服务器端环境搭建步骤
268 0
Linux下版本控制器(SVN) -服务器端环境搭建步骤
|
7月前
|
Ubuntu 关系型数据库 MySQL
在Ubuntu系统的Docker上安装MySQL的方法
以上的步骤就是在Ubuntu系统的Docker上安装MySQL的详细方法,希望对你有所帮助!
801 12
|
8月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
582 30
|
敏捷开发 存储 开发工具
版本控制系统的选择:Git与SVN的比较
【8月更文挑战第14天】Git和SVN都是优秀的版本控制系统,它们各自具有独特的优势和适用场景。在选择版本控制系统时,需要根据具体的项目需求、团队特点和开发模式来综合考量。对于需要分布式团队协作、高效处理大型项目或采用敏捷开发模式的团队来说,Git是一个更好的选择。而对于传统团队、集中式开发或简单项目来说,SVN可能更加合适。无论选择哪种版本控制系统,都应该充分利用其提供的工具和功能来提高代码质量和开发效率。
|
8月前
|
Ubuntu Linux Docker
如何在Ubuntu 20.04系统中安装Docker
安装 Docker 引擎的步骤如下:首先更新系统包索引 (`sudo apt update`),安装必要依赖包 (`apt-transport-https` 等),添加 Docker 官方 GPG 密钥及 APT 仓库。接着再次更新包索引并安装 Docker 引擎及相关工具 (`docker-ce` 等)。最后启动 Docker 服务并设置开机自启,通过 `docker --version` 和运行测试容器 (`sudo docker run hello-world`) 验证安装是否成功。
2915 0
|
11月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
351 3
|
人工智能 数据安全/隐私保护 虚拟化
Docker部署MaxKB详细步骤(window系统)
这篇文章详细介绍了如何在Windows系统上使用Docker部署MaxKB,并提供了从安装Docker到运行MaxKB容器的详细步骤,以及如何通过浏览器访问和配置MaxKB来使用ollama和llama3模型进行问答。
3364 1
Docker部署MaxKB详细步骤(window系统)
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
911 2