运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • 操作系统

  • 域名解析

  • 公有云

  • CI&CD

  • 数据库

  • 负载均衡&反向代理

  • 存储系统

  • 容器&容器编排

  • 批量管理

  • 邮件系统

  • 监控系统

  • Web服务

  • 虚拟化

  • 防火墙

  • 压测

  • 文件同步

  • 私有云

  • 日志系统

  • 代码仓库&版本管理

    • git常用命令
    • svn常用命令
    • gitlab+nginx部署
    • svn关联网站目录
    • 搭建SVN服务及实现备份
  • 安全审计

  • 远程拨号

  • 大数据

  • 统一认证

  • 消息队列

  • Apollo

  • 运维杂记
  • 代码仓库&版本管理
lyndon
2022-06-11

搭建SVN服务及实现备份

# 场景

某公司承接了两个开发项目,准备为开发项目组建立svn服务,收集开发人员一天开发的代码,要求有三点

  • 1、 可以实现开发人员使用svn客户端连接使用
  • 2、 需要实现代码的实施备份一遍灾难恢复
  • 3、 开发人员可以执行上传下载操作

# 实现思路

  • 1、 搭建svn版本控制,创建多个项目,客户端成功使用
  • 2、 实现svn服务端与备份机的无登录交互
  • 3、 结合ssh同步源实现代码同步
  • 4、 测试增删改到备份机,数据是否一致

# 物理拓扑

image-20220611165329196

在开始之前需要检查以下几点:

1、 主机名是否更改

2、 Hosts文件双方是否能够解析

3、 双方是否可以正常物理通信

4、 系统为最小化安装,并配置yum源安装了gcc编辑器以及Development tools

5、 确定好svn版本库树形结构

6、 关闭SELINUX

Svn版本库结构主要是分为了一个大的总版本库,版本库下面有两个分支,分别代表了一个项目,每个项目下面分别有骨干、分支、合并等,能够确定以上三点就可以实施了

# 部署svnserver

由于很多公司的svn是采用rpm的方式进行安装的,今天我这里也是一样,采用rpm的方式安装

检查系统是否已经默认安装了subversion,如果未安装执行

rpm -qa subversion
subversion-1.6.11-7.el6.x86_64
1
2

如果未安装请执行yum -y install subversion安装即可

按照版本库创建版本库,按照规范进行操作,在根目录下创建一个目录名为development,在development目录下面我们建立svn总版本库名为svndata

mkdir /development
svnadmin create /development/svndata
1
2

其中svnadmin 是svn的管理命令 可以使用 svnadmin –help查看相关帮助,create创建版本库的选项,想查看create后面的参数请使用 svnadmin help create 查看相关帮助。

在根目录下svnroot目录并在这个目录下创建两个大版本库分别为北京项目、天津项目,在这两个项目下建立分支,由于项目名称不能使用中文,请使用project1代表北京项目,使用project2代表天津项目

mkdir /svnroot
mkdir /svnroot/project1/trunk -p
mkdir /svnroot/project1/branch
mkdir /svnroot/project1/age
mkdir /svnroot/project2 
mkdir /svnroot/project2/trunk -p
mkdir /svnroot/project2/branch
mkdir /svnroot/project2/age

ls /svnroot/ 
总用量 8
drwxr-xr-x 2 root root 4096 6月  5 17:58 project1
drwxr-xr-x 2 root root 4096 6月  5 17:58 project2
1
2
3
4
5
6
7
8
9
10
11
12
13

将这两个大版本库导入到svndata版本库下

svn import /svnroot/ file:///development/svndata/ -m "import svndata"
增加      /svnroot/project1
增加      /svnroot/project1/trunk
增加      /svnroot/project1/age
增加      /svnroot/project1/branch
增加      /svnroot/project2
增加      /svnroot/project2/trunk
增加      /svnroot/project2/age
增加      /svnroot/project2/branch
1
2
3
4
5
6
7
8
9

提交后的版本为 1。

解释一下以上命令的含义

Import 为导入命令,将/svnroot目录下的目录导入到svndata版本库下 -m输入日志信息

