在CentOS系统上搭建Subversion(SVN)服务器是企业开发中常见的版本控制需求,SVN作为一个集中式的版本控制系统,能够有效管理代码和文档,追踪每一次修改,本文将详细介绍在CentOS环境下,从安装到配置一个完整可用的SVN服务器的全过程,旨在提供一份清晰、准确、可操作的指南。
准备工作
在开始之前,请确保您具备以下条件:
- 一台已安装CentOS 7或更高版本的服务器。
- 拥有
root
权限或sudo
权限的用户账户。 - 服务器已连接到互联网,以便下载安装包。
第一步:安装Subversion
CentOS的官方软件源中包含了Subversion,我们可以直接使用yum
(CentOS 7)或dnf
(CentOS 8/9)包管理器进行安装。
打开终端,执行以下命令:
# 对于CentOS 7 sudo yum install subversion -y # 对于CentOS 8/9 sudo dnf install subversion -y
安装完成后,可以通过以下命令验证是否安装成功以及查看其版本号:
svnserve --version
如果屏幕上输出了SVN的版本信息,则表示安装已成功。
第二步:创建SVN仓库
SVN仓库是存储所有版本数据的地方,我们会将所有仓库集中存放在一个统一的目录下,例如/svn
。
创建主目录
sudo mkdir /svn
创建项目仓库
假设我们要为名为my_project
的项目创建一个仓库。sudo svnadmin create /svn/my_project
执行后,
/svn/my_project
目录下会生成一系列文件和子目录,包括conf
、db
、hooks
、locks
等。conf
目录是我们接下来配置的重点。
第三步:配置SVN服务
SVN的配置主要围绕/svn/my_project/conf
目录下的三个核心文件展开:svnserve.conf
、passwd
和authz
。
此文件控制着SVN服务的整体行为,使用vi
或nano
编辑器打开它:sudo vi /svn/my_project/conf/svnserve.conf
修改或取消注释以下几行,使其配置如下:
[general] # 禁止匿名访问,设为none anon-access = none # 授权用户可读写 auth-access = write # 指定密码文件路径 password-db = passwd # 指定权限控制文件路径 authz-db = authz # 指定认证域,会在客户端提示时显示 realm = My Project Repository
注意:每行配置前不能有空格,否则会导致服务启动失败。
配置
passwd
(用户密码文件)
此文件用于存储SVN用户的用户名和密码(明文)。sudo vi /svn/my_project/conf/passwd
在
[users]
标签下添加用户,格式为用户名 = 密码
:[users] harry = harrys_secret sally = sallys_secret admin = admin_strong_password
配置
authz
(权限控制文件)
此文件实现了精细的路径权限管理,可以控制不同用户或用户组对不同目录的访问权限。sudo vi /svn/my_project/conf/authz
配置示例如下:
[groups] # 定义用户组 dev_team = harry, sally admin_team = admin # 为根目录设置权限 [/] # admin_team组拥有读写权限 @admin_team = rw # 其他用户无任何权限 * = # 为trunk目录设置权限 [my_project:/trunk] # dev_team组拥有读写权限 @dev_team = rw
[groups]
:用于定义用户组。[repository:/path]
:指定要设置权限的仓库路径。[my_project:/]
表示my_project
仓库的根目录。@group_name = r|w|rw
:为用户组设置权限。username = r|w|rw
:为单个用户设置权限。- 表示未在上面提及的所有用户,后面不跟任何字符表示无权限。
第四步:启动SVN服务
配置完成后,就可以启动SVN服务了,我们使用svnserve
命令,并以守护进程模式运行。
# -d 表示以守护进程模式运行 # -r /svn 表示将/svn作为SVN的根目录,客户端访问时无需再写此路径 sudo svnserve -d -r /svn/
启动后,可以使用ps
或netstat
命令检查服务是否正常运行:
ps aux | grep svnserve # 或 netstat -antlp | grep 3690
SVN的默认监听端口是3690
,如果看到相关信息,说明服务已成功启动。
第五步:配置防火墙
为了使客户端能够从网络访问SVN服务器,需要在防火墙中开放3690端口。
# 添加端口 sudo firewall-cmd --permanent --add-port=3690/tcp # 重新加载防火墙配置 sudo firewall-cmd --reload # 检查端口是否已开放 sudo firewall-cmd --list-ports
第六步:客户端测试
在另一台机器上(或本机),可以使用SVN客户端(如TortoiseSVN或命令行 svn)进行测试。
使用命令行检出仓库:
svn checkout svn://<你的服务器IP地址>/my_project --username harry
系统会提示输入密码(harrys_secret
),成功后,当前目录下会生成一个my_project
文件夹,里面就是仓库的内容,您可以尝试在其中添加文件,然后commit
到服务器,以验证写入权限。
至此,一个功能完备的SVN服务器已在CentOS上配置完成。
相关问答FAQs
我忘记了SVN用户的密码,或者需要为新员工添加账户,应该如何操作?
解答: 这个操作非常简单,您只需要登录到CentOS服务器,找到对应仓库的conf/passwd
文件,直接编辑它即可。
- 使用
sudo vi /svn/my_project/conf/passwd
命令打开文件。 - 如果是修改密码,找到对应的用户名(如
harry = old_password
),将其等号后面的密码修改为新密码(如harry = new_strong_password
)。 - 如果是添加新用户,只需在
[users]
标签下新增一行,按照用户名 = 密码
的格式写入即可,new_user = user_password
。
修改保存后,新的密码或账户会立即生效,无需重启SVN服务。
如何确保SVN服务在服务器重启后能够自动运行?
解答: 直接使用 svnserve -d
命令启动的服务在服务器重启后不会自动恢复,为了保证服务的高可用性,最佳实践是为SVN创建一个systemd
服务单元。
创建服务文件:
sudo vi /etc/systemd/system/svnserve.service
写入以下内容:
[Unit] Description=Subversion protocol daemon After=network.target [Service] Type=forking User=svn Group=svn ExecStart=/usr/bin/svnserve -d -r /svn --pid-file=/run/svnserve/svnserve.pid PIDFile=/run/svnserve/svnserve.pid Restart=on-failure [Install] WantedBy=multi-user.target
注意:上述配置中使用了
svn
用户和组来运行服务,这是一个更安全的做法,您需要先创建此用户sudo useradd svn
并将仓库目录的所有权转给它sudo chown -R svn:svn /svn
,如果不想创建新用户,也可以直接用root
运行,但安全性较低。启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable svnserve.service # 设置开机自启 sudo systemctl start svnserve.service # 立即启动服务
通过以上步骤,SVN服务就被注册为系统服务,并会在每次服务器启动后自动运行,您可以使用
sudo systemctl status svnserve.service
来查看其运行状态。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复