凌峰创科服务平台

Linux SVN服务器如何搭建?

在Linux环境下搭建SVN(Subversion)服务器是企业级版本控制中常见的需求,SVN作为集中式版本控制系统,能够有效管理代码、文档等文件的变更历史,以下将详细介绍在Linux系统(以CentOS 7为例)中搭建SVN服务器的完整步骤,包括安装、配置、权限管理及服务启动等关键环节。

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

环境准备与SVN安装

首先需要确保系统已正确安装,并具备管理员权限,以CentOS 7为例,通过yum包管理器安装SVN服务,打开终端,执行以下命令更新系统软件包并安装SVN:

sudo yum update -y
sudo yum install subversion -y

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

创建SVN仓库

SVN仓库是存储版本数据的核心目录,通常建议放在/var/svn路径下,首先创建仓库根目录,然后使用svnadmin create命令初始化仓库:

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

执行后,/var/svn/project1会自动生成包含confdbhookslocks等子目录的仓库结构,其中conf目录是核心配置目录,包含以下三个关键文件:

Linux SVN服务器如何搭建?-图2
(图片来源网络,侵删)
  • svnserve.conf:SVN服务主配置文件,控制服务行为及认证方式;
  • passwd:用户密码文件,用于存储SVN用户及密码;
  • authz:权限控制文件,定义用户或用户组对仓库目录的访问权限。

配置SVN仓库权限

配置svnserve.conf

编辑/var/svn/project1/conf/svnserve.conf如下:

[general]
# 匿名用户访问权限,设为none禁止匿名访问
anon-access = none
# 认证用户访问权限,设为read/write允许读写
auth-access = write
# 密码文件路径(相对于conf目录)
password-db = passwd
# 权限控制文件路径
authz-db = authz
# 权限控制是否继承子目录,设为true表示继承
authz-authz = true

注意:配置文件中的段落标识(如[general])必须顶格书写,且前后需保留空格,否则配置可能失效。

配置passwd文件

编辑/var/svn/project1/conf/passwd文件,添加用户及密码,格式为用户名 = 密码

[users]
user1 = password1
user2 = password2

SVN密码存储为明文,若需加密可使用htpasswd工具(需安装httpd-tools)。

配置authz文件

authz文件支持基于用户和用户组的精细权限控制,

[groups]
# 定义用户组,格式:组名 = 用户1,用户2
dev_team = user1, user2
test_team = user2
[/]
# 根目录权限,dev_team组成员有读写权限,user2仅有读权限
@dev_team = rw
user2 = r
[/trunk]
# trunk目录仅dev_team可读写
@dev_team = rw
[/branches]
# branches目录禁止test_team访问
@test_team = 

说明

  • 表示仓库根目录;
  • 前缀表示用户组(如@dev_team);
  • rw表示读写,r表示读,空表示无权限。

启动SVN服务

SVN服务可通过svnserve命令启动,默认端口为3690,启动时需指定仓库路径及监听地址:

svnserve -d -r /var/svn

参数说明:

  • -d:后台守护进程模式运行;
  • -r:指定仓库根目录,客户端可通过svn://IP地址直接访问该目录下的所有仓库。

若需修改监听端口(如改为8080),添加--listen-port 8080参数;若需绑定特定IP(如192.168.1.100),添加--listen-host 192.168.1.100参数。

检查服务状态

netstat -tuln | grep 3690  # 查看端口是否监听
ps aux | grep svnserve     # 查看进程是否运行

配置防火墙与SELinux

为确保客户端能正常访问SVN服务,需开放3690端口并配置SELinux策略。

防火墙配置(CentOS 7使用firewalld)

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

SELinux配置

若SELinux处于 enforcing 模式,需为SVN添加端口上下文:

sudo semanage port -a -t svn_port -p tcp 3690

若未安装semanage工具,可通过yum install policycoreutils-python -y安装。

客户端访问测试

在客户端机器(Windows/Linux均可)使用SVN客户端(如TortoiseSVN、命令行svn)访问仓库,以命令行为例:

# 检出仓库到本地
svn checkout svn://服务器IP/project1
# 提交文件(需提前配置用户名)
svn commit -m "test commit" --username user1

若提示认证错误,检查passwdauthz文件配置;若连接超时,检查防火墙及SVN服务状态。

SVN服务开机自启

为使SVN服务在系统重启后自动启动,可创建systemd服务单元文件:

sudo vim /etc/systemd/system/svnserve.service
```  如下:  
```ini
[Unit]
Description=Subversion Repository Server
After=network.target
[Service]
Type=forking
User=root
Group=root
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

仓库维护与管理

仓库备份

定期备份是保障数据安全的关键,可通过svnadmin hotcopy命令创建热备份(服务不停止):

svnadmin hotcopy /var/svn/project1 /var/svn_backup/project1_$(date +%Y%m%d)

也可结合crontab设置定时任务,例如每天凌晨2点备份:

0 2 * * * svnadmin hotcopy /var/svn/project1 /var/svn_backup/project1_$(date +\%Y\%m\%d) && tar -czf /var/svn_backup/project1_$(date +\%Y\%m\%d).tar.gz /var/svn_backup/project1_$(date +\%Y\%m\%d) && rm -rf /var/svn_backup/project1_$(date +\%Y\%m\%d)

仓库迁移

若需迁移仓库,只需停止SVN服务,复制整个仓库目录至新服务器,重启服务即可:

sudo systemctl stop svnserve
sudo cp -r /var/svn/project1 /new_path/svn/
sudo systemctl start svnserve

相关问答FAQs

Q1: SVN服务启动后客户端无法连接,可能的原因有哪些?
A: 可能原因包括:

  1. 防火墙未开放3690端口,需执行firewall-cmd --add-port=3690/tcp
  2. SELinux阻止访问,需添加端口上下文或临时关闭SELinux(setenforce 0);
  3. svnserve.confanon-accessauth-access配置错误,导致认证失败;
  4. 客户端使用的IP地址或SVN URL格式错误(如误将svn://写成http://)。

Q2: 如何修改SVN仓库的默认访问端口?
A: 修改SVN服务启动参数中的--listen-port即可,例如将端口改为8080:

svnserve -d -r /var/svn --listen-port 8080

若需永久修改,可通过systemd服务单元文件的ExecStart参数添加--listen-port 8080,然后重启服务:

sudo systemctl restart svnserve

修改后客户端需使用svn://服务器IP:8080/project1访问仓库。

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