CentOS下快速搭建SVN服务器流程

栏目: 服务器 · 发布时间: 6年前

内容简介:SVN服务器在商业生产中有非常大的作用,虽然目前代码类的项目的版本基本已经使用Git作为持续集成的平台,但是依然有很多商业项目内部的部分资源通过svn进行版本控制和管理,尤其是美术资源类的项目,svn由于相对简单使用收到了很多人的欢迎。因此本文将简单描述在一台Linux服务器中搭建一个svn环境的方法,目的是让对服务器系统不太熟悉的开发人员(例如美术、项目经理等)也可以快速搭建一台svn服务器。后续如果有时间会更新关于svn开启ldap登录的方法。考虑到本文阅读者可能有对服务器和linux软件部署不太熟悉的

SVN服务器在商业生产中有非常大的作用,虽然目前代码类的项目的版本基本已经使用Git作为持续集成的平台,但是依然有很多商业项目内部的部分资源通过svn进行版本控制和管理,尤其是美术资源类的项目,svn由于相对简单使用收到了很多人的欢迎。因此本文将简单描述在一台 Linux 服务器中搭建一个svn环境的方法,目的是让对服务器系统不太熟悉的开发人员(例如美术、项目经理等)也可以快速搭建一台svn服务器。后续如果有时间会更新关于svn开启ldap登录的方法。

二、准备工作

考虑到本文阅读者可能有对服务器和linux软件部署不太熟悉的人,因为还是大致介绍一下Linux系统和Linux软件的安装思路。 Linux系统是一个一切皆文件的系统,任何系统内的组成,包括软件和硬件还有一些微处理器,本质上在linux系统中都可以通过类似于文件的性质进行编辑和处理。因此当前主流的互联网、游戏、金融公司都采用了Linux系统作为后端的服务运行系统。因为在这样的系统下权限的控制、文件的管理、配置的更新、错误的排查都能做到百分百的权利握在开发者的手中,甚至对于高阶的开发公司,改写系统内核也是必要的操作。日常使用的话基本用命令行 工具 操作。

当然对于本文的svn服务器部署,事情不需要这么复杂。但是使用Linux系统前最好还是对其有个粗略的了解比较好。

1、系统环境更新

对于一个全新的CentOS系统我们最好对齐的系统组件进行一次更新和升级。在CentOS中作为软件安装和版本管理的工作叫做yum,类比来说就是App store一样的东西。我们先更新系统:

[root@fangwei-physics ~]# yum update
[root@fangwei-physics ~]# yum upgrade
复制代码

我们可以搜一下yum仓库中有没有svn服务端:

[root@fangwei-physics ~]# yum search subversion
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
================================================================================================================================= N/S matched: subversion =================================================================================================================================
hgsubversion.noarch : Mercurial extension for working with Subversion repositories
subversion-devel.i686 : Development package for the Subversion libraries
subversion-devel.x86_64 : Development package for the Subversion libraries
subversion-gnome.i686 : GNOME Keyring support for Subversion
subversion-gnome.x86_64 : GNOME Keyring support for Subversion
subversion-javahl.i686 : JNI bindings to the Subversion libraries
subversion-javahl.x86_64 : JNI bindings to the Subversion libraries
subversion-kde.i686 : KDE Wallet support for Subversion
subversion-kde.x86_64 : KDE Wallet support for Subversion
subversion-libs.i686 : Libraries for Subversion Version Control system
subversion-libs.x86_64 : Libraries for Subversion Version Control system
subversion-perl.i686 : Perl bindings to the Subversion libraries
subversion-perl.x86_64 : Perl bindings to the Subversion libraries
subversion-python.x86_64 : Python bindings for Subversion Version Control system
subversion-ruby.i686 : Ruby bindings to the Subversion libraries
subversion-ruby.x86_64 : Ruby bindings to the Subversion libraries
subversion-tools.x86_64 : Supplementary tools for Subversion
git-svn.x86_64 : Git tools for importing Subversion repositories
hgsvn.noarch : A set of scripts to work locally on subversion checkouts using mercurial
mod_dav_svn.x86_64 : Apache httpd module for Subversion server
pysvn.x86_64 : Pythonic style bindings for Subversion
python-subvertpy.x86_64 : Python bindings for Subversion
subversion.i686 : A Modern Concurrent Version Control System
subversion.x86_64 : A Modern Concurrent Version Control System
svn2cl.noarch : Create a ChangeLog from a Subversion log
svnmailer.noarch : Tool to post subversion repository commit information
texlive-svn-prov.noarch : Subversion variants of \Provides... macros
websvn.noarch : Online subversion repository browser

  名称和简介匹配 only,使用“search all”试试。
