凌峰创科服务平台

Linux如何快速搭建SVN服务器?

在Linux系统中搭建SVN(Subversion)服务器是许多团队进行版本控制管理的常见需求,SVN作为集中式版本控制工具,能够有效管理代码、文档等文件的变更历史,以下是详细的搭建步骤及配置说明,以CentOS 7系统为例,其他Linux发行版命令可能略有差异,但核心逻辑一致。

Linux如何快速搭建SVN服务器?-图1
(图片来源网络,侵删)

安装SVN服务

首先需要确保系统已更新至最新状态,然后通过yum包管理器安装SVN服务,打开终端,执行以下命令:

sudo yum update -y
sudo yum install subversion -y

安装完成后,通过svnserve --version命令验证是否安装成功,若显示版本信息则表示安装成功。

创建SVN仓库

SVN仓库用于存储版本数据,建议创建在专门目录下,如/var/svn,首先创建目录:

sudo mkdir -p /var/svn

使用svnadmin create命令创建仓库,例如创建一个名为project_repo的仓库:

Linux如何快速搭建SVN服务器?-图2
(图片来源网络,侵删)
sudo svnadmin create /var/svn/project_repo

创建后,进入仓库目录会看到confdbhookslocks等子目录,其中conf目录包含核心配置文件。

配置仓库访问权限

进入仓库的conf目录,修改三个关键配置文件:svnserve.confpasswdauthz

  1. 编辑svnserve.conf
    该文件是SVN服务的主配置文件,需启用匿名访问控制、用户认证和权限文件,使用以下命令打开文件:

    sudo vim /var/svn/project_repo/conf/svnserve.conf

    确保以下配置项未被注释且值正确:

    Linux如何快速搭建SVN服务器?-图3
    (图片来源网络,侵删)
    [general]
    anon-access = none          # 禁止匿名访问
    auth-access = write         # 允许认证用户读写
    password-db = passwd        # 密码文件路径
    authz-db = authz           # 权限文件路径
    realm = My SVN Repository   # 仓库认证域,可自定义
  2. 编辑passwd
    该文件用于存储用户名和密码,使用以下命令打开:

    sudo vim /var/svn/project_repo/conf/passwd

    按格式添加用户,

    [users]
    user1 = password1
    user2 = password2
  3. 编辑authz
    该文件用于配置用户和组的访问权限,支持路径级别的权限控制,打开文件:

    sudo vim /var/svn/project_repo/conf/authz

    示例配置如下:

    [groups]
    admin = user1
    developer = user2
    [/]
    @admin = rw
    user2 = r
    [project_repo:/trunk]
    @developer = rw

    上述配置表示:admin组对整个仓库有读写权限,user2只有读权限;developer组对trunk目录有读写权限。

配置SVN服务

SVN服务可通过svnserve守护进程运行,默认端口为3690,首先创建服务启动脚本,或直接使用命令行启动。

  1. 启动SVN服务
    在终端执行以下命令,指定仓库根目录和监听地址:

    sudo svnserve -d -r /var/svn

    参数说明:-d表示以守护进程模式运行,-r指定仓库根目录,此时访问路径为svn://IP地址/project_repo

  2. 设置开机自启
    若需服务开机自动启动,可创建systemd服务文件,创建/etc/systemd/system/svnserve.service如下:

    [Unit]
    Description=Subversion Protocol Daemon
    After=network.target
    [Service]
    Type=forking
    ExecStart=/usr/bin/svnserve -d -r /var/svn
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target

    保存后执行以下命令启用服务:

    sudo systemctl daemon-reload
    sudo systemctl enable svnserve
    sudo systemctl start svnserve

防火墙与SELinux配置

为确保SVN服务能被外部访问,需开放3690端口并配置SELinux策略。

  1. 开放防火墙端口

    sudo firewall-cmd --permanent --add-port=3690/tcp
    sudo firewall-cmd --reload
  2. 配置SELinux
    若SELinux处于启用状态,需设置SVN相关策略:

    sudo setsebool -P svnserve_can_network_connect on

客户端测试

使用SVN客户端工具(如TortoiseSVN或命令行)连接服务器,以命令行为例:

svn checkout svn://服务器IP地址/project_repo --username user1

输入密码后,若成功检出仓库内容,则表示搭建完成。

仓库维护与管理

  1. 备份仓库
    定期备份仓库数据,可通过svnadmin hotcopy命令创建热备份数据:

    sudo svnadmin hotcopy /var/svn/project_repo /backup/svn/project_repo_backup
  2. 修改配置后重启服务
    修改仓库配置后,需重启svnserve服务使配置生效:

    sudo systemctl restart svnserve

以下是SVN服务器搭建过程中常见问题及解答:

FAQs

  1. 问题:客户端连接SVN服务器时提示“Could not open the requested SVN filesystem”
    解答:通常是由于仓库权限配置错误或svnserve.conf文件格式问题导致,检查svnserve.confanon-accessauth-access是否正确设置,确认password-dbauthz-db路径无误,并确保配置文件无多余空格或特殊字符,检查仓库目录权限,确保运行svnserve的用户(如rootapache)有读写权限。

  2. 问题:如何为不同仓库配置不同的认证域?
    解答:在启动svnserve时,可通过--realm参数为每个仓库指定不同的认证域,若有两个仓库repo1repo2,分别启动服务时使用不同realm值:

    sudo svnserve -d -r /var/svn/repo1 --realm "Repo1 Realm"
    sudo svnserve -d -r /var/svn/repo2 --realm "Repo2 Realm"

    注意:不同仓库需使用不同的端口或进程运行,避免冲突,也可通过配置多个svnserve.service单元文件实现多仓库管理。

分享:
扫描分享到社交APP
上一篇
下一篇