Import的其他用法请使用 svn help import查看具体帮助

官网查看http://subversion.apache.org/

先进入到svndata目录下有一个conf目录,里面存放了svndata版本库的配置文件

cd /development/svndata/conf/
/development/svndata/conf
ls -l
总用量 12
-rw-r--r-- 1 root root 1080 6月  5 17:50 authz
-rw-r--r-- 1 root root 309 6月  5 17:50 passwd
-rw-r--r-- 1 root root 2279 6月  5 17:50 svnserve.conf
1
2
3
4
5
6
7

其中svnserver.conf是svn版本库的配置文件,里面包含了认证文件的路径以及匿名用户是否拥有读取权限等操作

  • passwd文件指定了用户的登录名以及对应的密码信息
  • authz文件指定了passwd文件中用户的权限

为了便于管理,我习惯在/development目录下建立一个存放认证文件的目录名为svnpasswd

mkdir /development/svnpasswd
1

修改svnserve.conf文件,在修改之前先备份,备份的目的有两个,一个是便于操作失误能够进行快速还原,另外一个就是改完之后可以对比文件修改了那些地方

cp svnserve.conf svnserve.conf.backup
// 开始编辑,过程略,直接看编辑完成之后的结果,此文件的修改配置项必须定格,否则配置错误
diff svnserve.conf.backup svnserve.conf
12,13c12,13
< # anon-access = read
< # auth-access = write
\---
\> anon-access = none
\> auth-access = write
20c20
< # password-db = passwd
\---
\> password-db = /development/svnpasswd/passwd
27c27
< # authz-db = authz
\---
\> authz-db = /devdelopment/svnpasswd/authz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

以<开头的是修改之前的配置项信息

以>开头的是修改之后的配置项信息

将authz passwd 文件复制到/development/svnpasswd目录下请切换到该目录

cp authz passwd /development/svnpasswd/
cd /development/svnpasswd/
pwd
/development/svnpasswd
// 编辑passwd文件定义用户属性,这里的用户分为两个项目组的用户,其中zhangsan、lisi为project1组的成员,有读写权限、liutao、gaoyuanyaun、chenglong为project2组的成员拥有读写权限,admin作为管理员对svndata总版本库拥有rw权限,Passwd文件主要定义有哪些用户,格式为 用户名 = 密码  #注意等号两边的空格以及书写必须顶格
[users]            #存在
\# harry = harryssecret
\# sally = sallyssecret
zhangsan = 123456         #从这里之后都是添加,前面是用户名,后面是密码
lisi = 123456
liutao = 123456
gaoyuanyuan = 123456
chenglong = 123456
admin = 123456
1
2
3
4
5
6
7
8
9
10
11
12
13
14

定义authz文件,定义这些用户的权限,之中这里面有组的概念,可以将多个用户定义一个组,为组定义权限,组内的用户共享这个权限

此文件格式定义组的格式为:

[group] 存在

组名 = 用户 多个用户使用逗号进行分隔

版本库授权的格式为

[版本库根目录]

@组名 = 权限

用户名 = 权限

[版本库根目录:/项目目录]

@组名 = 权限

用户名 = 权限

[groups]
project1 = zhangsan,lisi
project2 = liutao,gaoyuanyuan,chenlong
[/]
admin = rw
[/project1]
@project1 = rw
[/project2]
@project2 = rw
 \* =  
1
2
3
4
5
6
7
8
9
10

启动svn服务

svnserve -d -r /development/svndata/
1

检查启动结果,端口号为3690,如果防火墙开启了请建立相关规则

svnserve -d -r /development/svndata/

netstat -anptlu | grep svn
tcp     0   0 0.0.0.0:3690        0.0.0.0:*          LISTEN   34834/svnserve  

iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
service iptables save
1
2
3
4
5
6
7

# 客户端操作

安装客户端软件,软件下载地址http://pan.baidu.com/s/1c0YZJC,里面有汉化包,下载完成之后,直接双击安装即可

安装完成之后,在任意地点创建文件夹名字任意,我在桌面上创建一个文件夹为svndata

