https://www.cnblogs.com/gne-hwz/p/8563982.html

svn http访问注意点:

  • 用http://方式访问,要配合apache的svn模块。
  • 用http://方式访问的svn服务端的守护进程不用启动,是通过apache的svn模块来调用svn命令操作svn检入检出的。
  • 访问方式不同,对应账户文件不同:
    • passwd文件 - svn://方式访问 - 使用的是自带的明文账户文件
    • http_users文件 - http://方式访问 - 使用的是apache创建的密文账户文件
  • SVNPathSVNParentPath 的区别
  • 新创建的仓库根目录要记得给apache用户授权
  • 记得添加auth文件里的用户权限及版本库权限

http方式访问的优点:

  • http_users文件密码文件是密文
  • 使用者使用http协议访问,更直接易懂
  • 可以配合域名使用
  • 服务端不用起svnserver守护进程

http方式访问的不足:

  • http_users文件auth文件都要手工加,配置麻烦,容易出错
  • 需要配合svnmanage或submin前端web来管理可以解决这个问题。==转到对应的web工具文档查看部署过程==

一、安装与配置apache

1.安装apache与svn模块

  • 安装
1
2
yum install httpd mod_dav_svn -y
systemctl enable httpd
  • 查看版本号
1
2
3
[root@localhost svn]# rpm -qa|grep http
httpd-2.4.6-88.el7.centos.x86_64
httpd-tools-2.4.6-88.el7.centos.x86_64
  • 查看svn模块
1
2
3
[root@localhost svn]# ll /etc/httpd/modules/|grep svn
-rwxr-xr-x. 1 root root 24200 Aug 11 2017 mod_authz_svn.so
-rwxr-xr-x. 1 root root 192928 Aug 11 2017 mod_dav_svn.so

2.配置httpd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[root@localhost conf]# cat httpd.conf
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
ServerName svn.test.com:80 # 改这里:配置一个域名
<Directory />
AllowOverride none
Require all granted # 改这里:允许访问根目录
</Directory>
DocumentRoot "/data/wwwroot/svn.test.com" # 改这里:根目录
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.php # 改这里:增加index.php
</IfModule>
<Files ".ht*">
Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig /etc/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php # 改这里:apache调用php
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on

3.配置vhosts

SVNPath 与 SVNParentPath 区别:

  • SVNPath 用于只有一个项目的情况,后面加这个项目的绝对路径。此时如果在主目录下面再建新项目,则不能访问,提示没有权限,需要再单独增加一个Location
  • SVNParentPath 通来设置所有项目的父目录,这个父目录下可以有多个项目仓库,而一条Location可以匹配所有的项目仓库。

SVNParentPath 配置匹配多个项目仓库

  • /usr/local/apache/conf/extra/httpd-vhosts.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost conf.d]# cat subversion.conf 
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so # 两个svn模块
<VirtualHost *:80> # 虚拟主机域名:端口号
DocumentRoot "/data/wwwroot/svn.test.com" # 根目录
ServerName svn.test.com
ServerAlias svn.test.com
ErrorLog "/data/httplogs/svn.test.com-error.log"
CustomLog "/data/httplogs/svn.test.com-access.log" complex
<Location /svn> # uri
DAV svn
SVNParentPath /data/svn/svn_data # 项目仓库父目录
AuthType Basic
AuthName 'test SVN REPOSITORY'
AuthUserFile /data/svn/svn_pass/http_users # 用户账户文件: 所有仓库共用一套权限配置
AuthzSVNAccessFile /data/svn/svn_pass/authz # 用户账户文件: 所有仓库共用一套权限配置
Require valid-user
</Location>
</VirtualHost>
  • 父目录结构
1
2
3
4
5
[root@localhost svn]# ll /data/svn_data/svn
total 12
drwxr-xr-x. 6 www www 4096 Jan 24 15:04 test1 # 多个仓库
drwxr-xr-x. 6 www www 4096 Jan 24 15:04 test2
drwxr-xr-x. 6 www www 4096 Jan 24 15:04 test3
  • http访问
1
2
3
http://192.168.100.158/svn/test1/   # 访问仓库test1
http://192.168.100.158/svn/test2/
http://192.168.100.158/svn/test3/

SVNPath 配置单个项目仓库

  • 一个localtion对应一个项目仓库
  • SVNPath后跟具体的项目仓库的绝对路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<VirtualHost 192.168.100.158:80>
DocumentRoot "/data/svn_data"
ServerName 192.168.100.158
ServerAlias 192.168.100.158
ErrorLog "/data/httplogs/192.168.100.158-error.log"
CustomLog "/data/httplogs/192.168.100.158-access.log" complex
#<Location /svn/>
# DAV svn
# #SVNPath /data/svn_data/svn/test1
# SVNParentPath /data/svn_data/svn/
# AuthType Basic
# AuthName 'test SVN REPOSITORY'
# AuthUserFile /data/svn_pass/http_users
# AuthzSVNAccessFile /data/svn_pass/authz
# Require valid-user
#</Location>
<Location /svn/test1>
DAV svn
SVNPath /data/svn_data/svn/test1
#SVNParentPath /data/svn_data/svn/
AuthType Basic
AuthName 'test SVN REPOSITORY'
AuthUserFile /data/svn_pass/http_users
AuthzSVNAccessFile /data/svn_pass/authz
Require valid-user
</Location>
<Location /svn/test2>
DAV svn
SVNPath /data/svn_data/svn/test2
#SVNParentPath /data/svn_data/svn/
AuthType Basic
AuthName 'test SVN REPOSITORY'
AuthUserFile /data/svn_pass/http_users
AuthzSVNAccessFile /data/svn_pass/authz
Require valid-user
</Location>
</VirtualHost>

3.http_users文件创建账户

  • 第一次创建

    1
    htpasswd -c -m /data/svn/svn_pass/http_users admin

-c 第一次使用时-c生成文件

-m md5密文

1
* 而后添加用户

htpasswd -m /data/svn/svn_pass/http_users lyc

1
## 4.授权版本库根目录

chown -R apache.apache /data/svn/svn_data

1
## 5.apache reload

apachectl -t # 检查配置文件
apachectl graceful # reload
#/usr/local/apache-2.2.29/bin/httpd -k start # 启动服务

1
# 二、配置svn

创建版本库test2

svnadmin create /data/svn/svn_data/test2

配置权限authz

[groups]
ops_test = 1330lyc,admin,lyc # 新加的账户记得授权

[/]
@ops_test = rw

[test:/]
@ops_test = rw

[test2:/] # 新加的这个版本库要记得授权
@ops_test = rw

[root@localhost svn_pass]# cat http_users
admin:$apr1$WKnJgxtp$z55zr6KfdvmT09Tztf8/b/
lyc:$apr1$sK0DIpyK$kBvV8vJV6gROebJ.K5u6O.

1
2
3
# 三、客户端http://方式访问

> http://192.168.100.158/test2