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 用户只有读的权限。这里大家自己尝试一下就可以了,我就不截图一个一个的演示了。

相关推荐
tb_first1 小时前
k8sday11服务发现(2/2)
docker·云原生·容器·kubernetes·k8s
为了摸鱼而战2 小时前
Dockerfile知识点梳理,你要搞懂的都在这
docker
Clownseven3 小时前
Docker+Nginx+Node.js实战教程:从零搭建高可用的前后端分离项目
nginx·docker·node.js
__lll_1 天前
手把手教你用 Docker 部署 Vue 项目(含国内镜像加速 + 踩坑指南)
docker
程思扬1 天前
Nextcloud容器化部署革新:Docker+Cpolar构建高效私有云远程访问新架构
docker·容器·架构
豆芽脚脚1 天前
docker compose再阿里云上无法使用的问题
阿里云·docker·容器
十行代码九行报错1 天前
Docker基础学习笔记
笔记·学习·docker
Agome992 天前
Docker之自定义jkd镜像上传阿里云
阿里云·docker·容器
无能百分百2 天前
阿里云服务器ECS安装Docker(CentOS 7.x)
docker