启动svn server
创建Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| mkdir -p /usr/local/src/svn && cd /usr/local/src/svn cat > "Dockerfile" << EOF FROM maisi/alpine:latest
CMD ["/usr/bin/svnserve", "--daemon", "--foreground", "--root", "/var/opt/svn"] EXPOSE 3690 HEALTHCHECK CMD netstat -ln | grep 3690 || exit 1 VOLUME ["/var/opt/svn"] WORKDIR /var/opt/svn
RUN echo http://mirrors.aliyun.com/alpine/v3.14/main/ > /etc/apk/repositories && apk update && apk upgrade RUN apk add --no-cache \ subversion wget EOF
|
构建svn server镜像
生成svn server容器
1 2 3 4 5
| docker run --name svn \ --privileged=true \ -v /data/svn:/var/opt/svn \ -p 3690:3690 \ -d svn:latest
|
开放防火墙端口
1 2
| firewall-cmd --zone=public --add-port=3690/tcp --permanent firewall-cmd --reload
|
配置svn server
创建用户组及用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cat > /data/svn/authz << EOF [groups] maisi = alice,bob
[/] alice = rw
[maisi:/] @maisi = rw EOF
cat > /data/svn/passwd << EOF [users] alice = 123456789 EOF
|
[/]:所有仓库
[maisi:/]:仅maisi仓库
@maisi = rw:maisi组内所有用户拥有读写权限
创建示例仓库maisi
1
| docker exec -it svn svnadmin create maisi
|
每个仓库都有独立的conf/svnserve.conf配置文件,配置文件中指定密码文件(passwd)和授权文件(authz)的路径。
可以将每个仓库的passwd和authz都指向同一个文件,这样只需要建立一套账号和授权即可。
配置仓库
1 2 3 4 5 6
| docker exec -it svn /bin/sh -c "cd /var/opt/svn/maisi/conf/ \ && sed -i '/# anon-access = read/a\anon-access = none' svnserve.conf \ && sed -i '/# auth-access = write/a\auth-access = write' svnserve.conf \ && sed -i '/# password-db = passwd/a\password-db = \/var/opt\/svn\/passwd' svnserve.conf \ && sed -i '/# authz-db = authz/a\authz-db = \/var/opt\/svn\/authz' svnserve.conf \ && sed -i '/# realm = /a\realm = Maisi Lab' svnserve.conf"
|
当多个仓库共用同一个passwd和authz时,可以让这些仓库使用相同的realm(默认值是仓库的UUID)。当客户端检测到相同的realm后,则可以共用保存在客户端的用户名和密码进行认证。
重启svn server