安装

Docker部署

  1. 创建Dockerfile

    FROM maisi/alpine:3.22.2
    
    WORKDIR /var/opt/svn
    EXPOSE 3690
    VOLUME ["/var/opt/svn"]
    RUN echo http://mirrors.aliyun.com/alpine/v3.22/main/ > /etc/apk/repositories && \
        apk update && apk upgrade
    RUN apk add --no-cache subversion==1.14.5-r0 wget==1.25.0-r1
    HEALTHCHECK CMD netstat -ln | grep 3690 || exit 1
    CMD [ "/usr/bin/svnserve", "--daemon", "--foreground", "--root", "/var/opt/svn" ]
  2. 构建镜像并创建容器

    [root@ecs ~]# docker build -t svn-server . < Dockerfile
    [root@ecs ~]# docker run --name svn \
    --privileged=true \
    --restart=unless-stopped \
    -p 3690:3690 \
    -v /data/svn:/var/opt/svn \
    -d svn-server
  3. 防火墙放行

    [root@ecs ~]# firewall-cmd --zone=public --add-port=3690/tcp --permanent
    [root@ecs ~]# firewall-cmd --reload

配置

  1. 创建用户和组

    [root@ecs ~]# cat > /data/svn/authz << EOF
    [groups]
    maisi = alice,bob
    
    [/]
    alice = rw
    
    [maisi:/]
    @maisi = rw
    EOF
    
    [root@ecs ~]# cat > /data/svn/passwd << EOF
    [users]
    alice = 123456789
    EOF
    • [/]:所有仓库
    • [maisi:/]:仅maisi仓库
    • @maisi = rw:maisi组内所有用户拥有读写权限
  2. 创建仓库

    [root@ecs ~]# docker exec -it svn svnadmin create maisi

    每个仓库都有独立的conf/svnserve.conf配置文件,配置文件中指定密码文件(passwd)和授权文件(authz)的路径。

    可以将每个仓库的passwd和authz都指向同一个文件,这样只需要建立一套账号和授权即可。

    配置账号和授权

    [root@ecs ~]# 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后,则可以共用保存在客户端的用户名和密码进行认证。

  3. 重启服务

    [root@ecs ~]# docker restart svn

数据

  1. 备份

    [root@ecs ~]# svnadmin dump maisi > /data/svn/backup/maisi.dump
  2. 还原

    [root@ecs ~]# svnadmin load maisi < /data/svn/backup/maisi.dump

标签: none

添加新评论