首页 > 代码库 > subversion的2种部署方式

subversion的2种部署方式

一、简介

SVN全名Subversion,即版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个仓库(repository)中。这个仓库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。


二、方式1---独立服务器

主机介绍:

node1:192.168.0.166          #SVN的Server端

node2:192.168.0.156          #SVN的linux Client端

Windows:192.168.0.141        #SVN的Windows Client端


1. 安装SVN

[root@node1 ~]# yum install subversion mod_dav_svn -y


2. 制作仓库

[root@node1 ~]# mkdir /MySvn/
[root@node1 ~]# svnadmin create /MySvn/repos
[root@node1 ~]# cd /MySvn/repos
[root@node1 repos]# ls
conf  db  format  hooks  locks  README.txt
[root@node1 repos]# cd conf/
[root@node1 conf]# ls
authz  passwd  svnserve.conf


3. 配置SVN的配置文件

authz: SVN的权限文件

passwd: SVN的密码文件

svnserve.conf: SVN的配置文件

[root@node1 conf]# vim authz
[groups]
admin = admin,zhu       #admin组里有admin和zhu 2个成员
[repos:/]               #仓库名:/ 表示这个仓库的根目录
@admin = rw             #组名前面使用@,单个用户直接写用户名
xue = r
[root@node1 conf]# vim passwd
[users]
admin = admin           #用户名 = 密码
zhu = 12345
xue = qwer
[root@node1 conf]# vim svnserve.conf
[general]
anon-access = none          #匿名用户没有访问权限
auth-access = write
password-db = passwd
authz-db = authz


4. 启动SVN

[root@node1 ~]# svnserve -d -r /MySvn/             
[root@node1 ~]# netstat -tnlp | grep svn
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      2114/svnserve
[root@node1 ~]# iptables -I INPUT 1 -p tcp --dport 3690 -j ACCEPT    #放行端口

这里-r后面的参数,是用来指定SVN的根目录的,不要将仓库名写进去,即不要写成/MySvn/repos。


5. 测试

这里我先将/etc/目录下的文件导入到仓库中进行测试

[root@node1 ~]# svn import /etc/ file:///MySvn/repos/ -m "message"

-m后面的参数是备注信息,根据自己的需要写

linux(node2)上测试:

[root@node2 ~]# svn checkout svn://192.168.0.166/repos/ /mnt/           #IP后面直接跟仓库名,副本放到/mnt/目录下
Authentication realm: <svn://192.168.0.166:3690> 57532f62-ae95-428e-9a43-9a0a78173f2d
Password for ‘root‘:       #node2的root密码
Authentication realm: <svn://192.168.0.166:3690> 57532f62-ae95-428e-9a43-9a0a78173f2d
Username: admin
Password for ‘admin‘:      #上面配置的admin用户和密码

-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:

   <svn://192.168.0.166:3690> 57532f62-ae95-428e-9a43-9a0a78173f2d

can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the ‘store-plaintext-passwords‘ option to either ‘yes‘ or ‘no‘ in
‘/root/.subversion/servers‘.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes

密码文件的存放位置

[root@node2 ~]# tree .subversion/
.subversion/
├── auth
│   ├── svn.simple
│   │   └── 845e591d3dae91ace580695b8dc4a30d        #密码文件,可以将它删除,重新认证
│   ├── svn.ssl.client-passphrase
│   ├── svn.ssl.server
│   └── svn.username
├── config
├── README.txt
└── servers

这样在/mnt/目录下就有了SVN的一个副本。

[root@node2 mnt]# ls     #列出了部分文件
1.txt                  cron.deny                fstab             jvm            
abrt                   cron.hourly              gai.conf          jvm-commmon     
acpi                   cron.monthly             gconf             kde


Windows上测试:

wKiom1RkXFXhSPmaAAFS_v1gNJI666.jpg

提示输入用户名和密码,然后也会生成一个副本

wKiom1RkXJGj01UdAALlspRCh-E216.jpg



三、方式2--apache+svn

主机列表:

Server:192.168.0.146         #SVN的Server端

node2:192.168.0.156          #SVN的linux Client端

