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

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

  •  座右铭:选择时尽心,行动时尽力,坚持时无怨,结束时无悔。

  • 个人公众号:早九晚十二,欢迎大家留言交流。

  • 个人主页:早九晚十二​​​​​​

请添加图片描述

认识SVN

在这里插入图片描述

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
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
自定义文件路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输入设置的账号密码
在这里插入图片描述

在这里插入图片描述

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.

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

猜你喜欢

转载自blog.csdn.net/tootsy_you/article/details/128703598