标签:## restart repos 写入 apach port comm service passwd
背景情况:SVN与WEB不在同一台服务器上,需要SVN提交后WEB站点自动进行SVN UPDATE更新,查阅网上的教程,发现部分的细节和权限部分没有提到导致跨服务器ssh执行更新脚本失败,手动执行post-commit可以通过需求:开发想要在项目修改并提交到svn服务器上后,web服务器能够自动进行svn update更新站点,并立即看到修改后的web页面效果
思路:项目提交时触发post-commit里面的脚本并写入到/var/log/svn.log中,脚本通过SSH免密登陆到WEB上然后再进行svn up.sh的脚本触发web站点更新
配置:SVN服务器一台(172.17.8.8) WEB测试服务器一台(172.17.8.9) 两台服务器均为CentOS7.4(1708)
SVN项目版本环境在/svn/project(目录中含有db hook等文件) WEB的网站路径为/var/www/html/project下
需要安装的软件:两台服务器均需要安装Apache软件(web服务器nginx也可以)和SVN软件,我的web测试环境为lamp
两台服务器均安装apache(httpd)、SVN(subversion),SVN服务器需要安装svn和apache的集成模块(mod_dav_svn),安装方式为yum install httpd subversion mod_dav_svn
在此不详细叙述SVN账号和密码以及权限的调试,只说post-commit、脚本、权限、以及log的写法和设置
1.两台服务器各建立系统账户为svn的用户名(useradd svn),并给svn用户设置密码(passwd svn) 注意:此步骤两台服务器都要做相同的操作
2.登陆SVN服务器做ssh免密码登陆web服务器的操作:
(1)在SVN服务器下,使用su - svn(要带-,说明环境变量也切换到svn下面) ,切换到svn用户上,执行ssh-keygen -t rsa,一路回车执行,成功的话会生成SHA256的密钥文件
(2)将svn用户下的密钥文件拷贝至web服务器下的svn用户ssh目录:ssh-copy-id -i /home/svn/.ssh/id_rsa.pub svn@172.17.8.9,输入密码后提示复制成功
(3)使用ssh登陆到web服务器:ssh svn@172.17.8.9,输入一次密码后,尝试再次执行该命令,确认能够免密登陆后即可。
3.将apache的启动进程用户修改成svn
vim /etc/httpd/conf/httpd.conf
找到User和Group(大约66 67行左右)将apache改为svn,:wq保存退出
将所有的svn目录下的权限修改成svn用户,使用-R递归方式
chown -R svn:svn /svn
4.进入项目目录,编写post-commit脚本并赋予其执行权限
vim /svn/project/hooks/post-commit
脚本如下:
#!/bin/sh
REPOS="$1"
REV="$2"
LOGFILE=/var/log/svn.log ##这里是为了保存日志并查看是否有报错,有报错说明执行了未成功,没报错说明未执行成功,检查权限,执行成功会有svn update信息
exec 1>>"$LOGFILE"
exec 2>&1
export.UTF-8
/usr/bin/ssh -l svn 172.17.8.9 "/bin/bash /shell/svnup.sh"
exit 0
保存退出
赋予post-commit可执行权限
chmod 777 /svn/project/hooks/post-commit
5.创建脚本日志并赋予svn权限
touch /var/log/svn.log
chmod 777 /var/log/svn.log
chown svn:svn /var/log/svn.log
6.修改完毕后重启Apache服务器使其生效
systemctl restart httpd.service
至此SVN服务器配置完毕
SVN跨服务器配置post-commit提交后自动更新(SVN与WEB服务器不在同一台机器)
标签:## restart repos 写入 apach port comm service passwd
原文地址:http://blog.51cto.com/taoyeno1/2131447