Docker部署Subversion(SVN)

基于docker run部署

1. 使用 Docker 运行 SVN 服务容器

1
2
3
4
5
docker run -d --name svn-server \
--restart always \
-v /data/svn:/var/opt/svn \
-p 3690:3690 \
garethflowers/svn-server:1.7
  • 容器名为 svn-server
  • 数据挂载到宿主机 /data/svn
  • 对外暴露 3690 端口,支持重启自动启动

2. 在容器内部创建 SVN 仓库

1
2
3
docker exec -it svn-server svnadmin create default-repo

svnadmin create default-repo
  • 创建名为 default-repo 的 SVN 仓库

3. 配置仓库权限与用户访问

default-repo/conf下对文件配置权限

  • 编辑 svnserve.conf,取消注释并设置:

    [general]
    auth-access = write
    password-db = passwd
    authz-db = authz
    
  • 编辑 passwd 文件,添加用户,例如:

    [users]
    admin = Svn#2022
    
  • 编辑 authz 文件,设置权限:

    [groups]
    owner = admin
    
    [/]
    admin = rw
    
  • 此处表示 admin 用户属于 owner 组,并具备对根目录的读写权限


4. 在客户端使用 SVN

  1. Windows 用户安装 TortoiseSVN 客户端
  2. 本地新建工作目录,如 svn-workdir
  3. 右键选择 Checkout,输入仓库地址(格式 svn://<服务器IP>/default-repo
  4. 在本地创建文件后使用 Commit 提交,输入用户名密码即可上传

基于docker-compose启动

适用于 Subversion (SVN) 服务的 docker-compose.yml** 以及配套的初始化方式(包括用户/权限/仓库的配置),做到开箱即可用、持久化、安全性有基础保障。


1. 目录结构

svn-deploy/
├── docker-compose.yml
├── init/
│   ├── svnserve.conf
│   ├── passwd
│   └── authz
└── data/                  # 实际 SVN 仓库数据会挂在这里

2. docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: "3.9"

services:
svn:
image: garethflowers/svn-server:1.7
container_name: svn-server
restart: always
ports:
- "3690:3690"
volumes:
- ./data:/var/opt/svn # 持久化仓库数据
- ./init/svnserve.conf:/var/opt/svn/default-repo/conf/svnserve.conf:ro
- ./init/passwd:/var/opt/svn/default-repo/conf/passwd:ro
- ./init/authz:/var/opt/svn/default-repo/conf/authz:ro
healthcheck:
test: ["CMD", "svn", "list", "svn://localhost/default-repo"]
interval: 30s
timeout: 5s
retries: 3

说明:

  • garethflowers/svn-server:1.7 作为基础镜像,可替换为更新/自定义的镜像。
  • 通过挂载初始化配置文件(svnserve.confpasswdauthz)实现权限与用户预设。
  • 绑定宿主机 ./data 目录保证数据不丢失。
  • Healthcheck 简单验证仓库可访问(可根据实际环境调整地址/仓库名)。

3. 配置文件(放在 init/ 目录)

svnserve.conf

1
2
3
4
5
6
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = MySVNServer

passwd

1
2
3
[users]
admin = Svn#2022
dev = Dev#2025

authz

1
2
3
4
5
6
[groups]
owners = admin

[/]
@owners = rw # or admin = rw
dev = r

解释:

  • admin 属于 owners 组,拥有根目录读写;dev 只有只读权限。
  • 密码可替换为更安全的做法(如外部密钥管理/一次性生成后手动更新)。

4. 仓库初始化

该镜像默认会在首次启动时创建一个名为 default-repo 的仓库(路径在 /var/opt/svn/default-repo)。如果你希望创建多个仓库或用自定义名字,可以在宿主机 ./data 里手动初始化

1
2
3
4
5
6
7
8
# 进入容器
docker compose exec svn bash

# 手动创建新仓库(如果需要)
svnadmin create /var/opt/svn/myproject

# 复制配置
cp /var/opt/svn/default-repo/conf/{svnserve.conf,passwd,authz} /var/opt/svn/myproject/conf/

5. 启动

1
docker compose up -d

检查状态:

1
2
docker compose ps
docker compose logs -f svn

6. 客户端访问示例

1
svn checkout svn://<服务器IP>/default-repo --username admin