跳转至

03-svn服务部署

SVN是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个固态的跨平台的开源的版本控制系统。SVN版本管理工具管理者随时间改变的各种数据。这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定的更新历史记录。

SVN服务实战应用指南一、什么是SVN(subversion)?
二、SVN与git的区别
三、SVN版本系统逻辑架构原理图
四、安装配置SVN服务客户端的操作此处就不介绍了,我们可以通过在服务器上使用svn co svn://127.0.0.1/test 进行测试

什么是SVN

SVN是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个固态的跨平台的开源的版本控制系统。SVN版本管理工具管理者随时间改变的各种数据。这些数据放置在一个中央资料档案库(repository)中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定的更新历史记录。

为什么会有SVN这样一个项目?

官方解释:为了接管CVS的用户基础,确切的说,我们写了一个新的版本控制系统,它和CVS很相似,但是它修正了以前CVS所没有解决的许多问题。
SVN时一个非常通用的软件系统,它常被用来管理程序 源码,但是他也可以管理任何类似的文件,如文本、视频,图片等等。

SVN相关站点:

Subversion官网:
http://subversion.tigris.org/
http://subversion.apache.org/

svn客户端:http://tortoisesvn.net/
svn中文网站:http://www.iusesvn.com/
中文常见问题解答:FQA:http://subversion.apache.org/faq.zh.html
官方手册:http://svnbook.red-bean.com/

SVN与git的区别

SVN版本控制系统

SVN版本控制系统时集中式的数据管理,存在一个中央版本库,所有开发人员本地开发所使用的代码都是来自于这个版本库,提交了代码也都必须提交到这个中央版本库。

SVN版本控制系统工作流程如下:

  • 1.在中央库上创建或从主干复制一个分支。
  • \2. 从中央库check out下这个分支的代码。
  • \3. 增加自己的代码文件,修改现存的代码或删除代码文件。
  • \4. Commit代码。假设有人在刚刚的分支上提交了代码,你就会被提示代码过期。
  • 你得先up你的代码后再提交。Up代码的时候如果出现冲突,需要解决冲突后再进行提交

缺点:

  • 当无法连接到中央版本库的环境下,你无法提交代码,将代码加入版本控制;
  • 你无法查看代码的历史版本以及版本的变化过程。提交到版本控制系统中的代码我们都默认通过自测可运行的,如果某个模块的代码比较复杂,不能短时间内实现可测试的功能,那么你需要等很长的时间才能提交自己的代码,由于代码库集中管理,因为,需要对中央版本库的存储做备份。这点分布式的版本控制系统要好一些。Svn的备份要备份所有代码数据以及所有更改的版本记录。

git分布式版本控制

Git是由Linus开发的,所以很自然的git个Linux文件系统结合的比较紧密,以至于在Windows上你必须使用cygwin才能使其完美工作。

那git凭什么叫做分布式的版本控制系统呢?还是从模式讲起。

Git中没有了中央版本库的说法了,但是为了开发小组的代码共享,从某种程度上说本地的仓库和远程的仓库在身份上是等价的,没有主从之分。

如果你的项目是闭源项目,或者你习惯于以往的集中式的管理模式的的话,那么在git下你也可以像SVN那么工作,知识流程中可能增加一些步骤。

  • 1.你本地创建一个git库,并将其add到远程git库中
  • \2. 你在本地添加或者删除文件,然互commit。当然commit操作都是提交到本地的git库中了(其实是提交到git目录下的object目录中去了)
  • 3.将本地git库的分支push到远程git库的分支,如果这个时候远程git库中已经有别人push过,那么远程git库将不允许你push,这个时候你需要先pull,然后如果有冲突,处理好冲突,commit到本地git库后,再push到远程git库。

运维人员掌握版本管理

对于版本管理系统,运维人员需要掌握的技术点:

  • 1.安装,部署,维护,故障。
  • 2.简单的使用,很多公司都是由开发来管理,包括建立账户和添加删除账号。
  • 3.对于版本控制系统,运维人员相当于开发商,开发人员是业主,运维搭建的系统为开发人员服务。

Svn服务端运行方式

svn服务常见的运行访问方式有3种:

1、独立服务器
访问地址如:svn://svn.etiantian.org/sadoc);

2、借助apache等http服务
访问地址如:http://svn.etiantian.org/sadoc);
       a.单独安装apache+svn(不要用)。
       b.CSVN(apache+svn)是一个单独的整合的软件,带web界面管理的SVN软件

