【技术种草】利用Webhook自动部署我在腾讯云的多站博客

  经营许可证     |      2023-08-27
【技术种草】利用Webhook自动部署我在腾讯云的多站博客

作者:付哥

博客:https://bugstack.cn

一、前言

付哥,我在腾讯云架设了三台服务器来维护学校游戏俱乐部网站,我麻木了!

https://cloud.tencent.com/act/double11?spread_hash_key=bbf238ef22b9f70e8d5fd6b5edb9f846 女粉丝来信:傅兄弟,我是大二学生,我是一个会学编程的大二女生。我最近不是每天都看到很多人在推销服务员的白色皮夹克吗?我也是11月1号买的,我叫宿舍里的两个同学一起买的,买了三年了。想着这样我们三个人就可以搭建和维护我们学校游戏社的网站,维护学校日常的游戏比赛、宣传、通知,并使用我顺便学到的编程技能。但随着我们三个人彻夜不眠地折腾服务器、建网站、备案域名,我们真的遇到了太多的问题。以前我觉得学完课本就可以起飞了,现在我已经彻底崩溃了。我只能研究一次付哥的云服务器操作视频,部署验证一次。我真的学到了很多东西!再次感谢傅老师!那么现在问题来了,就是我有三台服务器,按照视频配置好Nginx负载后,我每次都要通过FTP将网站文件传输到三台服务器上,有时甚至忘记一台。这是怎么回事啊,福兄,你想想办法吧。

付哥回信:办方法可用。您可以为您的网站代码建立一个私有仓库并将其发送到Github或Gitee。两个代码库都支持webhook。简单来说,当你将代码推送到代码库时,代码库会调用你预先配置的一个或多个回调钩子,实际上会调用你的三个负载均衡站点提供的URL,以通知你代码库有最新更新的代码。您可以在收到通知后调用该URL,通过git pull命令将最新上传的网站代码拉取到服务器。所以目前的效果是,当你在GitHub上维护代码并上传最新的网站内容后,三个网站就可以自动部署了。简要流程如下:

方案流程

在自己的网站中,提供webhooks URL访问地址,并在Github/Gitee代码库的设置-Webhooks中进行配置,下面会详细介绍。比如webhooks的开发。然后开始执行git pull 操作shell_exec('git pull origin main 21'); webhooks配置完成后,当我们通过git push将本地代码推送到仓库(Github/Gitee)时,仓库会调用所有的webhooks。 php,将仓库(Github/Gitee)中的代码拉取到站点,从而完成整个站点内容的更新。 福哥,你说的我明白,但是我需要你牵手操作!

二、环境说明

【必填】至少一台腾讯云服务器,购买地址:https://cloud.tencent.com/act/double11?channel=yunjiafrom=10680 【必填】使用Github、Gitee、Codechina维护网站代码,因为这些代码基础可以支持webhooks的配置【必备】Linux云服务器(公网IP);安装Git、安装Nginx、安装PHP、安装FTP 【可选】使用宝塔运维面板部署站点博客,操作起来会更方便:

三、站点配置

010 -59000,我们使用Linux宝塔运维面板添加博客网站。添加之前,我们需要在宝塔中安装Nginx、FTP、PHP模块。如果你对这里的操作比较陌生,可以先观看B站付哥录制的好云服务器学习视频,地址:https://space.bilibili.com/15637440/channel/seriesdetail?sid=479958 PS:当然可以也可以不使用宝塔,通过命令安装Nginx或Apache服务器等所需软件。

1. 配置并登录宝塔

地址:http://80.71.255.xxx:8888/- 修改为你的地址账号:用户名和密码已经在控制台打印了,你可以自己复制,登录宝塔后可以修改默认密码:

2. 安装阿帕奇和FTP

接下来我们在宝塔中安装一个Apache服务器和FTP,这样就可以部署并访问我们的静态博客了,这是一个html,如下:

首先

安装过程中会自动执行一些命令,你不用担心这个,静静观看即可。安装 Apache

安装FTP的主要目的是在本地传输文件到服务器。例如,如果您的静态博客是html,则可以通过FTP传输到服务器。

