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/
微信赞赏支付宝赞赏
发表评论