CentOS 下利用 webhook 实现自动部署(PHP)

大家好,我是shelter,今天为大家带来centOS下 利用 webhook 来实现项目自动部署。win server 版本

file

场景:在coding上有一个hexo_blog的远程git仓库。
每次push新的文章上去后,还要登陆远程服务器去pull代码,感觉非常不方便。这里用webhook来解决这个问题。

1.创建apache 部署公钥

cd /usr/share 
sudo chown apache httpd/ #修改httpd目录的所有者
sudo -Hu apache ssh-keygen -t rsa # 一直回车下去
sudo cat /usr/share/httpd/.ssh/id_rsa.pub # 查看生成的密钥内容,复制全部

2.将公钥部署到远程服务器上(coding为例子)

file

3.给予apache操作项目目录的权限

直接给目录777权限。。简单粗暴

sudo chmod 777 /var/www/hexo_blog/ -R

(或者也可以新建个用户组,把ftp和apache添加到该分组,给予该组权限)

4. 编写钩子(hook)

这里我为了达到hook的统一管理,我直接在www下建立了一个webhooks文件。

创建钩子 hexo_blog.php

<?php

error_reporting(1);

//需要自动部署的项目目录
$dir =  '/var/www/hexo_blog';

//coding填写的令牌(在第六点配置,防止别人恶作剧)
$token = 'shelter';

//验证令牌
$json = json_decode(file_get_contents('php://input'), true);
if (empty($json['token']) || $json['token'] !== $token) {
    exit('error request');
}

//这里因为我的git不支持直接git pull,所以带上了远程库名和分支,'2>&1'是让执行管道输出结果。
echo shell_exec("cd $dir && git checkout -f && git pull coding master 2>&1"); 

编写好钩子后,需要先手动使用apache的身份pull一下。执行

cd /var/www/hexo_blog
sudo -u apache git pull coding master

第一次连接需要输入yes,确认连接(这个坑,会导致令牌错误)。
pull成功!

5.配置钩子URL到远程仓库

file

6.总结

nice!centOS下,利用webhook实现自动部署成功!

认真,可以让事情变得出乎意料地好!
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

几个问题问下大神!
1.我在执行sudo -Hu apache ssh-keygen -t rsa # 「这条命令中的 -Hu 是什么意思啊不明白?」
2.仓库目录已经给了777权限,通过命令行能够正常执行,通过浏览器却报错代码和报错如下:
代码:
$command = 'cd /var/www/super_ABC/ & git pull 2>&1';
$ret = shell_exec($command);
报错:
浏览器访问时报 sh: git: command not found

7年前 评论

@vipluosong

  1. -u 代表切换用户,-H 代表切换HOME环境变量。
  2. sudo -u apache git pull (等效浏览器访问) 可以先跑下这个 看看什么问题。
    git: command not found 可能是apache没有权限使用git 命令
7年前 评论
chip

为什么我的一直成功不了 也不会报错 就是无法自动部署

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!