在 CentOS 系统上搭建并开启 Subversion (SVN) 服务,是实现团队代码版本控制和协作开发的常见需求,SVN 作为一款集中式的版本控制系统,以其稳定性和易用性被广泛采用,本文将详细介绍在 CentOS 环境下,从安装到配置,再到启动服务的完整流程,帮助您快速构建一个可用的 SVN 服务器。
第一步:安装 Subversion
在开始之前,请确保您拥有 sudo
或 root 权限,CentOS 提供了方便的包管理器 yum
(在较新版本中为 dnf
,但 yum
命令通常仍可用作别名)来安装软件。
打开终端,执行以下命令来安装 SVN 及其相关模块:
sudo yum install subversion -y
该命令会自动从官方软件源下载并安装最新稳定版的 Subversion,安装完成后,您可以通过 svnserve --version
命令来验证是否安装成功,如果能看到版本信息,则表示安装无误。
第二步:创建 SVN 仓库
SVN 仓库是存储所有项目文件和版本历史的地方,我们会将其创建在一个专门的目录下,/svn
。
创建主目录:
sudo mkdir /svn
创建项目仓库:
假设我们要为一个名为myproject
的项目创建仓库,执行以下命令:sudo svnadmin create /svn/myproject
执行后,
/svn/myproject
目录下会生成一系列文件和子目录,包括conf
、db
、hooks
等。conf
目录是我们接下来配置的重点。
第三步:配置 SVN 仓库
SVN 的核心配置主要集中在 /svn/myproject/conf/
目录下的三个文件:svnserve.conf
(主配置文件)、passwd
(用户密码文件)和 authz
(权限控制文件)。
1 配置用户密码 (passwd
)
编辑 passwd
文件,在 [users]
标签下添加 SVN 用户和密码,格式为 用户名 = 密码
。
sudo vi /svn/myproject/conf/passwd
[users] harry = harryssecret sally = sallyssecret
这里我们创建了两个用户:harry
和 sally
。
2 配置访问权限 (authz
)
编辑 authz
文件来精细控制用户或用户组对仓库目录的读写权限。
sudo vi /svn/myproject/conf/authz
可以设置用户组和具体路径的权限,
[groups] dev_team = harry, sally [/] @dev_team = rw * = r
此配置表示:
[groups]
定义了一个名为dev_team
的用户组,包含harry
和sally
。[/]
表示对仓库根目录的权限设置。@dev_team = rw
表示dev_team
组的成员拥有读写(rw
)权限。* = r
表示其他所有用户()拥有只读(r
)权限,如果希望禁止匿名访问,可以设置为 或不配置此项。
3 启用认证与授权 (svnserve.conf
)
这是最关键的一步,需要告诉 svnserve
服务使用我们刚刚配置的密码和权限文件。
sudo vi /svn/myproject/conf/svnserve.conf
找到并修改(或取消注释)以下几行:
[general] # 禁止匿名访问,设为 none 可增强安全性 anon-access = none # 授权用户可写 auth-access = write # 指定密码文件路径 password-db = passwd # 指定权限文件路径 authz-db = authz # 认证域,一个提示性的名称 realm = My Project Repository
注意: 配置项前不能有空格,否则会导致服务启动失败。
下表小编总结了 svnserve.conf
的关键配置项:
配置项 | 值示例 | 说明 |
---|---|---|
anon-access | none , read , write | 控制匿名用户的访问权限,推荐设为 none 。 |
auth-access | write , read | 控制已认证用户的访问权限,通常设为 write 。 |
password-db | passwd | 指定用户密码文件的相对路径。 |
authz-db | authz | 指定路径授权文件的相对路径。 |
realm | My Project | 认证域名称,会在客户端认证时显示。 |
第四步:启动 SVN 服务
配置完成后,就可以启动 svnserve
服务了,我们使用 -d
参数使其以守护进程模式在后台运行,并使用 -r
参数指定 SVN 服务的根目录。
svnserve -d -r /svn
-d
: 表示后台运行。-r /svn
: 将/svn
设置为服务的根目录,这样做的好处是,客户端访问时可以直接使用svn://服务器IP/myproject
,而无需包含完整的路径/svn/myproject
。
启动后,可以使用 ps aux | grep svnserve
或 netstat -tuln | grep 3690
命令检查服务是否正在运行,SVN 的默认端口是 3690
。
第五步:配置防火墙
如果服务器的防火墙(firewalld
)是开启状态,需要放行 SVN 服务的端口,否则外部客户端无法连接。
# 永久开放 3690 端口 sudo firewall-cmd --permanent --add-port=3690/tcp # 重新加载防火墙规则使配置生效 sudo firewall-cmd --reload
至此,您的 CentOS SVN 服务器已经成功开启并运行,客户端可以通过 svn://<您的服务器IP地址>/myproject
的地址来访问仓库。
相关问答 FAQs
我修改了 conf
目录下的配置文件,但新的设置没有生效,这是为什么?
解答: svnserve
服务在启动时会一次性读取配置文件到内存中,当您修改了 svnserve.conf
、passwd
或 authz
文件后,需要重启 svnserve
服务才能使更改生效,重启步骤如下:
- 查找并杀死当前运行的
svnserve
进程:sudo pkill svnserve
- 重新启动服务:
svnserve -d -r /svn
完成这两步后,新的配置就会被加载并应用。
我忘记了某个 SVN 用户的密码,该如何重置?
解答: SVN 的用户密码是以明文形式存储在 passwd
文件中的,重置密码非常简单。
- 使用文本编辑器打开密码文件:
sudo vi /svn/myproject/conf/passwd
- 找到需要重置密码的用户行(
harry = harryssecret
),直接修改等号后面的新密码即可(harry = newpassword123
)。 - 保存文件并退出。
修改密码文件后,建议重启svnserve
服务以确保所有连接都使用新的认证信息,虽然有时不重启也能生效,但重启是最稳妥的做法。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复