Docker 搭建 SVN 服务器

序言

本篇文章只介绍如何在 Linux 服务器上安装 SVN,客户端工具的使用不做介绍。 下面的文章以 Centos 8 系统来做为 Linux 服务器,对于其他版本的服务器可以参考官方文档。

检查环境

查看系统下有没有安装过或有安装过老版本的 SVN,如果没有安装,则什么都不会显示

text 复制代码
[root@localhost ~]# rpm -ql subversion 
未安装软件包 subversion

如果有老版本的话先删除一下老版本

csharp 复制代码
[root@localhost opt]# yum -y remove subversion 
未找到匹配的参数: subversion 
没有软件包需要移除。 
依赖关系解决。 
无需任何处理。 完毕! 
[root@localhost opt]#

下载安装

我这里建议通过 docker 来安装 svnserver

bash 复制代码
# 下载镜像
docker pull garethflowers/svn-server
# 创建svn仓库目录,进入svn仓库目录, 用于挂载数据
mkdir -p /var/svn/repos  /var/svn/conf 

启动svn容器

javascript 复制代码
docker run -d \
  --name svn-server \
  -p 3690:3690 \
  -v /var/svn/repos:/var/opt/svn \
  -v /var/svn/conf:/etc/subversion \
  --restart=always \
  garethflowers/svn-server

参数说明:

  • -p 3690:3690:映射 SVN 默认端口
  • -v:挂载本地目录到容器,实现数据持久化
  • --restart=always:设置容器随 Docker 自动启动

创建项目和配置权限

创建项目需要进入 SVN 容器内部创建,命令为: docker exec -it svn-server /bin/sh

成功后的界面如下:

csharp 复制代码
[root@localhost svn]# docker exec -it svn-server /bin/sh 
/ #

接下来我们创建一个仓库,并配置用户和读写权限 svnadmin create /var/opt/svn/myproject 这里仓库就已经创建完毕了,这个仓库会同步到主机的 /var/svn/repos 目录下。

csharp 复制代码
[root@localhost repos]# pwd 
/var/svn/repos 
[root@localhost repos]# ll 
总用量 4 drwxr-xr-x. 6 root root 4096 8月 20 10:15 myproject 
[root@localhost repos]#

接下来,我们来进行 SVN 仓库的配置,仓库的配置文件就位于 conf 目录下

这里有三个重要的配置文件

  • authz: 负责账号权限的管理,控制账号是否读写权限
  • passwd: 负责账号和密码的用户名单管理
  • svnserve.conf: svn 服务器配置文件

配置用户密码

编辑 passwd 文件, 添加两个用户, 格式为:用户名 = 密码

配置权限控制

这里通过用户组来进行权限控制,单个用户的控制比较麻烦,不进行演示,在公司里面大多都是以用户组来控制权限的。auhtz配置文件中的每个参数,开头不能有空格,对于组要以@开头,用户不需要。

[groups] 部分:定义用户组

ini 复制代码
# 这里两个用户分别对应上面创建的用户
[groups]
admin_group = admin
test_group = test
  • 作用:将多个用户归类到 "用户组",方便批量管理权限(避免对每个用户单独设置权限)。
  • 格式:组名 = 用户名1,用户名2,...(多个用户用逗号分隔,无空格)。
  • 示例说明:
    • admin_group = admin:创建一个名为admin_group的组,包含用户admin(这个用户需在passwd文件中已定义)。
    • test_group = test:创建一个名为test_group的组,包含用户test(同样需在passwd中存在)。

[权限规则部分]:控制访问范围和权限

ini 复制代码
[/]
@admin_group = rw
@test_group = r
* =
  • [/]:表示权限作用的范围。/ 代表仓库的根目录 。这个地方不要误解, 这个表示对于每个仓库自身的根目录
    • 如果想针对某个特定仓库配置权限(而非所有仓库),可以写成 [仓库名:/],例如 [myproject:/] 表示只对myproject仓库生效。
  • 权限规则说明:
    • @admin_group = rw@ 符号表示 "用户组",这条规则表示 admin_group 组的所有用户对 / 范围有 rw 权限。
      • rw 是权限组合:r(read,读权限,可检出、更新代码)和 w(write写权限,可提交、修改代码)。
    • @test_group = rtest_group 组的用户只有 r 权限(只能看代码,不能修改提交)。
    • * =* 表示 "所有未匹配的用户 / 组",= 表示 "无任何权限"。这条规则是安全兜底,确保除了上面明确授权的用户组,其他用户无法访问。

更精细的权限控制

如果需要对仓库的子目录设置不同权限(例如只允许某个组修改特定目录),可以添加更具体的规则,例如:

ini 复制代码
# 对 myproject 仓库的 /trunk 目录设置权限
[myproject:/trunk]
@admin_group = rw    # 管理员可读写
@dev_group = r       # 开发组只读

# 对 myproject 仓库的 /branches/dev 目录设置权限
[myproject:/branches/dev]
@dev_group = rw      # 开发组可读写该分支
@admin_group = rw    # 管理员仍有读写权限
* =                  # 其他用户无权限

配置 svnserve.conf

编辑 svnserve.conf ,内容参考如下:

ini 复制代码
# force-username-case = none
# 匿名访问的权限 可以是read、write,none,默认为read
anon-access = none
#使授权用户有写权限,前提是 authz 文件中也允许
auth-access = write
#指定用户密码文件的路径
password-db = passwd
#访问控制文件
authz-db = authz
#认证命名空间,SVN会在认证提示里显示,并且作为凭证缓存的关键字,应该具有唯一性
realm = /var/svn/tes

测试

上述配置修改完后,重启 docker 容器,接下来,我们使用 admin 用户来测试修改提交代码

完成后,我们使用 admin 用户随便创建一个文件并提交,然后使用 test 用户拉去尝试修改,试试能否成功,不能成功才是对的,因为 test 用户只有读的权限。这里大家自己尝试一下就可以了,我就不截图一个一个的演示了。

相关推荐
IT古董4 小时前
Windows 11 专业版 安装与配置 Docker Desktop 保姆级手册(包成功永久免关注免VIP)
windows·docker·容器
风无雨8 小时前
windows docker 配置镜像
运维·docker·容器
java_logo9 小时前
NGINX WEBUI Docker 容器化部署指南
运维·nginx·docker·容器·centos·rabbitmq·运维开发
i小杨9 小时前
Docker 相关使用收录
docker·容器·eureka
猪在黑魔纹里9 小时前
docker run hello-world失败、报错
linux·docker·容器
❀͜͡傀儡师10 小时前
docker一键部署PDF免费工具箱stirling-PDF
docker·容器·pdf
zz-zjx11 小时前
docker进阶---docker底层实践2025
运维·docker·容器
暮色念了红尘11 小时前
Ros1 Noetic(本地)和Ros2 Humble(docker)之间相互通信及设置初始位姿
docker·容器·ros·humble·noetic·ros1_bridge
SiriusSun_12 小时前
Windows10 wsl2 ubuntu22.04 docker安装
运维·docker·容器
落日漫游16 小时前
K8s Service核心功能:稳定访问与负载均衡
docker·kubernetes·负载均衡