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创建的密文账户文件
SVNPath
与 SVNParentPath
的区别
- 新创建的仓库根目录要记得给
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
|
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
|
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 2 3 4
| htpasswd -c -m /data/svn/svn_pass/http_users admin
# -c 第一次使用时-c生成文件 # -m md5密文
|
而后添加用户
1
| htpasswd -m /data/svn/svn_pass/http_users lyc
|
4.授权版本库根目录
1
| chown -R apache.apache /data/svn/svn_data
|
5.apache reload
1 2 3
| apachectl -t # 检查配置文件 apachectl graceful # reload #/usr/local/apache-2.2.29/bin/httpd -k start # 启动服务
|
二、配置svn
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| ## 创建版本库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.
|
三、客户端http://方式访问
http://192.168.100.158/test2