用gitlab的webhooks更新网站
git有hooks钩子,但不太喜欢用ftp或者http方式同步更新其他服务器的网站。所以选择了gitlab,因为gitlab有webhooks。github也有webhooks,不过github太高富帅了,还是自己搭一个gitlab,安全又放心,关键是免费。
操作过程如下:
我的是php
要放在服务器上的目录: /home/wwwroot/mysite
在项目跟目录下面新建一个hooks.php,输入以下代码
//网站目录 $www_file='/home/wwwroot/mysite/'; //打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限 $fs = fopen($www_file.'hooks.log', 'a'); fwrite($fs, '================ Update Start ==============='.PHP_EOL.PHP_EOL); //自定义字串掩码 用于验证 $access_token = 's7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw'; //接受的ip数组,也就是允许哪些IP访问这个文件 这里是gitlab服务器IP $access_ip = array('8.8.8.8'); //获取请求端的ip和token $client_token = $_GET['token']; $client_ip = $_SERVER['REMOTE_ADDR']; //把请求的IP和时间写进log fwrite($fs, 'Request on ['.date("Y-m-d H:i:s").'] from ['.$client_ip.']'.PHP_EOL); //验证token 有错就写进日志并退出 if ($client_token !== $access_token) { echo "error 403"; fwrite($fs, "Invalid token [{$client_token}]".PHP_EOL); exit(0); } //验证ip if ( !in_array($client_ip, $access_ip)) { echo "error 503"; fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL); exit(0); } //获取请求端发送来的信息,具体格式参见gitlab的文档 $json = file_get_contents('php://input'); $data = json_decode($json, true); //如果有需要 可以打开下面,把传送过来的信息写进log //fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL); //执行shell命令并把返回信息写进日志 $output=shell_exec("cd $www_file && git checkout master && git pull origin master 2>&1"); fwrite($fs, 'Info:'. $output.PHP_EOL); fwrite($fs,PHP_EOL. '================ Update End ==============='.PHP_EOL.PHP_EOL); $fs and fclose($fs);
做完这些后,就可以push到gitlab端了
有个问题说明一下,对于MVC来说,gitlab的请求并不会走路由,所以不要用路由方式来加这个文件
接着登陆网站服务器
$ vi /etc/passwd
查看这个文件,然后查看www的根目录
我这里是 /home/www
运行which git 我这里得到 /usr/local/bin/git
记住这两个目录
接着把gitlab中项目的ssh key对应的秘匙id_rsa放入/home/www/.ssh里
.ssh需要700的权限
$ chmod -R 700 .ssh
接着给网站目录www权限
$ chown -R www:www /home/wwwroot/mysite
进入网站目录
cd /home/wwwroot/mysite
初始化git 并设置权限
$ git init $ chmod -R g+s .git $ chown -R www:www .git
接着配置git
$ git remote add origin
完成上面的操作后就可以手动自行第一次pull操作了 从远程获取
sudo -u www /usr/local/bin/git pull origin master
最后进入gitlab中项目settings设置 在web hooks里
URL写
http://www.mysite.com/hooks.php?token=s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw
这里的token要和你在hooks.php的token一致
做完这些以后就可以pull了,做一次提交,看是不是同时自动更新了网站
最后:如果web hooks不能正常工作的话,可以看下hooks.log看下执行的信息
补充两个问题:
1.在手动创建/home/www/.ssh 文件夹后,不能忘了改变这个文件夹的所有者,不然会出现无法写入know_hosts的问题
$chown -R www:www /home/www/.ssh
2.因为代码中使用到了shell_exec这个函数,一般配置php的时候都禁止了,需要打开shell_exec
在php.ini的disable_functions 的列表里删除shell_exec
再重新启动php-fpm服务就可以了
本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:https://zhuji.jb51.net/yunwei/8099.html