最近公司要求搭建svn的管理可视化页面。遇到不少小坑大坑,总共折腾了两天才搞定,记录一下。
先划重点,遇到最大的坑是
搭建好了管理界面,新建一个项目,新建一个用户,设置权限却没有效果。
最初参考了这篇文章的教程
centos7搭建SVN+Apache+IF.svnadmin支持https实现web管理SVN
下面开始进入正题
1. apche 启动页面无法找到,显示默认欢迎界面
排查apache日志
cat /var/log/httpd/error_log
[Wed Sep 25 09:57:37.677150 2019] [autoindex:error] [pid 29643] [client 192.168.0.30:32460] AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.html,index.php) found, and server-generated directory index forbidden by Options directive
日志说明了进程试图在 /var/www/html/
查找主页文件。这是虚拟主机路径未设置导致的。
在上面文章的配置基础上添加虚拟主机路径设置
vim /etc/httpd/conf.d/subversion.conf
<VirtualHost *:80>
ServerName localhost:80
DocumentRoot "/var/www/html/svnadmin"
# RewriteEngine on
# RewriteCond %{HTTPS} !=on
# RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>
2. selinux 问题导致php无法复制文件
进入网站首页时报错,
Error: Could not copy configuration file template. Require write permission (777) to "data" folder and all containing files.
#0 /var/www/html/svnadmin/index.php(20): include_once()
#1 {main}
根据日志猜测是权限问题,然而 chown和chmod操作都做了,ll 查看权限也是对的。
再次查看日志
cat /var/log/httpd/error_log
[:error] PHP Warning: copy(./data/config.ini): failed to open stream: Permission denied in /var/www/html/svnadmin/include/config.inc.php on line 33
查看源代码
vim /var/www/html/svnadmin/include/config.inc.php
看来是copy执行失败, 报错也是权限问题,直接搜索之后,发现是selinux的问题,关闭selinux即可。
3. 在配置界面创建和分配的权限没有实际效果
重点来了,多次进行权限配置都没有效果。多次搜索也没找到原因。
提出这个问题的人不少,比如下面的链接。
https://blog.csdn.net/zhq_zvik/article/details/80084783
can not login svn with the user create by web page #148
先说原因:
svn有两种部署方式, SVN有两种模式,一种是使用svnserve -d -r /cz/svn/的模式进行启动,此时,访问的链接为svn:开头,另一种是使用apache,加载mod_dav_svn模块进行启动,此时,访问链接为http或者https。
svn两种方式的区别.
1:访问协议不同,一个是svn,一个是http
2:存储密码文件不同,
svn:以明文方式存储,存储格式为:[users]开头之后用户名和密码用=连接
http:以设定的apache认证方式加密后,进行存储,用户和加密后的密码用:连接
安装svnserve 后,启动脚本启动也好 systecmctl 启动也好, 都是直接调用svnserve启动,对于svnserve, 默认读取 每个项目的 conf 文件夹下面的passwd 和 authz 文件,用作身份认证。
而安装apache后,对用户和权限进行修改的操作,都只是修改两个文件(而不是每个项目下的文件),这两个文件在登录 ifsvnadmin 的时候进行配置。 因此,不论如何进行配置,当使用 svn://ip/dir 的方式进行连接,都和 ifsvnadmin 配置无关
所以最终方案是,关闭svnserve进程, 启动apache进程, svn客户端使用http协议进行连接,并且url中要添加 apache配置文件中的 location头。
例如使用 centos7搭建SVN+Apache+IF.svnadmin支持https实现web管理SVN 的配置文件,原来使用 svn://192.168.1.100/repos1
的路径 需要修改为 http://192.168.1.100:/svn/respo1
参考链接
https://www.cnblogs.com/Sungeek/p/6905102.html
https://blog.csdn.net/zhq_zvik/article/details/80084783
http://www.cs126.cn/index.php/archives/8/