如何使用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