Windows:192.168.0.124        #SVN的Windows Client端


1. 下载所需的源码包

[root@server ~]# wget -c t 0 www.sqlite.org/2014/sqlite-autoconf-3080701.tar.gz
[root@server ~]# wget -c -t 0 apache.cs.utah.edu/subversion/subversion-1.8.10.tar.bz2
[root@server ~]# wget -c -t 0 http://apache.fayea.com/apache-mirror/apr/apr-1.5.1.tar.bz2
[root@server ~]# wget -c -t 0 http://apache.fayea.com/apache-mirror/apr/apr-util-1.5.4.tar.bz2
[root@server ~]# wget -c -t 0 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.bz2
[root@server ~]# wget -c -t 0 mirror.bit.edu.cn/apache//httpd/httpd-2.4.10.tar.bz2


2.安装apache

[root@server ~]# tar xf apr-1.5.1.tar.bz2
[root@server ~]# tar xf apr-util-1.5.4.tar.bz2
[root@server ~]# tar xf pcre-8.36.tar.bz2
[root@server ~]# tar xf httpd-2.4.10.tar.bz2

[root@server apr]# ./configure --prefix=/usr/local/apr           #安装apr
[root@server apr]# make && make install

[root@server apr-util]# ./configure --prefix=/usr/local/apr-util \      #安装apr-util
--with-apr=/usr/local/apr/
[root@server apr-util]# make && make install

[root@server pcre-8.36]# ./configure --prefix=/usr/local/pcre            #安装pcre
[root@server pcre-8.36]# make && make install

[root@server httpd-2.4.10]# ./configure  --prefix=/usr/local/apache \    #安装apache
--enable-dav --sysconfdir=/etc/httpd   --enable-so  --enable-ssl  --enable-track-vars  --enable-rewrite  --with-zlib  --enable-mods=most  --with-apr=/usr/local/apr  --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
[root@server httpd-2.4.10]# make
[root@server httpd-2.4.10]# make install


3. 安装subversion

[root@server ~]# tar xf sqlite-autoconf-3080701.tar.gz

[root@server sqlite-autoconf-3080701]# ./configure --prefix=/usr/local/sqlite    #安装sqlite
[root@server sqlite-autoconf-3080701]# make && make install

[root@server subversion-1.8.10]# ./configure --prefix=/usr/local/subversion \   #安装SVN
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-sqlite=/usr/local/sqlite --with-apxs=/usr/local/apache/bin/apxs  --with-zlib --enable-mod-activation
[root@server subversion-1.8.10]# make && make install

--enable-mod-activation选项一定要加,不然apache会找不到mod_dav_svn.so和mod_authz_svn.so这2个模块的。


4. 完善安装(一个良好的习惯)

[root@server ~]# vim /etc/profile
export PATH=$PATH:/usr/local/apache/bin/:/usr/local/subversion/bin/
[root@server ~]# . !$
#在PATH变量中添加apache和subversion的可执行文件

[root@server ~]# vim /etc/man.config
MANPATH /usr/local/apache/man
MANPATH /usr/local/subversion/share/man/
#让系统可以找到apache的帮助文档

[root@server ~]# vim /etc/ld.so.conf.d/apache-x86_64.conf
/usr/local/apache/lib
[root@server ~]# vim /etc/ld.so.conf.d/subverion-x86_64.conf
/usr/local/subversion/lib
[root@server ~]# ldconfig -v
#让系统可以找到apache和subversion的库文件

[root@server ~]# ln -sv /usr/local/apache/include /usr/include/apache
`/usr/include/apache/include‘ -> `/usr/local/apache/include‘
[root@server ~]# ln -sv /usr/local/subversion/include /usr/include/subverion
`/usr/include/subverion‘ -> `/usr/local/subversion/include‘
#让系统可以找到apache和subverion的头文件


5. 配置apache,让apache管理SVN

[root@server ~]# vim /etc/httpd/httpd.conf
LoadModule dav_svn_module     /usr/local/subversion/libexec/mod_dav_svn.so    #确保有这2行
LoadModule authz_svn_module   /usr/local/subversion/libexec/mod_authz_svn.so