复制代码

2、软件安装

在上一节的内容中我们可以看到所有匹配的软件都在列表里面了,而我们需要安装的仅仅是subversion这个软件,而且yum的功能非常智能,在安装的过程中一般会自动安装一个软件需要的所有依赖包。所以我们直接安装subversion服务端:

[root@fangwei-physics ~]# yum install -y subversion
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
软件包 subversion-1.7.14-14.el7.x86_64 已安装并且是最新版本
无须任何处理

复制代码

此处由于本台服务器已经完成了SVN服务端的安全,因此无需任何处理,如果没有安装过的服务器由于 -y 参数的存在会自动完成软件的安装。

三、配置设定

SVN服务软件目前已经装在本台服务器中了,我们下一步需要做的就是服务器配置的设定。

1、创建仓库文件夹

首先我们要在服务器里面创建一个文件夹,用来作为服务器的仓库所在地址。注意此处有服务运行位置和子仓库位置的概念。例如我们在 /svn 下启动了svn服务,则svn的各个仓库都应该以文件夹的形式放在这个目录中。

我们本次配置使用 /svn 作为主目录,使用mkdir指令新建文件夹:

[root@fangwei-physics ~]# mkdir /svn
复制代码

然后再这个主目录中新建仓库文件夹,本次以kivinsae为例:

[root@fangwei-physics ~]# mkdir /svn/kivinsae
复制代码

然后对这个仓库进行svn初始化操作,这个步骤如果对git有所了解的话其实和 git init 差不多:

[root@fangwei-physics ~]# svnadmin create /svn/kivinsae
复制代码

到此为止,一个仓库文件夹的创建以及配置初始化已经完成了,接下来我们会对权限等配置进行说明。

2、权限和用户设置

进入仓库文件夹,我们会发现有一个conf文件夹,每个项目的配置文件默认就存放在这个文件夹中:

[root@fangwei-physics ~]# ls -la /svn/kivinsae/
总用量 8
drwxr-xr-x 6 root root  86 6月  25 10:58 .
drwxr-xr-x 3 root root  21 6月  25 10:58 ..
drwxr-xr-x 2 root root  54 6月  25 11:03 conf
drwxr-sr-x 6 root root 233 6月  25 10:58 db
-r--r--r-- 1 root root   2 6月  25 10:58 format
drwxr-xr-x 2 root root 231 6月  25 10:58 hooks
drwxr-xr-x 2 root root  41 6月  25 10:58 locks
-rw-r--r-- 1 root root 229 6月  25 10:58 README.txt

[root@fangwei-physics ~]# ls -la /svn/fangwei/conf/
总用量 12
drwxr-xr-x 2 root root   54 6月  25 11:03 .
drwxr-xr-x 6 root root   86 6月  25 10:58 ..
-rw-r--r-- 1 root root 1008 6月  25 11:03 authz
-rw-r--r-- 1 root root  328 6月  25 11:00 passwd
-rw-r--r-- 1 root root 3077 6月  25 11:00 svnserve.conf
复制代码

我们分别介绍各个文件的作用, authz 文件夹用于设定各个用户的权限,主要是读写权限的设定, passed 文件用于设置仓库的用户信息,在连接仓库或者 checkout仓库 的时候用户信息是连接需要用到的凭证; svnserver.conf 文件作为整个仓库的主要配置文件,设定了用户验证以及模块调用等基本设定和参数的信息。