3、本地直接访问(例如:file:///root/svndata/sadoc)

SVN客户端访问方式

SVN客户端可以通过多种方式访问服务器,例如:本地磁盘访问,或者各种各样不同的网络协议访问,但一个版本库地址永远都是URL,URL反映了访问方法。

访问方式 说明 file:// 直接通过本地磁盘或者网络磁盘访问版本库 http:// 通过WebDAV协议访问支持Subersion的Apache服务器 https:// 与http://相似,但是使用SSL加密访问 svn:// 通过TCP/IP自定义协议访问svnserver服务器 svn+ssh:// 通过认证并加密的TCP/IP自定义协议访问svnserver服务器 三、SVN版本系统逻辑架构原理图

image_1btbo676md1d1vsqh7j17p91so39.png-268.5kB

安装配置SVN服务

环境准备

rm -f /etc/yum.repos.d/*.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum repolist

安装SVN

安装svn软件包

[root@tomcat ~]# yum install subversion vim tree -y
[root@tomcat ~]# rpm -qa subversion
subversion-1.6.11-15.el6_7.x86_64
补充:yum安装rpm包安装后本地不清除的方法
[root@tomcat ~]# grep keepcache /etc/yum.conf                       
keepcache=1

配置并启动SVN

建立SVN版本库数据存储根目录(svndata)及用户,密码权限目录(svnpasswd)

[root@tomcat ~]# mkdir -p /data/
[root@tomcat ~]# mkdir -p /data/svndata  数据存储根目录
[root@tomcat ~]# mkdir -p /data/svnpasswd 用户密码权限目录

启动SVN服务指定访问的SVN根目录

[root@tomcat ~]# svnserve -d -r /data/svndata  

查看SVN进程

[root@tomcat ~]# ps -ef |grep svn
root       3008      1  0 00:32 ?        00:00:00 svnserve -d -r /root/svndata/
root       3010   2919  0 00:32 pts/0    00:00:00 grep svn

建立项目版本库

创建一个新的SVN项目test其实类似test这样的项目可以创建多个,每个项目对应不同的代码,这里只是以创建一个项目为例。

[root@tomcat ~]# svnadmin create /data/svndata/test
[root@tomcat ~]# tree /data/svndata/test
/root/svndata/sadoc/
|-- README.txt
|-- conf
|   |-- authz
|   |-- passwd
|   `-- svnserve.conf
|-- db
|   |-- current
|   |-- format
|   |-- fs-type
|   |-- fsfs.conf
|   |-- min-unpacked-rev
|   |-- rep-cache.db
|   |-- revprops
|   |   `-- 0
|   |       `-- 0
|   |-- revs
|   |   `-- 0
|   |       `-- 0
|   |-- transactions
|   |-- txn-current
|   |-- txn-current-lock
|   |-- txn-protorevs
|   |-- uuid
|   `-- write-lock
|-- format
|-- hooks
|   |-- post-commit.tmpl
|   |-- post-lock.tmpl
|   |-- post-revprop-change.tmpl
|   |-- post-unlock.tmpl
|   |-- pre-commit.tmpl
|   |-- pre-lock.tmpl
|   |-- pre-revprop-change.tmpl
|   |-- pre-unlock.tmpl
|   `-- start-commit.tmpl
`-- locks
    |-- db-logs.lock
    `-- db.lock
10 directories, 28 files

SVN服务配置本地认证

配置文件及权限

[root@tomcat ~]# cd /data/svndata/test/conf
[root@tomcat conf]# ll
total 12
-rw-r--r-- 1 root root 1080 Feb 23 16:11 authz
-rw-r--r-- 1 root root  309 Feb 23 16:11 passwd
-rw-r--r-- 1 root root 2279 Feb 23 16:11 svnserve.conf
[root@tomcat conf]# cp svnserve.conf svnserve.conf_bak  操作前备份
[root@tomcat conf]# vim svnserve.conf
anon-access = none
auth-access = write
password-db = /data/svnpasswd/passwd
authz-db = /data/svnpasswd/authz   #为了方便统一管理我们把用户的权限和密码文件存放在一个目录下

配置解析:
anon-access= 定义非授权用户(匿名用户)的访问权限,有三种方式: none 、 read 、 write ,设置为 none 限制访问, read 为只读, write 为具有读写权限,默认为 read 。

auth-access= 定义授权用户的访问权限,有三种方式: none 、 read 、 write ,设置为 none 限制访问, read 为只读, write 为具有读写权限,默认为 write 。

password-db= 定义保存用户名和密码的文件名称,这里为 passwd ,和该文件位于同一目录。

authz-db= 定义保存授权信息的文件名称,这里为 authz ,和该文件位于同一目录。 

把密码文件模板拷贝到相关目录

[root@tomcat conf]# cp passwd authz /data/svnpasswd/
[root@linux-node82 conf]# ls -l /data/svnpasswd/
total 8
-rw-r--r-- 1 root root 1080 Dec 30 17:29 authz
-rw-r--r-- 1 root root  309 Dec 30 17:29 passwd

因为SVN默认都是明文密码,为了安全起见加上权限

[root@tomcat conf]# cd /data/svnpasswd/
[root@tomcat svnpasswd]# chmod 700 *
[root@tomcat svnpasswd]# ll
total 8
-rwx------ 1 root root 1080 Mar 31 00:51 authz
-rwx------ 1 root root  309 Mar 31 00:51 passwd

用户及设置权限

[1.创建用户]
[root@tomcat svnpasswd]# cat passwd 
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
cyh = 123456
test = 123..
itcast = 123456

[2.配置权限]
[root@tomcat svnpasswd]# cat authz 
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
###  - a single user,
###  - a group of users defined in a special [groups] section,
###  - an alias defined in a special [aliases] section,
###  - all authenticated users, using the '$authenticated' token,
###  - only anonymous users, using the '$anonymous' token,
###  - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
[test:/]
cyh = rw
itcast = rw
test = rw

重启SVN命令

[root@tomcat svnpasswd]# svnserve -d -r /data/svndata/

客户端的操作此处就不介绍了,我们可以通过在服务器上使用svn co svn://127.0.0.1/test 进行测试

SVN服务配置HTTP认证

Centos7安装SVN+HTTP

https://blog.csdn.net/u013305864/article/details/52386747

安装httpd

安装httpd

yum -y install httpd

安装apache的svn操作模块

yum -y install mod_dav_svn
yum -y install openssl openssl-devel

配置httpd

配置httpd的配置文件

[root@linux-node82 conf]# vim /etc/httpd/conf/httpd.conf
## 最后一行添加如下内容
<Location /svn>
            DAV svn
            SVNParentPath  /data/svndata/
            # Authentication: Basic
            AuthName "Subversion repository"
            AuthType Basic
            SVNListParentPath On
            AuthUserFile /etc/httpd/svn-auth.htpasswd
            AuthzSVNAccessFile /data/svnpasswd/authz
            Require valid-user

            # Authorization: Authenticated users only
#            <LimitExcept GET PROPFIND OPTIONS REPORT>
#                Require valid-user
#            </LimitExcept>
</Location>

将apache用户对svn目录授权

chown apache.apache -R /data/svndata

复制模块文件

cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.conf

启动httpd

systemctl start httpd
systemctl enable httpd

创建账号

htpasswd -m /etc/httpd/svn-auth.htpasswd admin    密码 123456
htpasswd -m /etc/httpd/svn-auth.htpasswd test
htpasswd -m /etc/httpd/svn-auth.htpasswd test01

授权账号权限

[root@linux-node82 ~]# vim /data/svnpasswd/authz
[test:/]
admin = rw
test = r

配置目录权限

必须得设置目录权限,不然会报权限拒绝的错误

chown -R apache.apache /data/svndata

web访问(读写用户admin)

记得清理浏览器数据

打开浏览器访问: http://192.168.56.82:8080/svn/test/

image-20211230175812449

查看svn代码库里面的内容

image-20211230175820014

web访问(读用户test)

记得清理浏览器数据

打开浏览器访问: http://192.168.56.82:8080/svn/test/

image-20211231102456528

image-20211231102506926

web访问(无权限用户test01)

记得清理浏览器数据

打开浏览器访问: http://192.168.56.82:8080/svn/test/

image-20211231102552955

image-20211231103357601

SVN服务配置LDAP认证

apache+svn+openldap 整合实现认证

https://blog.csdn.net/wanglei_storage/article/details/52663328

环境清理

如果配置啦以上的HTTP认证实验的,需将以下配置文件的配置进行注释

[root@linux-node82 ~]# vim /etc/httpd/conf/httpd.conf
#<Location /svn/>
#            DAV svn
#            SVNParentPath  /data/svndata/
#            # Authentication: Basic
#            AuthName "Subversion repository"
#            AuthType Basic
#            SVNListParentPath On
#            AuthUserFile /etc/httpd/svn-auth.htpasswd
#            AuthzSVNAccessFile /data/svnpasswd/authz
#            Require valid-user
#</Location>

重启httpd服务

systemctl restart httpd

安装httpd

下面安装的mod_dav_svn包这边介绍下: Apache httpd module for Subversion server

yum -y install mod_dav_svn httpd mod_ldap

配置https

安装完成之后在 /etc/httpd/conf.modules.d 目录下会生成一个叫做 10-subversion.conf 的模板

1、拷贝subversion.conf模板

cp /etc/httpd/conf.modules.d/10-subversion.conf /etc/httpd/conf.d/subversion.conf

2、authz_svn和dav_svn模块 打开subversion.conf文件后默认有加载authz_svn和dav_svn模块,模块的路径为 /etc/httpd/modules

[root@linux-node82 ~]# ls -l  /etc/httpd/modules/*svn*
-rwxr-xr-x 1 root root  19504 Apr 11  2018 /etc/httpd/modules/mod_authz_svn.so
-rwxr-xr-x 1 root root 181344 Apr 11  2018 /etc/httpd/modules/mod_dav_svn.so

3、配置subversion.conf

下列配置中有几点做下说明: 1)SVNParentPath:svn服务路径 2)AuthzSVNAccessFile:svn的权限配置文件 3)AuthLDAPURL:搭建的openldap url地址 4)AuthLDAPBindDN:配置 openldap的cn、dc 5)AuthLDAPBindPassword:配置openldap的管理员密码

[root@linux-node82 ~]# vim /etc/httpd/conf.d/subversion.conf

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
LoadModule dontdothat_module  modules/mod_dontdothat.so

<Location /svn/>
    DAV svn
    SVNParentPath /data/svndata/
    SVNListParentPath On
    AuthzSVNAccessFile /data/svnpasswd/authz

    AuthBasicProvider ldap
    AuthType Basic
    AuthName "Subversion repository"
    AuthLDAPURL "ldap://192.168.56.85:389/dc=bkce,dc=com?uid?sub?(objectClass=*)"
    AuthLDAPBindDN "cn=admin,dc=bkce,dc=com"
    AuthLDAPBindPassword "123456"
    Require valid-user
</Location>

启动httpd

systemctl restart httpd.service
systemctl enable httpd.service

如有报错:Unknown Authn provider: ldap
解决:yum -y install mod_ldap

授权账号权限

授权openldap用户相关使用权限

[root@linux-node82 ~]# vim /data/svnpasswd/authz
[test:/]
test01 = rw
test02 = r

配置目录权限

必须得设置目录权限,不然会报权限拒绝的错误

chown -R apache.apache /data/svndata

配置认证权限

设置认证文件apache用户具有读的权限,不然没有获取认证信息

chown apache.apache /data/svnpasswd/authz 

web访问(读写用户test01)

记得清理浏览器数据

打开浏览器访问: http://192.168.56.82:8080/svn/test/

image-20211231142553878

image-20211231142604134

web访问(读用户test02)

记得清理浏览器数据

打开浏览器访问: http://192.168.56.82:8080/svn/test/

image-20211231142651306

image-20211231142659232

web访问(无权限用户test03)

记得清理浏览器数据

打开浏览器访问: http://192.168.56.82:8080/svn/test/

image-20211231142718902

image-20211231142728043

SVN客户端测试

SVN客户端测试(Mac)

使用svn客户端同步svn数据

客户端创建svn-test-ldap目录

安装snailSVN客户端(MAC系统)

image-20211231143121541

添加工作副本

image-20211231143210733

设置检出的配置

image-20211231143310611

设置账户密码

image-20211231143329948

账户密码验证通过后开始进行检出

image-20211231143357398

检出代码完毕后,也可以设置上传代码,但是必须要有读写权限

image-20211231143528324

上传代码成功

image-20211231143542039

SVN客户端测试(Linux)

我们可以使用linux centos作为客户端

## 初始化文件
yum install subversion vim tree -y
mkdir -p test
svn co http://192.168.1.110/svn/test/ ./test/ --username zhangsan --password 123456


## 增加文件
echo "zhangsan" >zhangsan.txt
echo "lisi" >lisi.txt
svn add zhangsan.txt 
svn add lisi.txt 
svn commit -m "add"

## 删除文件
svn delete 1.sh 
svn commit -m "del"

## 修改文件
vim 111.txt 
svn commit -m "change"

## 查询
svn log http://192.168.1.110/svn/test/