Centos7安装svn + 挂钩子自动更新到网站目录

因为我是直接使用root身份ssh连接服务器所以后面的所有操作都不用使用su开头,如果你是本地安装的centos可以先 su root 切换管理员身份
$ su root
#输入密码后就变成管理员root身份了
#使用yum命令安装svn
$ yum -y install subversion
#查看版本(检查是否安装成功)
$ svnserve --version

svnserve, version 1.7.14 (r1542130)
   compiled Apr 11 2018, 02:40:28

Copyright (C) 2013 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.

Cyrus SASL authentication is available.
#安装成功
1.开始建立版本库
#在/var目录下面创建svn目录,你也可以选择别的目录
$ mkdir -p /var/svn
创建版本库
$ svnadmin create /var/svn/blog
#你可能会遇到下面这种报错
svnadmin: warning: cannot set LC_CTYPE locale
svnadmin: warning: environment variable LANG is C.UTF-8
svnadmin: warning: please check that your locale name is correct
出现错误了,SVN无法设置LC_CTYPE语言环境,查了一下,有3个全局环境变量可以配置:LANG, LC_CTYPE, LC_ALL,建议是设置LC_ALL参数,将LC_ALL=C添加进/etc/profile文件的最后,至于为什么选择这个可以去参考一下这篇文章 LANG, LC_CTYPE, LC_ALL值的设置
#进入/etc/profile
$ vim /etc/profile
#添加export LC_ALL=C后
$ source /etc/profile

/etc/profile文件里面添加
在这里插入图片描述

#svnserve.conf配置文件,然后编辑
$ vim /var/svn/blog/conf/svnserve.conf
#下面是我的参数,可以参考一下
[general]
anon-access = none     	  #匿名用户(没登陆的用户,未鉴权的用户的权限)
auth-access = write	       					  #登录后用户的权限
password-db = /var/svn/blog/conf/passwd       #用户登录密码的配置文件 
authz-db = /var/svn/blog/conf/authz           #权限配置的文件
realm = /var/svn/blog						  #指定要认证的版本库

#上面的配置还可以把配置文件的路径简写
anon-access = none     	   #匿名用户(没登陆的用户,未鉴权的用户的权限)
auth-access = write	       #登录后用户的权限
password-db = passwd       #用户登录密码的配置文件 
authz-db = authz           #权限配置的文件
realm = blog			   #指定要认证的版本库,也就是之前创建的/var/svn/blog
2.配置svn登录的用户组和密码
#编辑密码配置文件/var/svn/blog/conf/passwd,
$ vim /var/svn/blog/conf/passwd
#找到[users]然后在下面添加
[users]
 #用户名 = 密码
 leeon = 123456
 test = test

#编辑/var/svn/blog/conf/authz
$ vim /var/svn/blog/conf/authz
#然后在下面找到[groups],在后面添加

[groups]
developer=leeon,test # 组名 = 成员名,成员名 (成员名就是刚才passwd文件里面添加的用户名)
[blog:/]  			 # 表示根目录(/var/svn/blog)也可以省略 blog: 写成 [/]
@developer=rw   	 # 赋予developer组读和写的权限

#保存退出

然后启动svn服务

$ svnserve -dr /var/svn
#你也有可能已经开启了,就会报这个错,因为修改了配置,需要重启所以
svnserve: E000098: Can't bind server socket: Address already in use
$ ps -aux|grep svn
#查看一下运行状态,然后看到 svnserve -dr /var/svn 的pid是26174
root     26174  0.0  0.0  81408   836 ?        Ss   19:03   0:00 svnserve -dr /var/svn
root     26288  0.0  0.0   9092   668 pts/2    S+   19:04   0:00 grep --color=auto svn
#使用kill指令
$ kill 26174

#然后在重新运行svnserve -dr /var/svn
$ svnserve -dr /var/svn

$ ps -aux|grep svn
#查看状态
root     27639  0.0  0.0  81408   832 ?        Ss   19:13   0:00 svnserve -dr /var/svn/
root     27648  0.0  0.0   9092   668 pts/2    S+   19:13   0:00 grep --color=auto svn
  
#成功
3.配置防火墙的端口
#svn的默认端口是3690,如果你没有开启这个端口,你是无法访问svn服务器的
#运行指令 firewall_cmd --list-all
$ firewall-cmd --list-all
#可以查看自己电脑防火墙是否有开启3690端口
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client ssh
  ports: 80/tcp 8088/tcp 70/tcp 443/tcp 3306/tcp 
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
#发现端口port里面没有3690
#添加端口
$ firewall-cmd --permanent --add-port=3690/tcp
#重启防火墙
$ firewall-cmd --reload

如果你是租的阿里云或者腾讯云等服务器,请前往你管理后台的安全组里面开启增加3690端口

4.在centos服务本地试试能否检出项目
$ cd /var/www/html/  #进入到网站根目录
$ svn --username leeon --password 123456 co svn://localhost/blog
#检出成功
#这一步为后面做svn钩子做准备的

然后在我windows 10右键检出成功
在这里插入图片描述

#设置开机启动svn,然后你就可以直接使用systemctl start命令启动svn了
$ systemctl enable svnserve
$ systemctl start svnserve
#开启失败了
Job for svnserve.service failed because the control process exited with 
error code. See "systemctl status svnserve.service" and "journalctl -xe" 
for details.

怎么会报错了,运行 systemctl status svnserve.service查看一下

$ systemctl status svnserve.service

#里面有一句 
Process: 9217 ExecStart=/usr/bin/svnserve --daemon   
--pid  file=/run/svnserve/svnserve.pid $OPTIONS
 (code=exited, status=1/FAILURE)
#我才想起来,我之前用 svnserve -dr /var/svn 开启了svn服务
#找到现在运行中的svn的pid,kill掉
$ ps -aux|grep svn
root     27639  0.0  0.0  81408  1088 ?        Ss   19:13   0:00 svnserve -dr /var/svn/

$ kill 27639

#然后再次运行systemctl start svnserve
$ systemctl start svnserve
#这次没报错了,然后再查看一下运行状态
$ ps -aux|grep svn
root      9437  0.0  0.0 184872  1068 ?        Ss   20:49   0:00 /usr/bin/svnserve --daemon --pid-file=/run svnserve/svnserve.pid -r /var/svn
root      9449  0.0  0.0   9092   664 pts/3    S+   20:49   0:00 grep --color=auto svn
#成功

5.挂钩子同步更新到网站目录下

首先说一下大概的原理,就是运行一个脚本,使它在网站目录/var/www/html下把你的项目checkout出来,也就是进行更新操作,前面我有一部操作就是在/var/www/html目录下检出blog项目,就是为这个checkout做准备的

#在/var/svn/blog/hooks下创建post-commit文件
$ vim /var/svn/blog/hooks/post-commit
#编写的内容如下:
#!/bin/sh
REPOS="$1"
REV="$2"
SVN_USER=leeon
SVN_PWD=123456
export LANG=en_US.utf8
SVN_PATH=/usr/bin/svn
WEB_PATH=/var/www/html/blog
LOG_PATH=/tmp/svn_blog_co.log
echo "####start checkout###" `date "+%Y-%m-%d %H:%M:%S"` '#######' >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
$SVN_PATH co $WEB_PATH --username $SVN_USER --password $SVN_PWD --no-auth-cache >> $LOG_PATH
chown -R nginx:nginx $WEB_PATH

保存退出后,给post-commit文件赋予权限

$ chmod a+x post-commit

接下来测试一下钩子,在win10 新增一个文件,然后提交
提交test文件
查看/var/www/html/blog目录发现多出了一个test.txt文件,成功了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值