我们首先来看一下 passwd 文件;

[root@fangwei-physics ~]# cat /svn/kivinsae/conf/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
fangwei = fangwei
复制代码

我们将本仓库所有用户的信息都写入user模块内,格式为 <username> = <password> ,每一位用户一条,依次设定即可

然后来看一下 authz 文件:

[root@fangwei-physics ~]# cat /svn/kivinsae/conf/authz
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
admin = fangwei

[kivinsae:/]
@admin = rw
* =
复制代码

这里重点说一下文件夹权限设定和group分组设定。在商业应用环境中,一个项目仓库经常会有几十上百人参与开发与跟进,这个时候用户的数量可能会非常的多,此时逐个设定用户权限无疑是一件非常蛋疼的时候,这个时候我们可以通过对所有用户进行分组来配置权限,只要在group模块中按照 <groupname> = <username1>,<username2>,<username3>... 这样的格式逐个添加用户组即可。

而在下面的文件夹权限中,首先要对模块进行命名,例如对于kivinsae这个项目仓库,如果要对整个仓库的所有文件应用权限,则模块名为 [kivinsae:/] ,一般值得注意的是,这类模块设定权限的时候一般都要加上 * = r 或者 * = ,分别意为非设定的用户只有只读权和非设定用户无任何权利。在group中我们设定了fangwei为admin用户,则在文件夹权限设定中,则使用 @<groupname> = <权限> 的格式设定权限。权限部分的话 r 为只读, w 为只写, rw 为读写。

最后我们来聊一聊 svnserve.conf 文件。

[root@fangwei-physics ~]# cat /svn/fangwei/conf/svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = Fangwei-Test-Repo
# force-username-case = none

[sasl]
# use-sasl = true
复制代码

一般默认如上开启即可,如果需要使用ldap登录验证,则需要讲use_sasl的注释去掉进行启用。

四、业务维护

在一切完成后,其实可以直接使用svnserve工具进行服务的启用,如下:

[root@fangwei-physics ~]# svnserve --daemon --root /svn
复制代码

--daemon 指通过守护模式运行, --root 则指向svn仓库主目录的位置。

但是直接通过进程进行运行存在其弊端,类似于不方便管理和开机启动设定比较麻烦等,所以一般来说我们推荐讲这类服务端应用写成systemd进程的形式:

[root@fangwei-physics ~]# vim /etc/systemd/system/svn.service
复制代码

记住此处systemd服务名不要用svnserve.service,会和原进程产生冲突。 svn.service 内容编辑如下:

[Unit]
Description=Subversion Server

[Service]
Type=forking
ExecStart=/usr/bin/svnserve -d -r /svn
ExecStop=/usr/bin/kill -9 $(pidof svnserve)
Restart=always

[Install]
WantedBy=default.target
复制代码

主要设定了ExecStart和ExecStop,确保每次都能正常启动服务。然后我们需要将这个service模块保存到systemd中:

[root@fangwei-physics ~]# systemd daemon-reload
复制代码

到这一步,我们基本就完成了svn服务软件的systemd化管理。之后我们只需要做两部工作:

1、把服务设置为开机启动

[root@fangwei-physics ~]# systemd enable svn.service
复制代码

2、启动服务

[root@fangwei-physics ~]# systemd start svn.service
复制代码

之后我们就能通过svn客户端来登录svn仓库,并和朋友或者同事一起进行项目的开发和持续集成了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spring Into HTML and CSS

Spring Into HTML and CSS

Molly E. Holzschlag / Addison-Wesley Professional / 2005-5-2 / USD 34.99

The fastest route to true HTML/CSS mastery! Need to build a web site? Or update one? Or just create some effective new web content? Maybe you just need to update your skills, do the job better. Welco......一起来看看 《Spring Into HTML and CSS》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码