点击右键会出现一个SVN检出的选项点击一下

image-20220611170849875

这里输入svn的路径即可点击确定,之后输入admin的用户信息,否则其他用户不能验证成功,

这里介绍一下svn客户端的三种登录方式

  • svn://ip地址 这种是svn默认的登录方式

  • http://ip地址 这种是结合了apache实现的 web登录方式

    https://ip地址 这种是结合了apache+openssl实现的安全登录方式,.常用于外网svn

  • file:/// 本地的登录方式,一般在svn服务端本地操作时会用到

再创建两个文件夹,一个为peoject1,,一个为project2分别使用这两个项目组的用户登录

image-20220611170932266

这是你登录进去就会发现属于project1组的项目就会出现在project1的文件夹中

image-20220611170940310

同样project2也是一样

# svn实施同步

备份思路:

利用svn自带的 svnadmin dump命令进行全库备份以及增量备份,之后上传到备份服务器上

在备份机上操作

useradd rput && passwd rput

service sshd restart

ntpdate time.nist.gov

mkdir /backup

setfacl -R -m user:rput:rwx /backup/

setfacl -R -m default:user:rput:rwx /back
1
2
3
4
5
6
7
8
9
10
11

在服务器端操作

ntpdate time.nist.gov

mkdir /backup

mkdir /data

ssh-keygen -t rsa    #后面一路回车即可

ssh-copy-id -I /root/.ssh/id_rsa.pub rput@192.168.1.67
1
2
3
4
5
6
7
8
9

建立全量,增量脚本

以下为两个脚本:

1、 全库备份

#!/bin/sh

SVN_DIR=/development/svndata/    #定义SVN库目录变量

SVN_BAK_DIR=/backup/        #定义备份文件存放目录变量

NUM1=$(cat /data/jsb_svn_id)     #取初始化版本号

NUM2=$(svnlook youngest $SVN_DIR)  #取当前最新的版本号

\#开始备份

svnadmin dump $SVN_DIR -r $NUM1:$NUM2 --incremental > $SVN_B

AK_DIR/whole_bak_$DATE

\#判断备份是否成功,若成功,则记录当前最新的版本号到临时文件中,

用于下次增量备份使用

if [ $? -eq 0 ];

  then

  echo $NUM2 > /data/jsb_svn_id

  else

  echo "backup fail...."

fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

2、 增量备份

#!/bin/sh

SVN_DIR=/development/svndata/       #定义SVN库目录变量

SVN_BAK_DIR=/backup/    #定义备份文件存放目录变量

NUM1=$(cat /data/jsb_svn_id)     #取初始化版本号

NUM2=$(svnlook youngest $SVN_DIR)  #取当前最新的版本号

\#开始备份

svnadmin dump $SVN_DIR -r $NUM1:$NUM2 --incremental > $SVN_B

AK_DIR/ increment_bak_$DATE

\#判断备份是否成功,若成功,则记录当前最新的版本号到临时文件中,

用于下次增量备份使用

if [ $? -eq 0 ];

  then

  echo $NUM2 > /data/jsb_svn_id

  else

  echo "backup fail...."

fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

在配置计划任务之前请手动执行一次这两个脚本

建立计划任务,实现每周日凌晨1点进行一次全库备份,凌晨2点进行增量备份

最后利用rsync进行同步

rsync -azH /backup rput@192.168.1.67:/backup

crontab -e

00 1 * * 7 /bin/sh whole.sh

00 2 1 * * /bin/sh increment.sh

00 3 1 * * /usr/bin/rsync -azH /backup rput@192.168.1.67:/backup
1
2
3
4
5
6
7
8
9

恢复思路:

1、 建立全新的svn库

2、 使用最近一次的全库备份进行恢复,在进行每天的增量恢复

3、 进行结果查看

恢复命令

svnadmin load  要恢复的svn库 < 备份全路径
1
上次更新: 2022/06/12, 15:48:09
svn关联网站目录
Jumpserver堡垒机安装

← svn关联网站目录 Jumpserver堡垒机安装→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式