在许多企业环境中,CentOS 6.5 以其稳定性和可靠性,依然是承载关键服务的经典选择,Subversion(SVN)作为一个成熟且功能强大的集中式版本控制系统,广泛用于代码和文档的版本管理,本文将详细介绍在 CentOS 6.5 系统上部署 SVN 服务器的完整流程,并结合 Apache HTTP 服务器,实现通过 HTTP 协议进行安全、便捷的访问。
准备工作与环境检查
在开始部署之前,请确保您具备以下条件:
- 系统权限:您需要拥有
root
权限或能够通过sudo
执行命令。 - 网络连接:服务器必须能够连接到互联网,以便从 YUM 仓库安装软件包。
- 系统更新:为了确保软件包的兼容性和安全性,建议先更新系统。
执行以下命令来更新系统到最新状态:
yum update -y
安装 SVN 及 Apache 模块
我们将通过 YUM 包管理器来安装 SVN 服务核心程序以及使其能与 Apache 协同工作的模块。
安装 Subversion 和 mod_dav_svn
subversion
是 SVN 的核心软件包,包含了服务器端和客户端工具。mod_dav_svn
是 Apache 的一个模块,它充当了 Apache 和 SVN 仓库之间的桥梁,使得可以通过 Web 协议访问仓库。yum install -y subversion mod_dav_svn
安装完成后,系统会自动处理模块之间的依赖关系,并将 mod_dav_svn.so
模块配置到 Apache 中。
创建 SVN 版本库
版本库是存储项目所有文件和历史记录的地方,我们将创建一个统一的目录来存放所有的 SVN 版本库。
创建主目录
选择一个合适的路径,/data/svn
,作为所有版本库的根目录。mkdir -p /data/svn
创建项目版本库
使用svnadmin
命令创建一个新的版本库,我们创建一个名为project1
的项目仓库。svnadmin create /data/svn/project1
执行后,
/data/svn/project1
目录下会生成一系列用于 SVN 管理的文件和文件夹,如conf
,db
,hooks
等。设置目录权限
为了让 Apache 进程(通常以apache
用户运行)能够读写版本库文件,我们需要修改目录的所有者。chown -R apache:apache /data/svn
配置 Apache 与访问权限
这是整个部署过程中的核心环节,涉及到用户认证和权限分配。
创建用户认证文件
我们使用htpasswd
工具创建一个用于存储用户名和密码的文件,首次创建时需使用-c
参数,后续添加用户时则不需要。# 创建第一个用户 user1 htpasswd -c /data/svn/conf/passwdfile user1 # 添加第二个用户 user2 htpasswd /data/svn/conf/passwdfile user2
系统会提示您为每个用户设置密码。
创建权限控制文件
创建一个authz
文件,用于精细化控制不同用户或用户组对各个版本库的访问权限(读 r / 写 w)。vim /data/svn/conf/authz
在文件中添加如下内容,这是一个典型的权限配置示例:
[groups] # 定义用户组 dev_team = user1, user2 test_team = user3 # 为 project1 仓库设置权限 [project1:/] # dev_team 组拥有读写权限 @dev_team = rw # test_team 组拥有只读权限 @test_team = r # 其他所有用户无任何权限 * = # 可以为其他仓库继续定义规则,[project2:/]
配置 Apache
为 Apache 创建一个专门的 SVN 配置文件,避免直接修改主配置文件。vim /etc/httpd/conf.d/subversion.conf
在该文件中添加以下配置:
<Location /svn> DAV svn # 指定 SVN 版本库的父目录 SVNParentPath /data/svn # 启用基本认证 AuthType Basic AuthName "SVN Repository Authorization" # 指定用户密码文件 AuthUserFile /data/svn/conf/passwdfile # 指定权限控制文件 AuthzSVNAccessFile /data/svn/conf/authz # 要求有效用户才能访问 Require valid-user </Location>
配置说明:
SVNParentPath
:指向存放所有版本库的父目录,这样配置后,访问http://<server_ip>/svn/project1
就会映射到/data/svn/project1
。AuthUserFile
:指向htpasswd
创建的密码文件。AuthzSVNAccessFile
:指向我们自定义的权限控制文件authz
。
启动服务并测试
启动 Apache 服务并设置开机自启
service httpd start chkconfig httpd on
配置防火墙
CentOS 6.5 默认使用iptables
作为防火墙,需要开放 80 端口(HTTP)。iptables -I INPUT -p tcp --dport 80 -j ACCEPT service iptables save service iptables restart
进行测试
在浏览器中访问http://<您的服务器IP地址>/svn/project1
,浏览器应该会弹出一个认证窗口,要求您输入用户名和密码,输入我们之前创建的user1
或user2
的凭据,成功后即可看到版本库的根目录(初始为空),您也可以使用 TortoiseSVN 等客户端工具进行checkout
操作,以验证读写权限是否按authz
文件配置生效。
至此,一个基于 CentOS 6.5 和 Apache 的 SVN 服务器已成功部署并配置完毕。
相关问答FAQs
Q1: 我在浏览器访问 SVN 地址时,输入了正确的用户名和密码,但仍然提示“403 Forbidden”错误,是什么原因?
A1: 这通常是权限配置问题导致的,请按以下步骤排查:
- 文件系统权限:检查
/data/svn
目录及其子目录的所有者是否为apache
用户(chown -R apache:apache /data/svn
),如果权限不正确,Apache 进程无法读取版本库。 :仔细检查 /data/svn/conf/authz
文件的语法,特别是用户组定义和权限规则部分,确保没有拼写错误或格式问题,检查您登录的用户是否在该版本库的路径下被授予了至少r
(读)权限。- SELinux:SELinux 处于
Enforcing
模式,它可能会阻止 Apache 访问非标准目录,您可以临时将其设置为Permissive
模式(setenforce 0
)来测试是否为此原因,如果是,需要配置 SELinux 策略允许httpd
访问/data/svn
目录。
Q2: 我能否在一台服务器上同时部署多个独立的 SVN 项目,并为它们配置不同的访问权限?
A2: 当然可以,这正是使用 SVNParentPath
指令的优势,您只需在 /data/svn
目录下创建新的版本库,svnadmin create /data/svn/project2
,在 /data/svn/conf/authz
文件中,为 project2
添加独立的权限配置块。
# ... project1 的配置 ...
[project2:/]
# 为 project2 分配不同的用户和权限
@dev_team = rw
user4 = r
* =
这样,用户访问 http://<server_ip>/svn/project1
时受 [project1:/]
规则约束,访问 http://<server_ip>/svn/project2
时则受 [project2:/]
规则约束,实现了完全隔离的权限管理。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复