Docker 搭建 svn 服务器

svn 是一种集中式版本管理系统。最新文件存储在服务器上,用户需要先从服务器下载(检出)最新文件,修改后再提交到服务器。版本信息也是放在服务器上,如果连接不上服务器,则无法提交、还原、对比等操作。

优点是符合一般的思维逻辑,适合做团队内部文档共享、管理系统。

1.下载镜像与运行容器

docker run --name svn \
    --detach \
    --volume /root/container/svn:/var/opt/svn \
    --publish 3690:3690 \
    garethflowers/svn-server

以上命令运行的镜像是 garethflowers/svn-server,如果本地没有则会下载。

2.创建新的仓库

docker exec -it svn svnadmin create repo1

创建一个名为 repo1 的仓库。查看其对应的文件目录,包含如下文件:

ls /root/container/svn/repo1
conf  db  format  hooks  locks  README.txt

3.修改配置文件

仓库路径下 conf 为配置文件目录,有以下文件:

ls ./repo1/conf
authz  hooks-env.tmpl  passwd  svnserve.conf

修改 svnserve.conf

[general]
anon-access = none             # 匿名用户不可读写,也可设置为只读 read
auth-access = write            # 授权用户可写
password-db = passwd           # 密码文件路径,相对于当前目录
authz-db = authz               # 访问控制文件
realm = /var/opt/svn/repo1     # 认证命名空间,会在认证提示界面显示,并作为凭证缓存的关键字,可以写仓库名称

配置账号与密码,修改 passwd,格式为“账号 = 密码”

[users]
# harry = harryssecret
# sally = sallyssecret
eric = 123456

配置权限,修改 authz


[groups]
owner = eric, user1

[/]             # / 表示所有仓库
eric = rw       # 用户 eric 在所有仓库拥有读写权限

[repo1:/]           # 表示以下用户在仓库 repo1 的所有目录有相应权限
user1 = rw
@owner = rw         # 表示 owner 组下的用户拥有读写权限

说明,r 表示读,w 表示写。没有设置的用户默认为无权限。
注意:更改svnserve.conf,authz和passwd文件时不需要重启。


附加内容

上面的 svn 服务器不支持 http 协议访问,如果要支持,可以在上面的容器中安装 Apache 服务器及相应的模块(mod_dav_svn),配置好即可。并将其提交、生成一个新的镜像保存下来。

当然也可以使用 Docker Hub 上已经支持 http 协议访问的镜像。

准备工作:

# 生成一个空的密码文件,用于 Apache 的 HTTP 认证
mkdir -p /root/container/svn/apache
touch /root/container/svn/apache/passwd

运行容器:

docker run -d \
    --name svn-server \
    -p 21080:80 \
    -p 3690:3960 \
    --volume /root/container/svn/repo:/home/svn \
    --volume /root/container/svn/apache/passwd:/etc/subversion/passwd \
    elleflorio/svn-server

创建 http 访问账号

docker exec -t svn-server htpasswd -b /etc/subversion/passwd <username> <password>

此账号和密码被写入容器中的 HTTP 认证文件(/etc/subversion/passwd),且密码是加密的。实践经验表明,既然用 http 协议访问只能查看,那么创建一个公共的账号,供大家使用即可。也可创建与 svn 认证文件中一样的账号和密码。

创建新的仓库

docker exec -it svn-server svnadmin create repo1

svn 客户端的账号权限则在 repo1/conf 的配置文件中配置。见本文前一部分配置说明。


备份数据

svn 存储数据有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。
仓库文件(数据)存储路径为 ./repo1/db/revs,注意保护好。一般直接备份整个仓库 ./repo1/。

标签: svn

添加新评论