如何使用Docker搭建svn服务

下载SVN docker镜像

docker pull elleflorio/svn-server

 

创建目录(示例):

 /opt/svn

 /opt/svn/repo

 /opt/svn/config

 /opt/svn/svnadmin_data

 

运行Docker(先挂载临时目录)

 docker run --name svn -v /opt/sdb/svn:/tmp/svn -d elleflorio/svn-server

 

进入Docker

docker exec -it svn sh

查看配置文件 /etc/apache2/conf.d/dav_svn.conf

LoadModule dav_svn_module /usr/lib/apache2/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib/apache2/mod_authz_svn.so

<Location /svn>
     DAV svn
     SVNParentPath /home/svn
     SVNListParentPath On
     AuthType Basic
     AuthName "Subversion Repository"
     AuthUserFile /etc/subversion/passwd
     AuthzSVNAccessFile /etc/subversion/subversion-access-control
     Require valid-user
  </Location>

 

拷贝配置文件(即拷贝到挂载的卷上)

cp /etc/subversion/*  /tmp/svn/config

cp /opt/svnadmin/data/* /tmp/svn/svnadmin_data

  退出容器

     exit

 

 删除容器 (后面需要用不同的参数挂载卷)

  docker stop svn && docker rm svn

 

 修改权限可写

  进入/opt/svn目录,修改权限

  sudo chmod -R a+w *

 

 重新运行容器并挂载配置

 docker run --name svn -v /opt/svn/repo:/home/svn -v /opt/svn/config:/etc/subversion -v /opt/svn/svnadmin_data:/opt/svnadmin/data  -p 80:80 -p 3690:3690 -d elleflorio/svn-server

 

进入Docker创建repository

mkdir -p /home/svn/myrep
svnadmin create --pre-1.6-compatible /home/svn/myrep

 

添加用户访问权限

vi /etc/subversion/subversion-access-control

[groups]

[/]
* = 
admin = rw
test = rw

此处表示添加 admin , test用户具有读写权限

 

添加用户账号

htpasswd -b /etc/subversion/passwd admin <password>

htpasswd -b /etc/subversion/passwd test <password>

 

退出容器

exit

 

对新加的repository的文件夹添加写权限

进入/opt/svn/repo

sudo chmod -R a+w *

 

WEB访问SVN

在浏览器里输入http://<svn host>, 会出现以下页面

表示SVN服务正常启动

在浏览器地址后面加上svn, 即http://<svn host>/svn,会弹出提示框输入用户名和密码,登录成功后出现如下界面

 

配置svnadmin(一个php写的svn管理工具)

浏览器输入 http://<svn host>/svnadmin

第一次会出现如下界面,配置好了以后就不会出现 (配置数据目录就是上面步骤里Docker挂载的/opt/svn/svnadmin_data)

按照 上面步骤里提到的/etc/apache2/conf.d/dav_svn.conf的内容去填写,并点击test按钮验证,如下图,然后点击Save Configuration

点击Save ,跳到登录框,输入账号密码

 

输入admin的账号密码

 

 

修改密码

 

在svnadmin配置其他用户访问权限

此处配置的是用户访问svnadmin权限,和svn的仓储权限没关系

使用admin用户登录

 

 点击要修改的用户名

 

分配给User角色,然后退出以修改的用户登录,如下图

 

 

测试SVN功能

使用TortoiseSVN

 

然后试下提交文件,如果提交时提示权限错误,请到上面步骤里检查是否遗漏了对repo目录下的chmod的操作

 

注:如果是通过公网的https域名访问SVN服务时,在做branch/tag操作会出现

Unexpected HTTP Status 502 'Bad Gateway' 的错误

解决办法:

1. 把docker镜像里的/etc/apache2/httpd.conf 拷贝到宿主机上,比如直接cp /etc/subversion, 这个在上面的配置里是挂载到宿主机的目录上

2. 把httpd.conf拷贝到一个单独的目录,例如 /opt/svn/apache2/httpd.conf, 然后删掉原来的docker容器,重新启动新的容器,把httpd.conf挂载上去

 docker run --name svn -v /opt/svn/repo:/home/svn -v /opt/svn/config:/etc/subversion -v /opt/svn/svnadmin_data:/opt/svnadmin/data -v /opt/svn/apache2/httpd.conf:/etc/apache2/httpd.conf -p 80:80 -p 3690:3690 -d elleflorio/svn-server

3. 修改httpd.conf文件, 在LoadModule执行完之后添加如下一行

RequestHeader edit Destination ^https http early

如下图所示的位置 

4. 重启容器docker restart svn即可

 

 

参考文章 

https://hub.docker.com/r/elleflorio/svn-server

https://www.jianshu.com/p/0146b5ba69a6

https://stackoverflow.com/questions/47630758/subversion-edge-behind-reverse-proxy-server-returns-http-status-502-bad-gateway

posted on 2020-06-12 15:42  omage  阅读(1435)  评论(0编辑  收藏  举报