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

认真,可以让事情变得出乎意料地好!
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 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

8年前 评论

@vipluosong

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

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

6年前 评论

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