Centos7安装SVN服务&SVN更新自动同步web目录

宝塔上的SVN收费,就自己在centos上搭建了一个简单版的SVN。

一、安装SVN

1、命令行下先查看svn安装的版本(如尚未安装则显示:-bash: svnserve: command not found)

svnserve --version

2、如果没有安装则使用yum命令安装

yum install subversion -y

3、安装完可以使用rpm -qa subversion 查看已安装版本我这里是subversion-1.7.14-14.el7.x86_64

二、SVN的配置及启用

1、终端执行命令:ps -ef|grep svnserve 查看svn服务运行状态,如果只显示一行结果说明服务还没有启动(ps:netstat -ntlp 可查看当前系统端口使用状态)

//显示下面这行说明svn服务尚未启用
root     11772  5612  0 18:17 pts/1    00:00:00 grep --color=auto svnserve

2、为SVN指定一个版本库目录,我这里是以/www/svn文件夹作为版本库目录

mkdir /www/svn

3、在版本库目录下建立一个版本仓库目录(也有人称为项目名称),后面上传到svn的文件都将位于该仓库目录下。

svnadmin create /www/svn/teamfile

teamfile是项目名称,命令执行完毕会在/www/svn/teamfile目录下生成相关文件,在启动svn服务前需要在该目录下配置账号及权限等内容。

hooks目录:放置hook脚步文件的目录
locks目录:用来放置subversion的db锁文件和db_logs锁文件的目录,用来追踪存取文件库的客户端
format目录:是一个文本文件,里边只放了一个整数,表示当前文件库配置的版本号
conf目录:是这个仓库配置文件(仓库用户访问账户,权限)

4、新建svn账号。在svn项目根目录下/www/svn/teamfile/conf/passwd文件中添加形如username= password的条目就可以了,例如增加一个密码为123456的admin账号。可以建立多个svn账号,一个账号占一行前面不要有空格!

[users]
# harry = harryssecret
# sally = sallyssecret
admin = 123456

5、接着在配置账号的权限。需要修改svn项目根目录下 /www/svn/teamfile/ conf/authz文件的内容。在[groups]建立权限组并配置该权限组有哪些账户。注意每行语句前面顶格写,不要有空格。这里是将admin账号分配给了administrator组,如果administrator组下有多个账号用逗号隔开即可。下面代码段最后三行的意思是给[/]目录赋予administrator组的读写权限。 更多细化的权限配置参考

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
administrator = admin

# [/foo/bar]
# harry = rw
# &joe = r
# * =

[/]
administrator = rw
* =

6、 继续修改svn项目根目录下 /www/svn/teamfile/ conf/svnserve.conf文件的内容。找到几个字段所在的改成以下的值,然后去掉前面的#号,使配置生效。注意顶格写!

anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

7、启动svn服务( -r参数不要写到teamfile路径 )

svnserve -d --listen-port 3690 -r /www/svn

如果需要停止svn服务,ps -A | grep svn   然后kill对应的进程号。

8、 下载svn客户端进行访问地址为 svn://xxx.xxx.xxx.xx/teamfile ,注意svn路径不是svn ://xxx.xxx.xxx.xx/svn/teamfile ,否则会报错!

9、命令行checkout svn。使用admin账号登录,checkout到/www/wwwroot/svnweb文件夹,执行完命令后会让你输入admin账号的密码

svn co svn://127.0.0.1/teamfile --username admin /www/wwwroot/svnweb

三、实现svn更新自动同步到网站web文件夹

假如svn服务器上有个网站svntest.ranjuan.com,它的web文件目录为/webhost/svntest。 如何让每次提交到svn目录后,自动将svn目录的文件同步到 /webhost/svntest 目录下实现网站文件的自动更新呢?

1、终端切换到网站目录下/webhost/svntest

cd /webhost/svntest

2、将svn在web目录执行一次checkout。(建议把/webhost/svntest目录先备份起来)这里的svn测试是是本机地址。

svn co svn://127.0.0.1/teamfile --username admin /webhost/svntest

3、 进入/www/svn/teamfile/hooks钩子目录下,建立post-commit文件,内容如下:

#!/bin/sh
#export LANG=zh_CN.GBK
export LANG=en_US.utf8
/usr/bin/svn update --username admin --password 123456 /webhost/svntest

注意post-commit文件的权限问题。

chown www:www post-commit     //宝塔web目录的用户组和所有者都是www
chmod +x post-commit

如提示:post-commit hook failed (exit code 255) with no output则需要赋予post-commit文件可执行权限 ,另外使用export LANG=en_US.utf8还是export LANG=zh_CN.GBK需要根据你系统的实际情况来

4、使用svn客户端,SVN Commit提交后会自动同步到/webhost/svntest目录

四、关于web目录权限问题

我这边web目录用户及组都是www,但是在运行svn及执行命令的时候都是root账户,所以会存在权限问题。解决办法是先停止svn服务,然后执行下面操作:

1、将svn版本库 /www/svn 目录及子目录文件权限设置为用户组www 权限755

2、使用www账户启动svn服务

sudo -u www svnserve -d --listen-port 3690 -r /www/svn

3、将hooks目录下的post-commit文件末尾增加一行改权限的chmod -R 755 /webhost/svntest

#!/bin/sh
#export LANG=zh_CN.GBK
export LANG=en_US.utf8
/usr/bin/svn update --username admin --password 123456 /webhost/svntest
chmod -R 755 /webhost/svntest

4、将之前web目录/webhost/svntest 下的文件清空(先备份一份)后执行一次以下svn命令,方便存储用户密码

sudo -u www svn co svn://127.0.0.1/teamfile --username admin /webhost/svntest

4、测试成功,web目录权限均为www用户 755

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/centos7-install-svnserve/

赞赏

微信赞赏支付宝赞赏

self-study-202004
windows-software-develop
python-beautifulsoup-netease