从零开始搭建一个从Win7环境备份至CentOS7的SVN双机备份环境
★几个关键的事项★
- 需要关闭防火墙filewalld跟selinux ,在root用户下操作:
[root@localhost svnRepos]# systemctl stop firewalld
[root@localhost svnRepos]# systemctl disable firewalld
[root@localhost svnRepos]# systemctl status firewalld
[root@localhost svnRepos]# vi /etc/selinux/config
# 把SELINUX=enforcing 改成 SELINUX=disabled
- 因为CentOS7安装的apache服务器httpd都是以apache组的apache用户身份访问,所以需要把apache用户添加到我们的SVN目录授权访问的组(本文中是cqgk组的cqgk用户拥有SVN目录权限),并且确保这个组对SVN目录有写权限
- 需要安装以下列表内容:
yum install httpd
yum install epel-release
yum install subversion # 需要按照下面的步骤添加最新的1.10版本的源配置后再安装
yum install mod_dav_svn # mod_dav_svn是apache服务器访问svn的一个模块,安装成功后会有两个so:
/usr/lib64/httpd/modules/mod_dav_svn.so、/usr/lib64/httpd/modules/mod_authz_svn.so
- 配置最多的http.conf里面修改内容:
- 找到里面的User apache、Group apache,分别修改为:User cqgk、Group cqgk,因为本文中的SVN目录所属用户、所属组均为cqgk
- 配置访问地址:找到ServerName 这样,修改后面的内容为实际访问的本机地址,例如本文中的
ServerName 192.168.1.253:80- 在最后添加以下两行:
LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so- 在最后再添加SVN的配置信息如下(多仓库):
<Location /svn-2>
DAV svn
SVNListParentPath on
# 对于多仓库,需要配置SVNParentPath
SVNParentPath /home/cqgk/svnRepos
AuthType Basic
AuthName "Hello, Subversion repos"
# 控制哪些用户可以访问svn,跟前面配置的路径一致
AuthzSVNAccessFile /etc/httpd/conf.d/svn-policy-file
# 授权用户的认证信息在哪里,跟前面配置的密码信息一致
AuthUserFile /etc/httpd/conf.d/svn-auth-conf
Require valid-user
</Location>
- 关于最后访问时SVN根目录可以,但是进入子仓库时提示:Could not find the requested SVN filesystem,请看最后一个疑问的暂时解决方案。
系统篇
1.安装CentOS7 7.4.1708_x86_64,下载地址:
CentOS7 7.4.1708_64 DVD 版本2.下载最新的UltraISO软件,用它制作一个CentOS7的启动U盘,操作很简单:
【会格式化U盘,请及时备份重要资料】
启动UltraISO,从菜单:文件->打开,选择第1步下载的.iso文件
选择菜单:启动->写入硬盘映像,然后弹出对话框里的【写入方式】选择USB-HDD+,其它的保持默认,点击写入按钮等待制作完成。
3.在电脑上把U盘的卷标修改为:CENTOS7,后面需要用到这个名字
4.电脑插入制作好的U盘,进入BISO设置从这个U盘启动,进入CentOS的启动菜单界面
5.通过上下箭头选择第一个菜单项:Install CentOS 7,然后按TAB按键,底下会出现一行英文,大体意思是说要安装的源路径,可以看到有LABLE=CentOS 7…X86…64… 一长串的内容
把LABLE等号后面的这个内容修改为:CENTOS7,这个内容就是前面第3步修改的卷标名,区分大小写,必须跟卷标名完全一致,然后回车会自动重启进入到图形安装界面。
6.进入安装界面,第一步就是选择语言,选择我天朝的语言;下一步,时区选择上海时区;软件选择GNOME图形桌面(否则进入的是命令行操作界面,我是还没到那个层次,搞不定),GNOME附加项的内容根据需要勾选.
我选择的GNOME附加选项是:GNOME应用程序、互联网应用程序、办公套件、开发工具、传统X Windows系统的兼容性
7.安装位置
选择要把系统安装到那个硬盘,点进去后,选择硬盘(如果有多个就都勾选),然后设置具体分区,/boot挂载点用于存放系统启动相关的,大小设置不超过8G,一般设置4G足够了,可以多搞几个swap交换区,单个swap交换区大小一般是内存的2倍,然后/挂载点跟/home挂载点根据需要分配(/home 这个挂载点我是把1T硬盘剩下的800多G都给它了)
如果是多个硬盘,前面在选择安装位置时,都勾选上,然后在后面的分区时,设备类型就不能选标准的了,要选LVM类型的,它是在分区跟磁盘更上层的概念,会把多个磁盘连在一起使用。
8.进入安装界面,还有两个黄色的感叹号选项需要配置:设置root密码、创建cqgk用户及密码
配置篇
- 安装httpd
yum -y install httpd
- 卸载CentOS7 默认安装的svn 1.7版本
yum remove subversion
rpm -qa subversion #输入查询如果不显示任何内容表示卸载成功
创建一个yum repo文件:vi /etc/yum.repos.d/wandisco-svn.repo
输入以下内容并且保存:
[WandiscoSVN]
name=Wandisco SVN Repo baseurl=http://opensource.wandisco.com/centos/7/svn-1.10/RPMS/$basearch/
enabled=1
gpgcheck=0- 安装svn最新的1.10版本
yum -y install subversion
如果提示错误:软件包:subversion-1.10.0-1.x86_64 (WandiscoSVN) 需要:libserf-1.so.0()(64bit) ,则先安装:
yum install epel-release
然后重新输入命令安装svn:
yum -y install subversion
装完后,输入 svn --version,会显示当前安装的版本信息
- cd到cqgk的主目录:/home/cqgk,创建SVN目录:mkdir svnRespo,然后进入svnRespo批量创建svn库目录:
mkdir service.foundation service.order web.miniprogram front.admin service.goods web.scheduler service.market uapp web.wechat
然后逐个初始化svn库:
svnadmin create front.admin/
svnadmin create service.foundation/
…
- 进入到/home/cqgk/svnRepo 目录,批量删除各个子库下面的conf目录里面的授权、密码文件(用不到,后面会统一指向外层的文件,方便控制,否则对于多仓库的管理非常麻烦)
[cqgk@localhost svnRespo]$ find . -name 'authz' -type f -print -exec rm -rf {} \;
[cqgk@localhost svnRespo]$ find . -name 'passwd' -type f -print -exec rm -rf {} \;
- 逐个进入到子仓库的conf目录,修改svnserve.conf文件中仓库的授权、账号文件路径:
在svnserve.conf文件的[general] 下面加入以下代码
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db= /etc/httpd/conf.d/svn-auth-conf
#访问控制文件
authz-db = /etc/httpd/conf.d/svn-policy-file
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm=/home/cqgk/svnRepos- 切换到root用户,创建前面这一步指定的授权控制以及密码验证文件
vi /etc/httpd/conf.d/svn-auth-conf
然后保存
vi /etc/httpd/conf.d/svn-policy-file
按i进入编辑模式,把以下内容粘贴进去:
[aliases]
[groups]
#表示cqgk跟xiaochuanyi两个用户都属于cqgk组
cqgk = cqgk,xiaochuanyi
# 如果要允许用户对整个svn库根目录都拥有读写权限
# [/]
# 用户名 = rw
# 如果只是允许用户对svn库下面某个子目录拥有读写权限
# [xxx:/]
# 用户名 = rw
[/]
@cqgk = rw然后按Esc退出编辑模式保存,shift+:进入命令行模式,输入wq,回车,保存成功。
- 因为整个仓库的最顶级目录所属用户组是cqgk,而apache用户默认不是属于cqgk组,需要添加到这个组:
[root@localhost svnRespo]# usermod -G cqgk apache
- 为前面授权群组中的两个用户:cqgk、xiaochuanyi创建用于http访问svn的密码:
[root@localhost svnRespo]# htpasswd /etc/httpd/conf.d/svn-auth-conf xiaochuanyi
输入两次一样的密码,即可为用户配置用于鉴权svn访问权限时用的密码了
- 为httpd配置通过http方式访问svn的信息:
[root@localhost svnRespo]# vi /etc/httpd/conf/httpd.conf
在文件的最后,插入以下内容:
# 以下两行是http方式通过apache访问svn的通讯必须的库
LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so
LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so # 以下内容是配置http://ip地址/路径 方式访问的属性:
<Location /svn>
DAV svn
SVNListParentPath on
# 对于多仓库,需要配置SVNParentPath
SVNParentPath /home/cqgk/svnRespo/
AuthType Basic
AuthName "Hello, Subversion repos"
# 控制哪些用户可以访问svn,跟前面配置的路径一致
AuthzSVNAccessFile /etc/httpd/conf.d/svn-policy-file
# 授权用户的认证信息在哪里,跟前面配置的密码信息一致
AuthUserFile /etc/httpd/conf.d/svn-auth-conf
Require valid-user
</Location>
# 以上配置,访问时的url为:http://ip地址/svn/仓库1
- mod_dav_svn是apache服务器访问svn的一个模块,通过yum安装:
[root@localhost svnRespo]# yum install mod_dav_svn
安装成功后,会有mod_dav_svn.so和mod_authz_svn.so两个文件。
[root@localhost svnRespo]# find / -name mod_dav_svn.so
会出现:/usr/lib64/httpd/modules/mod_dav_svn.so
[root@localhost svnRespo]# find / -name mod_authz_svn.so
会出现:/usr/lib64/httpd/modules/mod_authz_svn.so
- 启动svn服务:
[root@localhost svnRespo]# svnserve -d -r /home/cqgk/svnRespo/
- 启动httpd服务,以便通过http方式访问svn库:
[root@localhost svnRepos]# systemctl start httpd.service
关于httpd服务的命令:
# 启动、终止、重启
systemctl start httpd.service #启动
systemctl stop httpd.service #停止
systemctl restart httpd.service #重启 # 设置开机启动/关闭
systemctl enable httpd.service #开机启动
systemctl disable httpd.service #开机不启动 # 检查httpd状态
systemctl status httpd.service
- 此时通过http://当前服务器ip/svn 如果无法访问刚才建立的SVN 仓库,或者返回403错误,可能是防火墙问题,需要增加防火墙规则:
[root@localhost svnRespo]# firewall-cmd --permanent --add-service=http
[root@localhost svnRespo]# firewall-cmd --permanent --add-service=https
[root@localhost svnRespo]# firewall-cmd --reload
- 进入到各个子仓库目录的hooks钩子目录,复制一个钩子pre-revprop-change文件,然后进入编辑,里面所有内容去掉,只保留exit 0 这一句:
[cqgk@localhost hooks]$ cp pre-revprop-change.tmpl pre-revprop-change
然后初始化仓库:
[cqgk@localhost hooks]$ svnsync init file:///home/cqgk/svnRespo/cqgk.commons https://192.168.1.251/svn/cqgk.commons --username xiaochuanyi --password xiaochuanyi521*
正常会出现:复制版本0 的属性
注意:上面的用户名跟密码,在源服务器(Win7系统)跟当前CentOS7 服务器中需要完全一致,也就是两个SVN库中都有这个用户,且密码都是一样的
最后,同步仓库内容:
[cqgk@localhost hooks]$ svnsync sync file:///home/cqgk/svnRespo/cqgk.commons https://192.168.1.251/svn/cqgk.commons --username xiaochuanyi --password xiaochuanyi521*
正常会出现以下内容:
已提交版本 14。
复制版本 14 的属性。
已提交版本 15。
复制版本 15 的属性。
已提交版本 16。
复制版本 16 的属性。
已提交版本 17。
传输文件数据.........
- 此时通过http://ip地址/svn 来访问svn,还是不行,提示:Can’t open directory’/home/cqgk/svnRepos’: Permissiondenied ,原来是还忘修改http.conf里面的几个地方,哈哈:
[root@localhost svnRepos]$ vi /etc/httpd/conf/httpd.conf\
找到以下两行:
User apache
Group apache因为我们的svn目录都是cqgk用户,属于cqgk用户组,所以要把这两个都改为cqgk:
User cqgk
Group cqgk还有,修改ServerName 为你的当前Linux真实ip地址 :
ServerName 192.168.1.253:80最后让apache用户对”/home/cqgk/svnRepos″目录拥有写权限。
#将用户apache加入root组
[root@localhost cqgk]# usermod -a -G cqgk apache
#让group对/home/cqgk/svnRepos目录也有写权限
[root@localhost cqgk]# chmod -R g+w /home/cqgk/svnRepos
☆实现客户端提交代码后,从Win7源服务器自动同步到CentOS7备份服务器☆
前面的步骤,已经实现了能正常通过 http://ip:端口/svn 来访问仓库了。现在要实现的是,从win7源服务器上有代码提交时自动同步到CetnOS7备份服务器。下面描述中代号:SPC 表示win7源服务器,DPC表示CentOS备份服务器
- 首先,需要在SPC里面执行一下同步的命令,让SPC的SVN应用能获得自动执行所需的权限 :
C:\Users\Administrator>svnsync sync http://192.168.1.253/svn-2/service.goods --sync-username 用户名 --sync-password 密码 --config-dir E:\svnsynccertauth
然后会提示询问你是否保存 https证书信息
®eject, accept (t)emporarily or accept §ermanently?
选择p。然后输入当前主机登录所需的账号、密码
Error validating server certificate for 'https://192.168.1.251:443':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
- The certificate hostname does not match.
Certificate information:
- Hostname: PC201411132127
- Valid: from Apr 13 02:56:53 2015 GMT until Apr 10 02:56:53 2025 GMT
- Issuer:
- Fingerprint: F6:76:A2:CA:A5:AF:EC:30:47:4B:36:8E:DB:6A:F6:23:3D:81:FF:AC
(R)eject, accept (t)emporarily or accept (p)ermanently? p
Authentication realm: <https://192.168.1.251:443> VisualSVN Server
Password for 'Administrator': 输入你登录当前win7系统用户的密码
Authentication realm: <https://192.168.1.251:443> VisualSVN Server
Username: 访问当前SVN服务器的用户名
Password for 'xiaochuanyi': 访问当前SVN服务器用户的密码
- 然后,在VisualSVN Server的应用程序上,在所需要同步的仓库目录右键选择属性,点击hooks钩子页签,双击Commit 下面的Post-commit hook ,输入以下同步的命令:
svnsync sync –non-interactive --trust-server-cert http://192.168.1.253/svn-2/仓库名 --sync-username xiaochuanyi --sync-password xiaochuanyi521* --config-dir E:\svnsynccertauth
- ☆注意以上命令中最后的https证书存储目录–config-dir E:\svnsynccertauth要跟前面输入用户名密码前的那个命令里面的目录一致。
然后,当这个仓库有代码提交后,就会自动同步到192.168.1.253的备份SVN服务中了。
☆搞不懂的疑问?☆
疑问 在http.conf里面配置的ip访问时的根目录名如果为svn,其它都配置好之后,访问时,只能进入所有子仓库的共同父级目录,比如本文中的 /home/cqgk/svnRepos,会列出此目录中的各个子仓库,但是点击以后进入,就会提示Could not find the requested SVN filesystem
进入查看http的错误日志: vi /etc/httpd/logs/error_log,会提示
[Sun May 06 14:56:11.694794 2018] [:error] [pid 6481] (20014)Internal error: [client 192.168.1.212:62124] Can’t open file ‘/home/cqgk/svnRepos/svn/format’: No such file or directory, referer: http://192.168.1.253/svn/
这个目录肯定是没有的,真实的目录结构是/home/cqgk/svnRepos/xxxproject,然后把httpd.conf中配置的访问地址根目录从
<Location /svn>改为 <Location /svn-2>,然后重启httpd服务:[root@localhost svnRepos]# systemctl restart httpd.service
然后通过http://192.168.1.253/svn-2/的地址访问,会列出所有子仓库列表,点击某个子仓库也能正常访问了…
从零开始搭建一个从Win7环境备份至CentOS7的SVN双机备份环境的更多相关文章
- 从零开始搭建一个简单的基于webpack的vue开发环境
原文地址:https://segmentfault.com/a/1190000012789253?utm_source=tag-newest 从零开始搭建一个简单的基于webpack的react开发环 ...
- 从零开始搭建一个react项目
Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...
- vue-用Vue-cli从零开始搭建一个Vue项目
Vue是近两年来比较火的一个前端框架(渐进式框架吧). Vue两大核心思想:组件化和数据驱动.组件化就是将一个整体合理拆分为一个一个小块(组件),组件可重复使用:数据驱动是前端的未来发展方向,释放了对 ...
- 从零开始搭建一个PaaS平台 - 我们要做什么
前言 从最开始的小公司做小网站,到现在进入现在的公司做项目,发现小公司里很多很多工作都是重复的劳动(增删改查),不过想想也是,业务软件最基础的东西不就是增删改查吗. 但是很多时候,这种业务逻辑其实没有 ...
- Django1.8教程——从零开始搭建一个完整django博客(一)
第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...
- 在django中如何从零开始搭建一个mock服务
mock概念 mock 就是模拟接口返回的一系列数据,用自定义的数据替换接口实际需要返回的数据,通过自定义的数据来实现对下级接口模块的测试.这里分为两类测试:一类是前端对接口的mock,一类是后端单元 ...
- 从零开始搭建一个vue.js的脚手架
在谷歌工作的时候,我们要做很多界面的原型,要求快速上手,灵活运用,当时用的一些现有框架,比如angular,太笨重了——尤雨溪(Vue.js 作者) vue.js是现在一个很火的前端框架,官网描述其简 ...
- webpack+vue+koa+mongoDB,从零开始搭建一个网站
github 地址 https://github.com/wangxiaoxi... webpakc+vue的搭建1.新建项目文件夹(see-films);2.npm init //初始化项目3.搭建 ...
- Java进阶专题(二十二) 从零开始搭建一个微服务架构系统 (上)
前言 "微服务"一词源于 Martin Fowler的名为 Microservices的,博文,可以在他的官方博客上找到http:/ /martinfowler . com/art ...
随机推荐
- 矩阵乘法的运算量计算(华为OJ)
题目地址: https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b?tpId=37&&tqId=21293 ...
- base | AtomicIntegerT类
1. 原子自增操作 type __sync_fetch_and_add (type *ptr, type value) 2. 原子比较和交换(设置)操作 type __sync_val_compare ...
- vi不保存退出
To quit the vi editor without saving any changes you've made If you are currently in insert or appen ...
- 【java细节】Java代码忽略https证书:No subject alternative names present
https://blog.csdn.net/audioo1/article/details/51746333
- EF连接MySql数据库
Windows要想EF连接MySql,首先要安装两个应用程序 mysql-connector-net-6.8.8.msimysql-for-visualstudio-1.2.7.msi 项目还需要两个 ...
- shell常用监控脚本
1.cpu空闲脚本 top -b -n1 |grep 'Cpu'|awk '{print $5}'|sed 's/%//'|sed 's/id,//' 变量赋值 cpu_id='top -b -n1 ...
- 【AtCoder】AGC014
AGC014 链接 A - Cookie Exchanges 发现两个数之间的差会逐渐缩小,所以只要不是三个数都相同,那么log次左右一定会得到答案 #include <bits/stdc++. ...
- groovy中的正则表达式操作符【groovy】
groovy中对于正则表达式的书写进行了简化,同时引入了新的操作符,使得正则表达式使用起来比较方便简单. 对于书写的改进: 比如 assert "\\d" == /\d/ 也就是在 ...
- centos环境gcc版本升级
今天项目需要做node.js项目的性能测试,通过在centos上搭建nodejs环境 安装过程中提示:
- 基于springboot通过自定义注解和AOP实现权限验证
一.移入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...