svn+apache部署和服务器数据迁移

1.安装subversion

  1. 在线安装
    yum -y install subversion

  2. 离线安装
    将提供的subversion目录下的rpm包都上传到服务器中,若是没有rpm包,则可以直接在有外网的机器上搭一台和部署机器一致的centos系统,使用
    yum install --downloadonly --downloaddir=/root/subversion/ subversion

将软件所需的依赖包下载下来然后再上传到服务器中。

cd subversion 进入到该目录下

rpm -ivh *.rpm --nodeps
  1. 安装完成后执行svn --version命令,若是出现版本信息则安装成功

2.安装httpd

  1. 在线安装
yum -y install httpd
  1. 离线安装
    与离线安装subversion相同

若是出现以上提示,则执行以下两个命令即可

  1. 安装完成后使用httpd -version命令,若是出现httpd的版本信息则安装成功

3.安装mod_dav_svn

  1. 在线安装
yum -y install mod_dav_svn
  1. 离线安装

  2. 安装完成后使用ls /usr/lib64/httpd/modules命令查看是否该目录下有mod_authz_svn.somod_dav_svn.so即可,若是有这两个依赖包则表示安装成功了,若是没有则安装失败。

4.创建svn仓库

找一个磁盘空间比较大的目录,创建一个空文件夹

然后使用svnadmin create /opt/svnrepo/test创建一个名为test的空仓库,若是有需要迁移过来的备份文件,则使用以下命令进行迁移

svnadmin load /opt/svnrepo/test/ < test.dump

5.修改httpd的配置文件

httpd的配置文件一般都放在/etc/httpd目录下,目录结构如下

conf:存放apache自身服务的配置文件
conf.d:存放其他服务的配置文件
conf.modules.d:存放模块加载的配置文件
logs:日志文件
modules:存放httpd所依赖的一些库文件,和上文中提到的/usr/lib64/httpd/modules中的文件完全一致
注意:conf.d和conf.modules.d中的所有.conf文件都会被加载到conf/httpd.conf这个配置文件中去,之所以分成几个目录主要是为了方便管理。
若是mod_dav_svn安装成功了,则conf.modules.d目录下一般会自动产生一个10-subversion.conf文件,若是没有自动生成,则自己新建一个10-suversion.conf文件即可。
添加文件内容如下:

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
LoadModule dontdothat_module  modules/mod_dontdothat.so

再在conf.d目录下新建一个subversion.conf文件,若是有则直接编辑即可。

加入以下内容:

<Location /svn>
     DAV svn
     SVNParentPath /opt/svnrepo
     AuthType Basic
     AuthName "Test Httpd-SVN"
     AuthUserFile /etc/svnpasswd
     AuthzSVNAccessFile /etc/svnaccess
     Require valid-user
</Location>

其中我标红的文字是根据自己实际需求需要更改的
<Location /svn>中的/svn是我们通过浏览器访问svn仓库是需要输的前缀,可以自行更改
SVNParentPath /opt/svnrepo表示仓库所在的父目录是/opt/svnrepo,若是只需要配置单个仓库,也可以使用

SVNPath 仓库所在目录 
进行配置
AuthType一般不更改
AuthName可改可不改
AuthUserFile表示用户和密码信息所在的文件,后面会介绍如何生成这个文件,可自行更改
AuthzSVNAccessFile表示用户访问权限所在的文件,后面会介绍如何生成这个文件,可自行更改
Require valid-user表示访问仓库时需要输入用户和密码,若是这一项不配则前面两项都无效,若是不设置那么大家都可以访问你的代码仓库,建议设置。

6.用户信息配置

htpasswd -c /etc/svnpasswd test

执行该命令会让提示输入两次密码,两次密码必须一致。
-c表示会新建一个/etc/svnpasswd的文件,然后会创建一个叫test的用户,并将用户和密码信息存入/etc/svnpasswd这个文件中,注意这里的/etc/svnpasswd必须和前一节中AuthUserFile配置项的值一致。
若是不想输两次密码也可使用-b参数直接将密码在命令行中给出

当我们想修改密码时,则不要加-c参数即可

注意用户的密码都是以密文形式存放在svnpasswd文件中的。

配置完用户之后还需配置用户的访问权限,即AuthzSVNAccessFile的值表示的那个文件,这个文件需要用户手动生成。

添加内容如下:

[😕]域下的用户拥有对/opt/svnrepo/(上文你所创建的仓库所在的目录)目录下的所有仓库的读写权限。
[:/test]域下的用户拥有对/opt/svnrepo/目录下的test仓库(上文所创建的仓库)的读写权限。
可以根据需要进行分配,这里的用户必须是svnpasswd中已有的用户。

7.服务启停

启动httpd:systemctl start httpd
停止httpd:systemctl stop httpd

启动完httpd服务后已经可以直接用浏览器访问了

输入正确的用户名和密码(svnpasswd中的用户和密码)

注意:若是不输仓库名字,只输/svn则会显示403Forbidden,这属于正常现象。

为了方便用户可以使用svn客户端访问,在将svnserve服务启动起来。
启动svn:svnserve -d -r /opt/svnrepo
停止svn:先使用ps -aux | grep svnserve找到svnserve对应的进程号

kill -9 进程号

将svn的服务进程杀掉即可

8.服务器数据迁移

先在新服务器上按照上上述7步所示步骤装好svn和httpd
在旧服务器上

svnadmin dump 仓库所在位置 > 备份文件位置/备份文件名.dump

比如

svnadmin dump /opt/svnrepos/myrepo > /opt/myrepo.dump

通过scp或者其他方式将test.dump上传到新的服务器
scp方式(在新的服务器上执行)

scp root@旧服务器ip地址:/opt/myrepo.dump /opt/myrepo.dump

在新的服务器上执行以下命令
1.创建仓库

svnadmin create /opt/svnrepos/myrepo

2.恢复文件

svnadmin load /opt/svnrepos/myrepo < /opt/myrepo.dump

注意:这里的/opt/svnrepos必须是你搭建svn时配置的subversion.conf中的SVNParentPath项一致,否则浏览器会访问不到

9.搭建过程中遇到的一些问题

1.权限不足
后台日志如下:

我的解决办法:
提示权限不足,则表示httpd没有访问这个目录的权限
使用ps -aux | grep httpd查看httpd服务的启动者,可以发现httpd服务基本上都是apache这个用户启动的,这个用户是在安装httpd时自动创建的,所以需要将配置文件和仓库目录的权限给apache。

chown -R apache:apache svnaccess所在目录/svnaccess
chown -R apache:apache svnpasswd所在目录/svnpasswd
chown -R apache:apache 仓库所在目录
chown -R 777 仓库所在目录 

用户提交代码时提示权限不足问题:

svn服务器操作仓库中的文件时默认用的是svn组中的svn用户,这个用户是在装svn时自动创建的,这个问题说明svn用户权限不够,无法操作仓库所在目录,使用chown -R svn:svn 仓库所在目录,将该目录的操作权限给用户svn即可。
2.路径输错

刚开始装时一直以为这里要输入的是仓库名字或者仓库父目录+仓库名字,后面发现这里输的路径是subversion.conf中<Location /svn>配置的那个路径。
3.Could not open the requested SVN filesystem
前台报错:

后台httpd的日志文件(/etc/httpd/logs/error_log)报错:

这个错误是困扰我最久的,经过到网上查阅大量资料后发现应该是我的svn版本和httpd服务的版本不匹配导致的,svn的版本过高,所以会导致
Expected FS format between ‘1’ and ‘4’;found format ‘6’这个错误。
因为我一开始安装svn时不是用的rpm包安装,而是用的从官网下载的svn源码按照教程进行的编译安装,我下载的是1.8.9版本,而我的httpd是2.4.6版本,并且是通过rpm包安装的,导致版本不匹配,最后我将svn卸掉用rpm包重新装了一个svn,这个svn是centos7.9使用yum安装时安装的那个版本,版本号为1.7.14,我将这个版本装上后按照上面所述的步骤又重新走了一遍并将仓库重新用.dump文件恢复了一遍,最后终于解决。
所以我们在linux上安装系统时,能连外网用yum安装尽量用yum安装,不能连就用我前面所说过的方法在能连外网的机器上将软件的rpm包及其依赖包下载下来,尽量不要自己编译安装,很容易会出现各种问题。
这几个问题是我第一次装时所碰到的,在教程中已经将这些问题基本规避掉了,按照教程走应该是不会再出现这些问题,若是出现其他问题请自行百度查询。

由于不方便上传图片,所以该教程是没有图片的,若是需要带图片的版本可到我的资源中下载word文档。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值