User apache                   #修改这4行
Group apache
DocumentRoot "/OtherSvn"
<Directory "/OtherSvn">

pidFile "/var/run/httpd.pid"             #增加下面的配置
<Location /svn>          #这个路径可以随便写,到时URL后面加上这个路径就可以了
DAV svn
SVNParentPath /OtherSvn                  #版本库根目录(不要加上仓库名)
AuthType Basic                           #基本认证类型
AuthName "welcome you"                   #提示对话框的标题
AuthUserFile /OtherSvn/passwd            #登录的密码文件
AuthzSVNAccessFile /OtherSvn/auth.conf   #SVN的授权文件
Require valid-user                       #认证用户可以访问
</Location>


6.制作仓库并添加配置文件

[root@server ~]# mkdir /OtherSvn
[root@server ~]# svnadmin create /OtherSvn/OtherRepos         #制作仓库
[root@server ~]# cd /OtherSvn/
[root@server OtherSvn]# cp OtherRepos/conf/authz auth.conf
[root@server OtherSvn]# vim auth.conf                         #授权文件
[groups]
admin = admin,zhu
[OtherRepos:/]
@admin = rw
[root@server ~]# htpasswd -c -m -b /OtherSvn/passwd admin admin     #密码文件
Adding password for user admin

-c的意思是创建passwd文件,只有在第一次的时候才会使用。


7.修改文件权限并启动

[root@server ~]# useradd -r -s /sbin/nologin apache
[root@server ~]# chown -R apache:apache /OtherSvn/
[root@server ~]# chmod -R 755 /OtherSvn/
[root@server ~]# service httpd start
[root@server ~]# iptables -I INPUT 1 -m state --state NEW -p tcp --dport 80 -j ACCEPT

httpd的启动脚本放在附件里


8. 测试

还是将/etc/导入仓库中进行测试

[root@server ~]# svn import /etc/ file:///OtherSvn/OtherRepos/ -m "message"


Windows测试:

wKiom1RpX-jAaT6pAAFdt-0n0NA067.jpg

URL:SVN服务器IP地址 + Location后面指定的路径 + 仓库名

一定要加仓库名,不然会出现下面的报错

[Fri Nov 14 13:43:25.789643 2014] [:error] [pid 2048:tid 140506000836352] [client 192.168.0.124:52380] The URI does not contain the name of a repository.  [403, #190001]

意思就是URL里面没有包括仓库名


linux测试:

[root@node2 ~]# mkdir /SVN_Client
[root@node2 ~]# svn checkout http://192.168.0.146/svn/OtherRepos/ /SVN_Client
Authentication realm: <http://192.168.0.146:80> welcome you
Password for ‘root‘: 
Authentication realm: <http://192.168.0.146:80> welcome you
Username: admin
Password for ‘admin‘:
#只是路径不同了而已



四、备份和恢复

  1. svnadmin dump

参数介绍:

-r [--revision] :指定版本ARG(或X:Y范围)
--incremental   :以增量方式进行转存

用法:

svnadmin dump REPOS_PATH [-r LOWER[:UPPER] [--incremental]]

全量备份:

[root@server ~]# svnadmin dump /OtherSvn/OtherRepos/ > OtherRepos.bak

增量备份:

[root@server ~]# svnadmin dump /OtherSvn/OtherRepos/ -r 2 --incremental > OtherRepos2.bak

将版本1中的文件转存出来

恢复:

[root@server ~]# svnadmin create /OtherSvn/test
[root@server ~]# svnadmin load /OtherSvn/test/ < OtherRepos.bak
[root@server ~]# svnadmin load /OtherSvn/test/ < OtherRepos2.bak    #先还原全量再还原增量


2. svnadmin hotcopy

用法:

svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

[root@server ~]# svnadmin hotcopy /OtherSvn/OtherRepos/ /media/
[root@server ~]# cd /media/
[root@server media]# ls
conf  db  format  hooks  locks  README.txt
#恢复的时候,直接把文件移动过去就好了


本文出自 “My favorite technology” 博客,请务必保留此出处http://svenman.blog.51cto.com/6867097/1577385

subversion的2种部署方式