美文网首页
CentOS下快速搭建SVN服务器流程

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

作者: kivinsae | 来源:发表于2019-06-27 16:34 被阅读0次

    一、前言

    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仓库,并和朋友或者同事一起进行项目的开发和持续集成了。

    相关文章

      网友评论

          本文标题:CentOS下快速搭建SVN服务器流程

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