3. 网站配置

安装完Apache和FTP之后,我们就可以简单的配置一个站点了。有了这个网站,我们就可以访问自己的博客了!

安装 FTP

适合创建网站。如果您还没有申请域名,或者域名还没有备案,那么您可以直接填写公网IP。创建站点

地址:http://80.71.255.***/访问时可以改为自己的IP:

4. 环境安装

访问站点

需求:当网站收到webhooks 回调时,使用git pull 拉取网站代码,因此需要安装git 命令: yum -y install git 验证: [root@CodeGuide ~]# git version git version 2.27.0 copy安装 Git

需求:部署博客网站时,需要上传到Nginx服务器和FTP 操作:可以使用宝塔软件商店直接安装安装 Nginx、FTP

需求:由于我们使用的是PHP开发的webhook回调操作,所以这里需要安装PHP模块。安装:直接在宝塔软件商店安装。配置:安装完PHP模块后,还需要配置PHP的php.ini,修改并删除disable_functions下的exec和shell_exec,这样就可以在webhooks.php文件中执行脚本命令了。如图:[](https://bugstack.cn/images/article/devops/devops-1107-05.png) 复制:

5. 站点配置

环境安装好后,就可以添加网站站点了,你的网站运行起来代码需要上传到本站,本站提供FTP操作以及宝塔运维面板中的一个文件,可以在线修改本站的内容。

6. 访问站点

地址:http://80.71.255.*** - 可以改为自己的访问IP 说明:站点默认创建后,在/www/wwwroot/80.71.255 下会有一个索引。 *** 目录。此时可以在线修改:

四、创建公钥

SSH是Linux系统的登录工具,现在广泛用于服务器登录和各种加密通信。

1. 查看运行用户

一般使用www用户来运行php。我们可以通过ftp上传一个index.php到站点根目录,然后访问站点查看项目路径和用户目录。

配置 PHP,允许 exec 脚本指令

?phpheader('内容类型:text/html; charset=utf-8');ini_set('error_reporting', 'E_ALL ~E_NOTICE'); echo '嗨,Webhooks!作者:付哥br/';echo 'br/test:输出工程路径及用户目录:br/';exec('cd ~ cd - cd -', $output);echo 'pre';echo print_r($output ) ;回显'/pre';如果不删除php.ini中的disable_functions={exec, shell_exec},那么执行该php文件中的脚本命令时会报错。index.php 中的代码如下

项目路径:[0]=/www/wwwroot/80.71.255.*** 用户目录:[1]=/home/www - www就是这个用户目录,也就是我们需要为其创建ssh公钥的用户:

2. 生成和配置公钥

2.1 开启 www 用户

命令: vim /etc/passwd 配置: 将sbin/nologin 改为bin/bash![](https://bugstack.cn/images/article/devops/devops-1107-06.png) 复制: 010 - 1010 因为我们已经开启了www登录权限,所以在生成公钥之前,我们需要切换到www账户,命令:su www

切换用户:su www 生成公钥:ssh-keygen -t rsa -C '184172133@qq.com' - 默认按回车查看公钥:cat ~/.ssh/id_rsa.pub - 其他账户下不可见,只有切换到www才可见! [](https://bugstack.cn/images/article/devops/devops-1107-07.png) 复制:

2.2 生成公钥

地址:https://github.com/settings/ssh/new 配置:把你通过cat ~ /中查看到的公钥.ssh/id_rsa.pub可以在这里配置,如下:[](https://bugstack.cn/images/article/devops/devops-1107-08.png) copy - 有了这个公钥配置,我们就可以自动拉取代码了通过webhooks.php 中的script 命令。复制:

2.3 配置公钥(Github)

五、webhooks 更新博客

源码:关注公众号:bugstack 虫洞栈- 回复:guide-webhooks 可以使用:你可以先将我的源码fork到你自己的Github上,然后部署到你的地点。学习完并搞清楚原理后,接下来处理自己的站点:

1. 克隆我的代码

这里我们需要先在站点上使用git clone “你的网站代码git地址”,将Github代码克隆到自己的博客中,即实际上是为了启动部署的作用。而这一步其实就是日常使用Git的方式,先clone代码,并不断git pull更新。命令: [www@CodeGuide 80.71.255.***]$ git clone git@github.com:fuzhengwei/guide-webhooks.git - 注意,需要切换到自己的代码基地址,否则webhooks不会生效

2. 部署到站点

因为我们从Github克隆了我们的博客来运行博客网站上的代码,所以我们需要将网站的运行目录切换到这个文件夹,这样我们才能正常访问我们的博客代码。

3. 更改网站运行目录

访问站点

webhooks.php

?php/** * Git webhooks 自动部署脚本* 地址:https://github.com/fuzhengwei/guide-webhooks/settings/hooks *///接收post参数$requestBody=file_get_contents('php://input');if ( empty($requestBody)) { exit('data null!');}//Content type=application/json$content=json_decode($requestBody, true);//验证Webhooks配置的Secret,否则不验证/* if (empty($content['password']) || $content['password'] !='123456') {exit('密码错误');}*///项目存储的物理路径,其中是站点访问地址$path='/www/wwwroot/80.71.255.***/guide-webhooks/';//判断分支上是否有需要pull下来的commit。我们这里的分支名称是mainif ($content['ref ']=='refs/heads/main') { //执行脚本git pull 拉取最新的分支代码$res=shell_exec('cd {$path} git拉原点主21'); //当前www用户//记录日志($content返回一个完整的对象,可以根据需要获取里面的内容写入日志) $res_log='-------------- ----- -----' .PHP_EOL; $res_log .='用户' .$content['pusher']['name'] . 'at' .date('Y-m-d H:i:s') 。 '。 $content['存储库']['名称'] 。 ']分支【' 。 $内容['ref'] 。 '】推' 。 $content['commits'][0]['message'] 。 PHP_EOL; $res_log .=$res . PHP_EOL; //append方法,写入日志文件file_put_contents('git_webhook_log.txt', $res_log, FILE_APPEND);}echo 'done';复制我们从Github克隆的代码文件中,有一个名为webhooks.php的文件,该文件是一个脚本文件,用于在处理Github回调时拉取Github对应的博客代码库。现在Github的webhooks下可以配置http://80.71.255.***/webhooks.php,如图:- Configuration、URL、Content type、Secret、trigger,配置完成后确认,可以放多个Server实例配置有webhook,以便在将代码推送到Github 存储库时可以将它们一起部署。复制:

4. 配置 webhooks

回调脚本,这样访问博客,如下: 接下来我们开始修改博客文件并提交,验证更新站点的自动部署

六、部署验证

您可以修改index.php文件中的任何内容,或添加新内容。

1. index.php 新增代码

将新修改的内容推送到代码库,等待Github webhooks回调脚本:

2. push 代码到 Github

地址:http://80.71.255.***/效果:新人优惠:https://cloud.tencent.com/act/double11 ?channel=yunjiafrom=10680通过访问博客地址,我们已经可以看到我们新添加的内容,这些内容已经自动部署更新到站点了!

3. 验证博客更新

在我们的webhooks.php中,执行git pull脚本时,也有一条日志记录,方便知道网站的哪些内容谁是对的!

目前

git_webhook_log.txt是webhooks.php中记录的日志文件,您可以自行扩展其他需要输出的内容。

4. 查看脚本执行日志

每次执行webhooks都会有相应的记录告诉你代码推送是否成功回调。而且在日志中,你还可以看到webhooks推送给你的JSON文件的内容,从中你可以得到你需要的信息,比如是谁推送的,在哪个分支推送的,推送了哪些文件等等。这里还拦截了一段推送的JSON,剩下的信息大家可以自己在推送记录中查看。

5. 查看webhooks推送日志

这一章我们将带大家彻底了解webhooks的使用,也让需要这项技术的小伙伴让自己的站点部署改变更加智能。当然,自己做唱片也帮助了一些学弟学妹们!所以现在如果你有一台正在吃灰的服务器,不知道怎么用,你现在就可以开始折腾了,因为福哥已经给你录了一个介绍视频,写了一篇操作文章,所以别等了, 我们走吧!年轻人!