在Linux系统中启动SVN服务器通常涉及安装Subversion服务、创建版本控制仓库、配置访问权限以及启动服务进程等步骤,SVN(Subversion)是一款开源的版本控制系统,常用于管理代码、文档等文件的版本历史,通过SVN服务器可以集中存储和管理这些文件,实现多人协作开发,以下是详细的Linux环境下启动SVN服务器的操作流程,涵盖从安装到启动验证的全过程。
安装Subversion服务
在启动SVN服务器前,需先确保系统已安装Subversion服务,主流Linux发行版(如CentOS、Ubuntu等)均提供包管理工具,可通过以下命令安装:
基于RedHat/CentOS系统(使用yum/dnf)
# 更新软件包缓存 sudo yum update -y # 安装Subversion sudo yum install subversion -y
基于Debian/Ubuntu系统(使用apt)
# 更新软件包列表 sudo apt update # 安装Subversion sudo apt install subversion -y
安装完成后,可通过以下命令验证Subversion是否安装成功:
svnserve --version
若显示版本信息(如svnserve, version 1.14.1),则表示安装成功。
创建版本控制仓库
SVN服务器通过仓库(Repository)存储文件版本数据,需先创建一个或多个仓库,通常建议将仓库统一存放在指定目录(如/var/svn
),便于管理。
创建仓库目录
# 创建仓库根目录 sudo mkdir -p /var/svn # 设置目录权限(确保运行SVN服务的用户有读写权限,默认为root或svn用户) sudo chown -R root:root /var/svn sudo chmod -R 755 /var/svn
使用svnadmin创建仓库
假设创建一个名为project_repo
的仓库,执行以下命令:
sudo svnadmin create /var/svn/project_repo
创建完成后,仓库目录结构如下:
/var/svn/project_repo/
├── conf/ # 配置文件目录
│ ├── svnserve.conf # 主配置文件
│ ├── passwd # 用户密码文件
│ └── authz # 权限控制文件
├── db/ # 数据库文件目录
├── hooks/ # 钩子脚本目录
├── locks/ # 锁文件目录
└── format # 仓库版本格式文件
配置仓库访问权限
仓库创建后,需通过配置文件设置用户认证和访问权限,确保只有授权用户可访问仓库。
配置svnserve.conf(主配置文件)
编辑仓库的conf/svnserve.conf
文件(需使用root权限或修改文件所有者为当前用户):
sudo vim /var/svn/project_repo/conf/svnserve.conf
添加或修改以下内容(注释行以开头,需删除注释):
[general] # 匿名用户访问权限(none=禁止,read=只读,write=读写) anon-access = none # 认证用户访问权限 auth-access = write # 密码数据库文件路径(相对于conf目录) password-db = passwd # 权限控制文件路径 authz-db = authz # 认证域名称(可自定义,用于提示用户输入认证信息) realm = My SVN Repository
注意:svnserve.conf
文件中的参数必须顶格写,前面不能有空格或制表符,否则可能导致配置无效。
配置passwd(用户密码文件)
编辑conf/passwd
文件,添加允许访问仓库的用户及其密码:
sudo vim /var/svn/project_repo/conf/passwd
添加用户格式为用户名 = 密码
,
[users] # 用户名 = 密码 admin = 123456 developer = abcdef
配置authz(权限控制文件)
编辑conf/authz
文件,设置用户或用户组的访问权限(支持路径级别的权限控制):
sudo vim /var/svn/project_repo/conf/authz
示例配置如下:
[groups] # 定义用户组,格式:组名 = 用户1,用户2 admin_group = admin dev_group = developer [/] # 根目录权限,@组名表示组用户 @admin_group = rw # 单个用户权限(r=只读,rw=读写) developer = rw [/branches] # 分支目录权限 @dev_group = rw @admin_group = rw [/tags] # 标签目录权限 @admin_group = rw * = r
说明:
- 表示仓库根目录,
/branches
、/tags
等为仓库下的子目录。 - 表示所有用户(包括匿名用户),此处设置为只读(若需禁止匿名访问,需配合
svnserve.conf
中的anon-access = none
)。
启动SVN服务器
SVN服务器可通过svnserve
命令以独立进程方式启动,也可通过系统服务(如systemd)管理,以下是两种常用启动方式:
命令行启动(临时方式)
直接使用svnserve
命令启动,适合临时测试或手动管理服务,常用参数如下:
-d
:以守护进程方式后台运行。-r
:指定仓库根目录(SVN服务将访问该目录下的所有仓库)。-i
:指定监听IP地址(默认监听所有IP)。-p
:指定监听端口(默认端口3690)。
示例命令(启动所有仓库,监听3690端口):
svnserve -d -r /var/svn
启动后,可通过以下命令检查进程是否运行:
ps aux | grep svnserve
若显示类似svnserve --daemon --root /var/svn
的进程,则表示启动成功。
通过systemd管理服务(推荐)
为方便开机自启和启停管理,可将SVN服务配置为系统服务。
(1)创建systemd服务文件
sudo vim /etc/systemd/system/svnserve.service
[Unit] Description=Subversion Protocol Daemon 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 RestartSec=5s [Install] WantedBy=multi-user.target
说明:
ExecStart
中的路径为svnserve
命令的实际路径(可通过which svnserve
查询)。-r /var/svn
指定仓库根目录,服务将管理该目录下的所有仓库。
(2)启动并设置开机自启
# 重新加载systemd配置 sudo systemctl daemon-reload # 启动SVN服务 sudo systemctl start svnserve # 设置开机自启 sudo systemctl enable svnserve
(3)检查服务状态
sudo systemctl status svnserve
若显示active (running)
,则表示服务运行正常。
验证SVN服务器运行
启动SVN服务后,需验证服务是否正常响应,可通过以下方式测试:
检查端口监听
SVN默认使用3690端口,可通过netstat
或ss
命令检查端口是否监听:
# 使用netstat(需安装net-tools) netstat -tuln | grep 3690 # 使用ss(推荐) ss -tuln | grep 3690
若显示LISTEN 0 5 *:3690 :::*
,则表示端口正常监听。
测试仓库访问
使用svn
命令测试连接仓库(假设用户名为admin
,密码为123456
):
# 列出仓库根目录内容 svn list svn://localhost
若提示输入用户名和密码,输入正确后显示仓库内容(如trunk/
、branches/
、tags/
等默认目录),则表示服务器配置成功。
常见问题处理
- 权限问题:若提示“Could not open the requested SVN filesystem”,需检查仓库目录权限(
chmod -R 755
)和配置文件权限(conf/
目录下文件需可读)。 - 端口冲突:若3690端口被占用,可通过
svnserve -d -r /var/svn -p 3691
指定其他端口,并在客户端使用对应端口访问。
相关问答FAQs
Q1:如何修改SVN服务器的监听端口?
A:启动SVN服务器时通过-p
参数指定端口,例如svnserve -d -r /var/svn -p 3691
(使用3691端口),若通过systemd管理服务,需修改/etc/systemd/system/svnserve.service
中的ExecStart
参数,添加-p 3691
,然后执行sudo systemctl daemon-reload && sudo systemctl restart svnserve
,客户端访问时需在URL中指定端口,如svn://localhost:3691
。
Q2:如何停止SVN服务器?
A:若通过命令行启动(svnserve -d
),可通过进程ID停止:sudo kill $(pidof svnserve)
;若通过systemd管理,使用sudo systemctl stop svnserve
,开机自启可通过sudo systemctl disable svnserve
禁用。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/26798.html