详解centos7+Apache的SVN配置同步更新服务器
nanshan 2024-10-19 06:35 11 浏览 0 评论
VN版本控制服务
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。也是就是CVS的接班人!
CVS是一个C/S系统,是一个常用的代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,现在大多数软件开发公司都使用SVN替代了CVS。
官方网站:http://subversion.apache.org/
Windows客户端 TortoiseSVN:http://tortoisesvn.net/
常见的版本控制软件
CVS,逐渐被SVN取代,是CVX重写版和改写版
SVN,Subversion
Git,Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
SVN存储数据的方式
BDB,Berkeley DB,一种事务安全型表类型
FSFS,"FSFS" 采用文件系统的方式, 替代原来的基于Berkeley DB的实现.
因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
SVN的运行方式及端口
独立服务器 3690端口 访问方式SVN:// C/S模式
借助apache运行 80端口 访问方式 http://
工作流程
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:开始新一天的工作:
1、从服务器下载项目组最新代码。
2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码
(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。
3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。
SVN+Apache运行原理
SVN搭配Apache的时候,Apache需要使用mod_dav_svn这个模块,他的运行机制如下:
在一台服务器上建立一个源代码库,库里可以存放许多不同项目的源程序。有源代码库管理员统一管理这些源程序。
每个用户在使用源代码库之前,首先要把源代码库里德项目文件下载到本地,然后开发人员可以在本地修改,左后用svn命令进行提交,由源代码库统一管理修改。
mod_dav_svn 可以让版本库通过http协议实现网站展现
构建SVN版本控制服务器
SVN+HTTP Server (XueGod63)========== Client Server(XueGod64)
检查是否已安装
rpm -qa subversion
如果要卸载旧版本
yum remove subversion
软件安装
#包括HTTP所需模块一起装(httpd mod_auth_mysql 是安装配合Apache的模块,你可以只装subversion,多装了也无所谓) [root@XueGod63 ~]# yum install -y subversion httpd mod_dav_svn #查看已注册 [root@XueGod63 ~]# cat /etc/services | grep --color svn
svn 3690/tcp # Subversion
svn 3690/udp # Subversion
创建版本库目录
#存放版本库的主目录 [root@XueGod63 ~]# mkdir /www/svn/ #创建项目 #svnadmin命令是由subversion这个软件包提供的 [root@XueGod63 ~]# svnadmin create /www/svn/test_project #随便查看一个版本库 [root@XueGod63 ~]# ls /www/svn/test_project
conf db format hooks locks README.txt
dav目录:是提供apache与mod_dav_svn使用的目录,让他们存储内部数据,刚开始新建时此目录没有
db目录:就是所有版本控制的数据存放文件
hooks目录:放置hook脚本文件的目录
locks目录:用来放置subversion监控锁定数据的目录,用来追踪存取文件库的客户端
format文件:是一个文本文件,里面只放了一个整数。表示当前文件库配置的版本号
conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等),也是我们要关注的配置文件
[root@XueGod63 ~]# ls /www/svn/test_project/conf/
authz passwd svnserve.conf
authz #认证权限相关
passwd #用户名和密码
svnserve.conf #服务器配置文件
针对不同版本库修改配置文件
接下来的一段用于配置使用哪种授权登录方式;
#修改xuegod.cn的配置文件 [root@XueGod63 ~]# vim /www/svn/test_project/conf/svnserve.conf
[general]
anon-access = none #对于匿名用户,无访问权限,这里必须为none,因为只有设为none,在客户端才能看到每次提交的备注信息
auth-access = write #对于授权用户,有写权限,可以是read,write,none
#password-db = passwd #用户名和密码都是明文存放在同级目录下的passwd文件中;优点是高效配置简单,缺点是安全性弱,明文总不是那么让人感觉可靠
authz-db = authz #认证权限文件,取消注释即可
realm = test_project #指定授权所属的域,PHP的同志可将其理解为名字空间;
#接下来是[sasl]段,用于标识是否进行SASL加密处理;
use-sasl = true
min-encryption = 128
max-encryption = 256
#变量 min-encryption 和 max-encryption 控制服务器所需要的加密强度。
注意:此配置文件的所有内容必须顶格,否则会报错
配置用户和密码及认证权限
#设置用户名和密码 [root@XueGod63 ~]# vim /www/svn/test_project/conf/passwd
[users]
Find = 123456
HA = 123456
user = 123456
#末尾添加上面三行
#对于部分版本,前面的[users]是有#号的,如果有#号,一定要取消,否则只能使用匿名用户登录,客户端登录不会
出现登录窗口或密码提示,除非在配置文件将anon设置为none,否则将返回一个错误
#这里的密码都是明文,没有加密
#设置用户和组的权限 [root@XueGod63 ~]# vim /www/svn/test_project/conf/authz
[groups] #此行默认存在了
test_group = Find,HA #定义组,在[groups]下面添加
#用户组格式 用户组名 = 用户1,用户2
#一个组可以包含多个用户,英文逗号间隔,用户名必须是在passwd中存在的
[test_project:/] #/表示我当前所在版本库目录,这里代表test_project
@test_group = rw #@test_group表示这个组的权限,就是上面定义的组的成员
* = #除了上面的有赋予权限成员之外,其他的成员都没有权限
SVN目录格式:
[/目录名]
@用户组名 = 权限
用户名 = 权限
* =
SVN使用SASL加密
1.配置svnserve.conf,注释掉password-db = passwd
并启用sqsl:use-sasl = true
2.新建一个svn.conf文件,一般放在/usr/lib/sasl2或者/etc/sasl2,内容为:
pwcheck_method: auxprop
auxprop_plugin: sasldb
sasldb_path: /home/svnadmin/config/sasldb
mech_list: DIGEST-MD5
其中sasldb_path 指定你打算将sasl加密的数据库放置的位置;
注释:pwcheck_method指明检查的方法,这里是“auxprop ”,这个pwcheck_method还对应了如启动一个代理作为认证服务等方式,而现在的意思就是使用本文件说的方式去检查。然后我们指明auxprop_plugin为sasldb,也就是使用一个文件存放用户名密码,也就是/www/svn/test_project/sasldb,其它的认证信息存放plugin还有sql和ldapdb。而mech_list指明了认证信息传递机制。
svnserve 已经在运行,你需要重启服务,并确保它读取了更新后的配置参数
killall svnserve //停止svnserve服务
svnserve –d –r /www/svn //启动svnserve服务
3.创建用户和密码
使用saslpasswd2 程序
语法:saslpasswd2 –c –f /www/svn/test_project/sasldb –u [svnserve.conf里面配置的realm名字] [username]
eg:saslpasswd2 -c -f /home/svnadmin/config/sasldb -u examPro colin
会出现交互界面,提示输入两次密码;
附:
saslpasswd2 -d -f home/svnadmin/config/sasldb -u 用户名//删除用户
sasldblistusers2 -f /home/svnadmin/config/sasldb // 查询用户
PS:如果访问库的时候出现以下提示 "Could not obtain the list of SASL mechanisms",原因是Linux默认没有安装DIGEST-MD5,此时,可用以下命令安装更新:yum install cyrus-sasl-md5 , cyrus-sasl-md5首页:http://asg.web.cmu.edu/sasl/, 安装包下载地址:ftp://ftp.andrew.cmu.edu/pub/cyrus/
配置完成。
服务SVN启动及创建测试代码
#启动了所有版本库,如果只需要某一个版本库, #在-r后面添加/www/svn/test_project/的版本库即可 -d=daemon -r=root of directory of save指定根目录 [root@XueGod63 ~]# svnserve -d -r /www/svn/ #查询到下面这行内容就可以了 [root@XueGod63 ~]# ps -aux | grep svn
root 17107 0.0 0.0 199020 1028 ? Ss 23:30 0:00 svnserve -d -r /www/svn/
root 17446 0.0 0.0 110228 892 pts/0 S+ 23:32 0:00 grep --color=auto svn
[root@XueGod63 ~]# netstat -antup | grep svn
服务正常
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 17107/svnserve
使用svn导入测试代码
导入测试代码格式: svn [选项] 源码 svn://server ip/项目名
常见的选项:
import:将未版本化的文件纳入版本控制并提交 checkout:从版本库中检出一个修订版 update:更新工作拷贝 add,delete,copy,move:增、删、复制、移动文件或目录
status:检查状态差异 diff:检查文件行级详细差异
revert:恢复 resolve:解决冲突
switch:切换工作拷贝对应的版本库分支 log:查看历史记录
list:显示文件目录 cat:查看某个文件内容
开放svn端口
默认是3690端口,你也可以用别的。已开启的跳过这一步
vi /etc/sysconfig/iptables #修改 iptables -I INPUT -p tcp --dport 3690 -j ACCEPT #保存 service iptables save #重启 service iptables restart #查看 /etc/init.d/iptables status
在网站根目录建立SVN版本库
为了避免每次都重新输入SVN账号密码,可修改以下配置
[root@localhost public_html]# vim /root/.subversion/servers
把
# store-plaintext-passwords = no
改为
store-plaintext-passwords = yes
建立版本库
#打开网站根目录,我的根目录是/www/web/test_com/public_html [root@XueGod63 ~]# cd /www/web/test_com/public_html #在网站根目录建立版本库,由于当前已经在网站根目录,所以用 . 表示建立版本库的目录 #也可以使用绝对路径 /www/web/test_com/public_html [root@XueGod63 ~]# svn checkout svn://192.168.1.2/test_project . #提示输入SVN帐号和密码,输入以上设置的SVN帐号密码即可
提交网站根目录的源码到SVN服务器
把网站的所有文件提交到SVN服务器
#把项目加入到SVN库,并提交 [root@XueGod63 ~]# svn add app/ [root@XueGod63 ~]# svn add include/ [root@XueGod63 ~]# svn add template/ [root@XueGod63 ~]# svn add runtime/ [root@XueGod63 ~]# svn add index.php [root@XueGod63 ~]# svn commit -m "初次提交"
在开发环境(本地)检出项目
在本地项目检出SVN,SVN地址:svn://192.168.1.2/test_project
d:守护进程
-r:svn根目录
假设服务端IP为192.168.1.2,那么如下设置后test_project的访问目录就为:
svn://192.168.1.2/test_project
比如 帐号密码为上面设置的Find = 123456,检出。
SVN上传时同步到服务器其它目录
同步程序思路:用户提交程序到SVN,SVN触发hooks,按不同的hooks进行处理,这里用到的是post-commit,利用post-commit到代码检出到SVN服务器的本地硬盘目录,再通过rsync同步到远程的WEB服务器上。
知识点:
1、SVN的hooks
# start-commit 提交前触发事务
# pre-commit 提交完成前触发事务
# post-commit 提交完成时触发事务
# pre-revprop-change 版本属性修改前触发事务
# post-revprop-change 版本属性修改后触发事务
通过上面这些名称编写的脚本就就可以实现多种功能了,相当强大。
2、同步命令rsync的具体参数使用
3、具有基个语言的编程能力bash python perl都可以实现
post-commit具体实现细节
post-commit脚本
能看到一堆模版钩子文件,我们需要的是post-commit.tmpl,
copy一份,命名为post-commit。然后修改;
编辑文件:
sudo vim /www/svn/test_project/hooks/post-commit
注意:编辑完成post-commit后,给予可执行权限:
sudo chmod -R 755 /www/svn/test_project/hooks/post-commit
内容:
#!/bin/sh #设置语言环境 ##这行比较重要,需要根据你的服务器环境选择正确的语言环境,否则,这个update不会工作 export.UTF-8 #设置SVN更新时需要同步更新的目录,这里发现不加username和password也是可以的 #svn update /www/web/test_com/public_html --username yoursname --password yourpwd sudo svn update /www/web/test_com/public_html
这样在本地SVN提交代码后,服务器的代码也会自动从SVN更新。
注意:svn仓库文件夹的other必须要有执行权限不然脚本无法执行。SVN update 之前一定要先手动checkout一份出来,还有这里一定要添加用户和密码如果只是手动一样会更新,但自动一样的不行。
启动和停止SVN服务
启动SVN服务
svnserve -d -r /www/svn/
描述说明:
-d 表示svnserver以“守护”进程模式运行
-r 指定文件系统的根位置(版本库的根目录),这样客户端不用输入全路径,就可以访问版本库。
如果想监听其他端口,使用
svnserve -d -r /www/svn/ --listen-port 88
停止SVN服务
killall svnserve
设置开机自启动
安装好的svn服务端,默认是不会开机自启动的,每次开机自己启动会很麻烦,我们可以把它设成开机启动。
首先:编写一个启动脚本svn_startup.sh,我放在/www/svn/svn_startup.sh
#!/bin/bash /usr/bin/svnserve -d -r /www/svn/ --listen-port 88
如果是部署为外网,这里自定义了88端口,需要注意检出地址需要加上自定义的端口号。(貌似自定义端口号后不能使用post-commit自动提交了,会提示拒绝连接,还没有找到使用自定义端口连接的方法)
这里的svnserve路径保险起见,最好写绝对路径,因为启动的时候,环境变量也许没加载。
绝对路径怎么查?
which svnserve
这里还有可能碰到一个问题,如果你在windows下建立和编写的脚步,拿到linux下,用vi或者vim修改后可能会无法执行,这是文件格式的问题:
vi svn_startup.sh #输入:set ff 回车 #如果显示的结果不是fileformat=unix #再次输入 set ff=unix #就OK了
然后修改该脚本的执行权限:
chmod ug+x svn_startup.sh #或者万能的 chmod 777 svn_startup.sh
最后,加入自动运行:
vi /etc/rc.d/rc.local #在末尾添加脚本的路径,如: /www/svn/svn_startup.sh
现在,你可以重启一下试试了。
ps -ef|grep svnserve
相关推荐
- 超详细!Linux文件和目录的10项属性
-
公众号:老油条IT记文件和目录10项属性目录1:索引节点:inode2:文件类型3:链接数4:用户5:组6:文件大小7.8.9:时间戳10:文件名1.Linux文件#概述#1.linux里一切皆为文件...
- 如何恢复 Linux 系统下被删除的文件 ?
-
丢失数据是任何用户都可能经历的最令人不安和痛苦的经历之一。一旦珍贵数据被删除或丢失,就再也找不不回来通常会引发焦虑,让用户感到无助。值得庆幸的是,有几个工具可以用来恢复Linux机器上被删除的文件...
- Linux文件系统操作常用命令
-
在Linux系统中,有一些常用的文件系统操作命令,以下是这些命令的介绍和作用:#切换目录,其中./代表当前目录,../代表上一级目录cd#查看当前目录里的文件和文件夹ls#...
- Linux系统下使用lsof工具恢复rm命令删除的文件
-
rm(Remove)和lsof(ListOpenFiles)是Linux命令行工具,直接操作文件系统。rm用于删除文件和目录;lsof用于查看进程打开的文件、网络连接、设备等信息。rm删除的文...
- Linux文件管理知识:文本处理
-
Linux文件管理知识:文本处理上篇文章详细介绍了Linux系统中查找文件的工具或者命令程序的相关操作内容介绍。那么,今天呢,这篇文章围绕Linux系统中文本处理来阐述。众所周知,所有Linux操作系...
- Linux基础运维篇:Linux磁盘与文件系统管理(第012课)
-
一、磁盘基础认知1.磁盘是什么在Linux系统里,磁盘就像是一个巨大的仓库,专门用来存放各种数据。电脑里的文档、图片、程序等,都储存在磁盘上。磁盘有不同的类型,常见的有机械硬盘(HDD)和固态硬...
- Linux系统中其他值得关注的病毒/恶意软件示例
-
Linux系统中其他值得关注的病毒/恶意软件示例,结合其传播方式、危害特征及清除方法进行整理。一、经典病毒家族1.Slapper特征:利用Apache的SSL漏洞传播的蠕虫病毒,可创建僵尸网络供攻击者...
- Linux磁盘爆满紧急救援指南:5步清理释放50GB+小白也能轻松搞定
-
“服务器卡死?网站崩溃?当Linux系统弹出‘Nospaceleft’的红色警报,别慌!本文手把手教你从‘删库到跑路’进阶为‘磁盘清理大师’,5个关键步骤+30条救命命令,快速释放磁盘空间,拯救你...
- Linux常用文件操作命令
-
ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...
- linux怎么编辑文件内容
-
在Linux中,你可以使用多种方法来编辑文件内容。以下是几种常用的方法:使用文本编辑器:你可以使用命令行下的文本编辑器,如vi、vim或nano来编辑文件。例如,使用vim编辑一个名为example....
- linux学习笔记——常用命令-文件处理命令
-
ls目录处理命令:ls全名:list命令路径:/bin/ls执行权限:所有用户ls–ala--alll–long-i查看i节点ls–i查看i节点命令名称:mkdir命令英文原意:m...
- Win10新版19603推送:一键清理磁盘空间、首次集成Linux文件管理器
-
继上周四的Build19592后,微软今晨面向快速通道的Insider会员推送Windows10新预览版,操作系统版本号Build19603。除了一些常规修复,本次更新还带了不少新功能,一起来了...
- 很少有人知道可以这样删除文件
-
有时候我们在格式化硬盘分区或者删除一些文件的时候,会出现无法操作的情况,例如下面这种这个文件权限问题,系统为了保护一些文件而采取的安全措施,如果你能确定文件是可能删除的,那你只要赋予它管理员权限,...
- linux中磁盘满了?一招教你快速清理
-
创作背景:当天部署服务时,发现无法部署,后来经过日志排查后发现服务器磁盘满了,查询资料后进行了清理。话不多说,直接上解决方法。操作一:1.查看磁盘大小:df-h2.直接在最上层进行排序:du-a...
- Linux下乱码的文件名修改或删除
-
查看文件名#lstouch1?.txt#ll-itotal1469445217956913-rw-r--r--1oracleoinstall0Jan18...
你 发表评论:
欢迎- 一周热门
-
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
WindowsServer2022|配置NTP服务器的命令
-
WIN11 安装配置 linux 子系统 Ubuntu 图形界面 桌面系统
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
解决Linux终端中“-bash: nano: command not found”问题
-
Linux 中的文件描述符是什么?(linux 打开文件表 文件描述符)
-
NBA 2K25虚拟内存不足/爆内存/内存占用100% 一文速解
-
K3s禁用Service Load Balancer,解决获取浏览器IP不正确问题
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)