svn仓库比较重要的几个文件
conf/authz 权限文件
conf/passwd 密码文件
conf/svnserve.conf 整体配置文件
hooks/post-commit 提交文件后的回调脚本
hooks/pre-revprop-change 允许改变版本库属性的回调脚本
svn服务器有3种运行方式
第一种 : svnserve
1、安装svn
yum install subversion
2、创建版本库
svnadmin create /data/svn_mirror/wepu_mirror 创建一个版本库
3、配置版本库
cd /data/svn_mirror/wepu_mirror/
3.1、vim conf/svnserve.conf 修改整体配置文件
[general]
anon-access = none 匿名用户无任何权限
auth-access = write 授权用户可写
authz-db = authz 权限文件位置,规定了谁对哪些目录有哪些权限
password-db = passwd 密码文件位置
realm = WePu 版本库ID,客户端根据这个字段判断是不是同一个版本库
3.2、vim conf/authz
3.3、vim conf/passwd
[users]
admin = admin 账号 = 密码
4、启动svn服务,(客户端才能访问服务器上版本库)
svnserve -d -r /data/svn_mirror/
-d 后台运行
-r /data/svn_mirror/ 所有请求的url的默认前缀
5、同步仓库到本地
svn co[checkout] svn://IP/wepu_mirror
这条命令的意思是,用svn协议,到IP的主机上,去找/data/svn_mirror/wepu_mirror仓库
第二种 : HTTP认证
(要保证启动Apache的用户,对所有仓库有读写权限)
用apace代理我们的svn,需要为apace安装mod_dav模块(这个模块主要是强化了apache的写能力)
1、/etc/httpd/conf/httpd.conf 编辑Apache配置文件,在最后添加如下代码
<Location /wepu> #/wepu 表示所有包含/wepu的url全部做如下处理
DAV svn #调用DAV,这里只能写svn具体原因暂时不明白
SVNParentPath /data/svn_mirror/ 和svnserve 的-r 参数功能一样
Require valid-user #指定所有用户必须经过认证
AuthType Basic #使用基本的密码验证
AuthName "Wepu Knowledge" #验证时的提示语,必不可少
AuthUserFile /etc/svn-auth #验证的密码文件,生成密码 htpasswd -cm filename username)
#AuthLDAPURL "ldap://203.195.158.131/ou=People,dc=1v,dc=cn?uid"
#AuthBasicProvider ldap 或者也可用ldap验证
#AuthzLDAPAuthoritative off
AuthzSVNAccessFile /data/test/conf/authz #密码验证过了,之后查看此文件,判断哪些用户对哪些目录具有哪些权限
</Location>
2、service httpd restart 重启apache服务器
3、同步版本库到本地
svn co[checkout] http://IP/wepu_mirror 协议变成 http 了
4、配置用户对版本库的权限(与svnserv有一点不同,svnserv方式不用指定版本库名称,每个版本库管理有自己权限文件)
[版本库名称:/] 对指定版本库的根目录
admin = r admin用户有读权限
[版本库名称:/install] 对指定版本库下的install目录
@admin = rw admin组用户有读写权限
3、第三种方式 Apache+usvn
(要保证启动Apache的用户,对所有仓库,usvn有读写权限)
1、安装PHP,php支持dav的模块,mysql
yum install -y php
yum install -y mod_dav_svn.x86_64
yum install -y mysql mysql-server
将usvn包放到Apache目录下,并更名为usvn
2、Vim /etc/httpd/conf/httpd.conf
添加
<Directory "/data/apache">
AllowOverride all 这句非常重要,不然之后安装usvn时就会有问题
Order allow,deny
Allow from all
</Directory>
3、安装usvn
http://IP/usvn/public/install.php
然后一直下一步,直到有一步填写如下信息
-----------------------------------
AuthUserFile /data/apache/usvn/data/htpasswd
AuthzSVNAccessFile /data/apache/usvn/data/auth
最后一行是访问路径:/usvn/public/svn/ (保持默认,千万别做改动)
-----------------------------------
最后一步会让你再次修改http.conf文件,并重启Apache
<Location /usvn/public/svn/>
ErrorDocument 404 default
DAV svn
Require valid-user
SVNParentPath /data/apache/usvn/data/svn
SVNListParentPath off
AuthType Basic
AuthName "USVN"
AuthUserFile /data/apache/usvn/data/htpasswd
AuthzSVNAccessFile /data/apache/usvn/data/authz
</Location>
4、进入usvn
http://IP/usvn/public
提交成功发送邮件通知(有待补充)
安装sendmail
yum install sendmail
让Apache用户有权发送邮件
chown apache:apache -R /var/spool/clientmqueue/
vim 版本库路径/hooks/post-commit
在最后加上一行发送邮件命令就行了,
实时同步镜像
host_backup: svnadmin create mirror
host_backup: echo '#!/bin/sh' > 版本库/hooks/pre-revprop-change
host_backup: echo 'exit 0' >> 版本库/hooks/pre-revprop-change
host_backup: chmod +x 版本库/hooks/pre-revprop-change
host_backup: 按需配置 版本库/conf/ 目录下的各种权限
host_main: svnsync init svn://host_backup/mirror file:///main --username admin --password admin
host_main: echo "/usr/bin/svnsync sync --non-interactive svn://203.195.137.235/wepu_mirror --username admin --password admin" > 版本库/hooks/post-commit
其他
以上过程需要加载的一些模块:
#LoadModule apr_ldap_ssl_init /usr/lib64/apr-util-1/apr_ldap.so
#LoadModule ldap_module /usr/lib64/httpd/modules/mod_ldap.so
#LoadModule dav_module /usr/lib64/httpd/modules/mod_dav.so
#LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so
#LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so
#如果还有其他错误,看看这个变量是不是被人改过$LD_LIBRARY_PATH(搜索库的PATH)
常用命令:
svn list file:///data/svnrepo/
svnadmin create /data/svn_mirror/wepu_mirror
svn commit -m "delete"
svn delete first/
svn import /root/bare2 file:///data/svnrepo/bare2 -m "bare2"
svn status -v -u
svn revert filename
svnserve -d(deamod) -r(base path)
SVN 其他应用
SVN + WebServer(Apache 或Tomcat)用作web程序的实时发布(基于centos 6.2)
这套系统的意义有以下几点
1、简化部署,svn commit之后即可在web上访问
2、提供版本回溯功能,记录每一次改变,随时可以回溯任意一个版本
数据结构如下
主要的工作原理是:每次client B 端提交之后,触发服务器上svn server仓库中的post-commit钩子脚本,这个钩子脚本将client B提交的更新同步到 Client A,然后从client A中内容全部复制到web server 容器中
关键代码(svn server中钩子脚本):
vim hooks/post-commit
#!/bin/sh
export LANG="zh_CN.UTF-8" #一定要加,不然出现文件名出现中文时,将终止svn update
cd /var/www/client/apache
svn update # 同步更新
rm -rf /var/www/apache/* # 删除web 容器下的内容
cp -r /var/www/client/apache/* /var/www/apache/ # 将更新后的内容复制到web server