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实现自动部署成功!

认真,可以让事情变得出乎意料地好!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3
chip

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

5年前 评论

几个问题问下大神!
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年前 评论

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