工作前准备!
系统使用centos6.2最小安装的系统!
系统安装好以后配置 ip地址 和 dns地址! 能ping通百度/google 确保可以上网!
一apache + subversion 环境的安装!(安装svn需要先安装apache,访问svn需要通过apache帐号)
1. 创建目录
mkdir -p /web/root #存放apache根目录也就是代替htdocs目录!
mkdir -p /web/log #存放apache的错误日志
mkdir -p /web/src #存放下载的安装文件
mkdir -p /web/svn #
2. 安装编译工具和软件包
cd /web/src
yum -y install gcc gcc-c++ make glibc glibc-devel glib2 glib2-devel patch autoconf automake
yum -y install ntp wget vixie-cron
3.下载/安装关联文件
wget http://archive.apache.org/dist/apr/apr-1.4.6.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.5.1.tar.gz
wget http://zlib.net/zlib-1.2.7.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.31.tar.gz
wget http://www.sqlite.org/sqlite-autoconf-3071401.tar.gz
tar -zxvf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure --prefix=/usr/local/apr
make
make install
cd ..
tar -zxvf apr-util-1.5.1.tar.gz
cd apr-util-1.5.1
./configure --with-apr=/usr/local/apr
make
make install
cd ..
tar -zxvf zlib-1.2.7.tar.gz
cd zlib-1.2.7
./configure --prefix=/usr/local/zlib
make
make install
cd ..
tar -zxvf pcre-8.31.tar.gz
cd pcre-8.31
./configure
make
make install
cd ..
tar -zxvf sqlite-autoconf-3071401.tar.gz
cd sqlite-autoconf-3071401
./configure --prefix=/usr/local/sqlite
make && make install
cd.
4. 下载安装apache2.2.9 ------- 因为subversion是1.6版本的 ,它和apache2.4版本兼容有问题!
wget http://archive.apache.org/dist/httpd/httpd-2.2.9.tar.gz
tar -zxvf httpd-2.4.3.tar.gz
cd httpd-2.4.3
./configure --prefix=/usr/local/apache2 --enable-so --enable-dav --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config ( --with-mpm=worker 可以添加提高性能)
make
make install
cd ..
(自己检测apache是否安装成功~)
5.下载安装subversion1.6.19
yum install expat-devel
wget http://subversion.tigris.org/downloads/subversion-1.6.19.tar.gz
tar -zxvf subversion-1.6.19.tar.gz
cd subversion-1.6.19
./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-ssl --with-zlib=/usr/local/zlib --enable-maintainer-mode --with-sqlite=/usr/local/sqlite
make
make install
cd..
到此svn安装完成
二:最主要的还是svn和apache的配置问题!!
---------------------这一步没有多大的用处----------------
为了方便使用subversion的命令,将subversion安装目录下的bin目录加入到Path中
vi /etc/profile 最后加入
SVN_HOME=/usr/local/subversion
PATH=$PATH:$SVN_HOME/bin:
export SUSBVERSION PATH
-----------------------------------------------------------------
1.创建账号密码文件添加apache用户
cd /
mkdir data
cd data
mkdir svn
cd svn
vi passwd.conf
apache用户的额添加:(用户是通过apache来访问svn的 所以用的是apache的用户)
第一次添加用户:/usr/local/apache2/bin/htpasswd -cm /data/svn/passwd.conf + aaa (用户名) 回车后输入两次密码!!
第二次添加用户:/usr/local/apache2/bin/htpasswd -m /data/svn/passwd.conf + bbb (用户名) 回车后输入两次密码!!
(/data/svn/ passwd.conf 文件里面可以看到用户, -c 覆盖写入,-m :用md5加密)
2.创建版本库
cd /data
mkdir svn
cd svn
mkdir code -----------------版本库code目录
mkdir test ------------------版本库test目录
cd /usr/local/subversion/bin
./svnadmin create /data/svn/code (到code下看是不是多了文件,多了就是说明版本库创建成功)
./svnadmin create /data/svn/test (到test下看是不是多了文件,多了就是说明版本库创建成功)
3.创建权限控制文件
cd /data/svn/
touch authz.conf
vi authz.conf
vi authz.conf
---------------
[/] #对于 /(根)目录(/date/svn) 设置权限如下
* = r #所有人对svn根目录都有读的权限 ()
[groups] #添加 "组"
Admin = aaa #添加apache(用户)为admin组的成员
system = bbb # 添加test(用户)为system组的成员
[test:/] #定义 用户/组 对test版本库的权限
@Admin = rw #admin组有读写的权限 (前面有@的是组没有@的是用户)
* = #所有人都没有权限,没有这句话所有人都能检出test酷里面的内容,因为继承了[/]的权限!!!
bbb = rw #apache对test版本库有rw权限
[code:/] # 定义 用户/组 对code版本库的权限
@Admin = rw # admin组对code版本库有rw权限!
--------------------
4.修改apache的配置文件
------------------------------------------------------------------------------------------------------------------------------------
打开apache的conf/httpd.conf,安装subversion后,apache的conf/httpd.conf文件会自动增加了模块
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
相应的so文件也自动copy到了apache/modules。这些工作就不用自己动手了。
---------------------------------------------------------------------------------------------------------------------------------------
首先我们需要在http.conf文件里的最后面添加版本库的模块! (我用的多模块方式!!)
<Location /svn>
DAV svn
SVNListParentPath on ----------------> #允许访问/svn目录 (多模块比单模块多了这条语句!!)
SVNParentPath /data/svn ----------------->定义版本库的目录(但模块需要写出具体的库如: /data/svn/test)
AuthType Basic ------------------> 启用基本的验证,用户名/密码验证
AuthName "Subversion repository" ------------------>
AuthUserFile /data/svn/passwd.conf ------------------> 身份验证文件的路径
AuthzSVNAccessFile /data/svn/authz.conf ---> 指定authz.conf文件的路径来限定各个用户或组在版本库中目录的访问权限
Require valid-user -------------------> #禁止匿名访问
#除了以上的语句以外还有其它的配置语句....以下的我没有用到..
#Satisfy Any 准许匿名访问!
#SVNIndexXSLT "/svnindex.xsl" #Subersion自带的XSLT样式表
#SSLRequireSSL #只允许https方式访问
</Location>
然后然后为了我们使用方便修要修改以下地方
DocumentRoot "/web/root" #把apache的网站根目录修改到/web/root目录
<Directory "/web/root"> #对/web/root目录进行权限的控制!
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ErrorLog "/web/log//error_log" #把错误日志文件放到/web/log/error_log文件里!(linux区分大小写!!)
修改apache配置文件以后重启apache后才能生效!
到此apache+svn配置成功!
检测方法
1.检查apache是否开启,没有开启的话先开启apache!!
/usr/local/apache2/bin/apachectl start
2.关闭linux的防火墙
service iptables stop
3.打开网页访问apache+svn 服务器的地址 出现一下"It works"字样,apache没问题
4.访问http://apache+svn服务器ip/svn/test 出现 登录 对话框 (用开设的apache帐号登陆)
登录后提示 : " test - Revision 0: /" svn安装成功!!
----重要提示!---- 注意:开设的apache帐号 (aaa/bbb) 他们的登录地址是 http://apache+svn服务器ip/svn/test 还是 http://apache+svn服务器ip/svn/code 是根据/data/svn/authz.conf 文件的配置决定的!
常用命令:
1.添加用户
/usr/local/apache2/bin/htpasswd -m /data/svn/passwd.conf bbb (用户名) 回车后输入两次密码!!
2.创建版本库
cd /usr/local/subversion/bin
svnadmin create /data/svn/code (到code下看是不是多了文件,多了就是说明版本库创建成功)
3.svn 检出命令
svn co /data/svn/test /web/root/
(只有第一次需要检出,以后用 svn update 就可以把上传的内容检出到/web/root里)
4.查看日志
svn log /data/svn/test
5.查看svn文件或目录状态
svn status
/data/svn/test
更多信息去这里 http://www.jb51.net/os/RedHat/2461.html
工作中遇到的问题:
1.目标: 在装有 svn、nginx 服务的上,实现用http协议访问传到svn上面的html文件!
步骤:首先配置nginx的反向解析,指定web访问的目录! 然后用svn的检出命令把需要查看的html文件检出到指定好的目录。 然后就能通过http://来访问svn检出的html文件!
2.版本库中有多层目录的权限分配!!
[groups]
admin = sunwn,www,wangyue
product = wangyue,lanrx,liubo
design = wany,shaow,wumin
develop = jinhao,shengsd,tongjh,shixl
system = sunwn,denglz
test = denglz,chenghm,test
operate = wangsq,wangrh
[/]
* = r
[ankang:/]
@admin = rw
* = r
[ankang:/decision]
sunwn = rw
* =
[ankang:/code]
@admin = rw
@develop = rw
* =
[ankang:/document/架构设计]
@admin = rw
* =
[ankang:/document/需求文档]
@admin = rw
@product = rw
* =
[ankang:/document/产品文档]
@admin = rw
@product = rw
* =
[ankang:/document/设计文档]
@admin = rw
@product =rw
@design = rw
* =
[ankang:/document/开发文档]
@admin = rw
@develop = rw
* =
限制版本库里面目录的权限时,必须限制所用户的权(* = ),如果有用户没有限制他将继承上一级目录的权限!
以[ankang:/document/开发文档]为例,如果没有"* = " 除了admin 和 develop 组的用户都有读的权限,因为[ankang:/] 给所有人读的权限了.