凌峰创科服务平台

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

在CentOS系统上搭建SVN服务器是一个常见的需求,Subversion(SVN)是一款开源的版本控制系统,能够有效管理文件和目录的变更历史,以下将详细介绍在CentOS 7系统中通过Apache和SVN模块搭建SVN服务器的完整步骤,包括安装配置、用户权限管理及安全设置等内容。

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

安装必要软件包

首先需要安装SVN服务器软件包以及Apache服务器及其SVN模块,打开终端,执行以下命令更新系统软件包并安装所需组件:

sudo yum update -y
sudo yum install subversion mod_dav_svn -y

subversion是SVN的核心程序,mod_dav_svn是Apache服务器的SVN模块,用于支持通过HTTP协议访问SVN仓库,安装完成后,可以通过svnserve --version命令验证SVN是否安装成功。

创建SVN仓库

SVN仓库用于存储版本控制的数据,可以选择在/var/svn目录下创建仓库,例如创建一个名为project_repo的仓库:

sudo mkdir -p /var/svn/project_repo
sudo svnadmin create /var/svn/project_repo

创建完成后,仓库目录会包含多个子目录和文件,如conf(配置文件)、db(数据文件)、hooks(钩子脚本)等,需要修改仓库所有者为Apache进程用户,以确保Apache有读写权限:

CentOS如何快速搭建SVN服务器?-图2
(图片来源网络,侵删)
sudo chown -R apache:apache /var/svn/project_repo

配置Apache支持SVN

接下来需要配置Apache服务器以支持SVN访问,编辑Apache的SVN配置文件/etc/httpd/conf.d/subversion.conf,如果文件不存在则新建,添加以下内容:

<Location /svn>
    DAV svn
    SVNParentPath /var/svn
    AuthType Basic
    AuthName "SVN Repository"
    AuthUserFile /etc/svn-users
    Require valid-user
</Location>

上述配置中,SVNParentPath指定SVN仓库的父目录,AuthUserFile定义用户认证文件路径,需要创建用户认证文件并添加用户:

sudo htpasswd -cm /etc/svn-users admin

执行后会提示输入密码,-c参数表示创建新文件(仅第一次使用),后续添加用户时需去掉-c,例如添加第二个用户:

sudo htpasswd -m /etc/svn-users user1

配置SVN仓库权限

SVN仓库的权限通过conf/svnserve.confconf/authz文件控制,首先编辑仓库的svnserve.conf文件(位于/var/svn/project_repo/conf/),启用认证和权限控制:

[general]
anon-access = none
auth-access = write
password-db = /etc/svn-users
authz-db = /etc/svn-authz

anon-access = none表示禁止匿名访问,auth-access = write表示认证用户可读写,password-db指定用户密码文件(与Apache配置一致),authz-db指定权限控制文件。

然后创建权限控制文件/etc/svn-authz,定义用户和组的访问权限。

[groups]
admin = admin
developers = user1, user2
[/]
@admin = rw
* = r
[project_repo:/trunk]
@developers = rw

上述配置中,[groups]定义用户组,[/]表示仓库根目录权限,@admin组成员有读写权限,其他用户只读;[project_repo:/trunk]定义trunk目录下developers组成员有读写权限。

启动并配置服务

启动Apache服务并设置开机自启:

sudo systemctl start httpd
sudo systemctl enable httpd

检查Apache是否正常监听80端口,可通过netstat -tuln | grep 80验证,如果需要通过SVN协议(默认3690端口)访问,还需启动svnserve服务:

sudo svnserve -d -r /var/svn

-d表示后台运行,-r指定仓库根目录,建议将svnserve设置为系统服务,创建/etc/systemd/system/svnserve.service文件:

[Unit]
Description=Subversion Daemon
After=network.target
[Service]
Type=forking
User=apache
Group=apache
ExecStart=/usr/bin/svnserve -d -r /var/svn
Restart=on-abort
[Install]
WantedBy=multi-user.target

然后执行sudo systemctl enable svnserve && sudo systemctl start svnserve启用服务。

防火墙与SELinux配置

确保防火墙允许HTTP和SVN端口访问:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-port=3690/tcp
sudo firewall-cmd --reload

如果启用SELinux,需要设置相应上下文:

sudo semanage port -a -t http_port_t -p tcp 3690
sudo chcon -R -t httpd_sys_content_t /var/svn

测试SVN仓库

使用SVN客户端测试访问,例如通过HTTP协议检出仓库:

svn co http://localhost/svn/project_repo

输入配置的用户名和密码,若成功检出则表示搭建完成,也可通过svn list命令远程列出仓库内容。

相关问答FAQs

问题1:如何修改SVN仓库的访问密码?
答:若需修改用户密码,使用htpasswd命令重新设置密码文件,例如修改用户admin的密码:

sudo htpasswd -m /etc/svn-users admin

执行后会提示输入新密码,修改后,Apache和SVN协议认证会自动生效,无需重启服务。

问题2:如何限制SVN仓库的磁盘空间使用?
答:可通过Linux文件系统配额限制仓库磁盘空间,首先安装quota工具并启用分区配额,例如对/var/svn分区设置配额:

sudo quotacheck -ug /var/svn
sudo setquota -u apache 0 10G 0 2G /var/svn

上述命令限制apache用户在/var/svn分区最多使用10GB硬限制和2GB软限制,也可通过SVN的pre-commit钩子脚本在提交时检查仓库大小并拒绝超限提交。

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