作者:小傅哥
博客:https://bugstack.cn
原文:https://mp.weixin.qq.com/s/VtTHUfyiITNSoGy052jkXQ
积淀、分享、成长,让本人和别人都能有所播种!😄
https://www.bilibili.com/vide…
一、前言
小傅哥,我搞了三台服务器,保护学校游戏社站点,我麻了!
📧女粉来信:傅哥,我大二了,就编程学的还能够的那种大二女生😄。最近我不是天天看见一大堆人宣传服务器白皮袄吗,我就在 11.1 日也买了,还让宿舍的两个同学一起跟着买了,都买了三年。想着这样咱们三个人就能够搭建和保护咱们学校游戏社团的站点了,日常保护着学校的游戏较量、宣传、告诉,还能顺便就把我学的编程技术用上,一举多得嘛。原本还想,能够赶在 EDG VS DK 的时候上线秀一下呢,然而域名要备案好多天,只能鸽了。而且随着咱们三个熬夜的折腾服务器、做站点网站、备案域名,真是遇到太多问题了,以前感觉课本学了就能腾飞呢,当初全拉胯了。只能一遍学习傅哥的云服务器操作视频,一遍部署验证,真的学到了好多好多!再次感激傅哥!那么当初问题来了,就是傅哥你的 B 站视频只有 6 节,我看完也跟着做了,但这回我遇到了新的问题,就是就是,我三个服务器,依照视频配置完 Nginx 负载当前,每次都要通过 FTP 把网站文件传到三个服务器下来,有时候还遗记一个。这咋弄呀,傅哥给想想方法嘛。
📨傅哥回信:方法是有的,能够把你的网站代码设置公有仓库传到 Github 或者 Gitee,这两个代码库都反对 webhook 简略说就是当你把代码 push 到代码库当前,代码库会调用你事后配置好的一个或者多个回调钩子,其实也就是调用你三个负载平衡的站点提供的 URL,来告诉你当初这个代码库有最新更新的代码,你能够在收到 URL 的调用告诉当前,通过 git pull
命令把最新上传的网站代码,拉取到服务器上。那么当初的成果就是,你把代码保护在 GitHub 当前,上传最新的网站内容当前,三个站点就能够主动部署了,简要流程如下:
计划流程:
- 在本人的网站站点中,提供 webhooks URL 拜访地址,配置到
Github/Gitee
代码库的 Settings -> Webhooks在下文中会有具体介绍
- 例如图中 webhooks.php 开发的内容就是在接管到调用的时候,获取入参当前开始执行 git pull 操作
shell_exec("git pull origin main 2>&1");
- webhooks 配置实现当前,当咱们再通过 git push 把本地代码推送到仓库 (Github/Gitee) 的时候,仓库就会调用全副的 webhooks.php,把仓库 (Github/Gitee) 中的代码拉取到站点中,这样就实现了整个站点内容的更新。
🤔 傅哥,你说的我悟了,但须要你再手把手,操作下!
二、环境阐明
- 【必须】应用 Github、Gitee、Codechina 保护网站代码,因为这些代码库能够反对配置 webhooks
- 【必须】Linux 云服务器(公网 IP);装置 Git、装置 Nginx、装置 PHP、装置 FTP
- 【可选】应用宝塔运维面板,部署站点博客,操作起来会比拟不便
三、站点配置
首先,咱们应用 Linux 宝塔运维面板,增加一个博客站点,在增加之前须要在宝塔中装置 Nginx、FTP、PHP 模块,如果你对这里的操作比拟生疏,能够先看小傅哥在 B 站录制好的云服务器学习视频,地址:https://space.bilibili.com/15637440/channel/seriesdetail?sid=479958 PS:当然你也能够不应用宝塔,通过命令装置 Nginx 或者 Apache 服务器等所须要的软件也是能够的。
1. 环境装置
装置 Git
- 需要:在站点接管到 webhooks 回调时,应用 git pull 拉取网站代码,所以须要装置 git
- 命令:
yum -y install git
- 验证:
[root@CodeGuide ~]# git version
git version 2.27.0
装置 Nginx、FTP
- 需要:部署博客站点时会须要到 Nginx 服务器、FTP 上传
- 操作:能够间接在宝塔中应用
软件商店
进行装置
配置 PHP,容许 exec 脚本指令
- 需要:因为咱们应用的是 PHP 开发的 webhook 回调操作,所以这里须要装置 PHP 模块
- 装置:间接在宝塔的软件商店中进行装置即可
-
配置:装置完 PHP 模块当前,还须要对 PHP 的
php.ini
进行更改,删除 disable_functions 下的 exec、shell_exec,这样能力在 webhooks.php 文件中,执行脚本命令。如图:
2. 站点配置
- 环境装置结束后,就能够增加一个网站的站点了,你的网站运行代码都须要上传到这个站点中,它提供了 FTP 操作以及宝塔运维面板中还有一个
文件
,能够在线批改站点内容。
3. 拜访站点
- 地址:http://39.96.73.167 – 你换成本人的拜访 IP 即可
- 形容:默认创立完站点,会在
/www/wwwroot/39.96.73.167
目录下有一个 index.html 此时你能够进行在线批改
四、创立公钥
SSH 是 Linux 零碎的登录工具,当初宽泛用于服务器登录和各种加密通信。
1. 查看运行用户
个别 php 运行应用的是 www
用户,咱们能够通过 ftp 上传一个 index.php 到站点根目录下,之后进行拜访站点,查看我的项目门路和用户目录。
index.php 中的代码如下
<?php
header('Content-type: text/html; charset=utf-8');
ini_set("error_reporting", "E_ALL & ~E_NOTICE");
echo "Hi,Webhooks!By 小傅哥 <br/>";
echo '<br/> 测试:输入我的项目门路和用户目录:<br/>';
exec("cd ~ && cd - && cd -", $output);
echo '<pre>';
echo print_r($output);
echo '</pre>';
- 如果你未对
php.ini
中的disable_functions = {exec、shell_exec}
删掉,那么执行这个 php 文件的中脚本指令会报错。
拜访站点
- 我的项目门路:
[0] => /www/wwwroot/39.96.73.167
- 用户目录:
[1] => /home/www
– www 就是这个用户目录,也就是咱们须要为其创立 ssh 公钥的用户
2. 生成和配置公钥
2.1 开启 www 用户
- 命令:
vim /etc/passwd
-
配置:把
sbin/nologin
为bin/bash
2.2 生成公钥
因为咱们曾经开始了 www 登录权限,那么在生成公钥之前,须要切换到 www 账户下,命令:su www
- 切换用户:
su www
- 生成公钥:
ssh-keygen -t rsa -C "184172133@qq.com"
– 默认回车即可 -
查看公钥:
cat ~/.ssh/id_rsa.pub
– 其余账户下不可见,只有切换到 www 可见
2.3 配置公钥(Github)
- 地址:https://github.com/settings/s…
-
配置:把你通过
cat ~/.ssh/id_rsa.pub
查看到的公钥,配置到这里即可,如下:- 有了这个公钥的配置,咱们通过 webhooks.php 中的脚本指令就能够主动的拉取代码了。
五、webhooks 更新博客
1. 克隆我的代码
- 源码:关注公众号:bugstack 虫洞栈 – 回复:
guide-webhooks
即可取得 - 应用:你能够把我的源码先 fork 到本人的 Github,而后部署到你的站点中。在学习实现搞清楚原理后,再解决你本人的站点
2. 部署到站点
- 这里咱们须要先在站点应用
git clone”你的网站代码 git 地址“
,把 Github 代码克隆到本人的博客中,其实也就是启动了部署做的作用。而这步操作,其实就是日常应用 Git 的形式,先克隆代码,在一直 git pull 更新。 - 命令:
[www@CodeGuide 39.96.73.167]$ git clone git@github.com:fuzhengwei/guide-webhooks.git
– 留神,你须要切换为本人的代码库地址,否则 webhooks 不能失效
3. 更改网站运行目录
- 因为咱们曾经在博客站点中,从 Github 克隆下来咱们的博客运行代码,那么这里须要把网站的运行目录切换到这个文件夹下,这样就能失常拜访到咱们的博客代码了。
4. 配置 webhooks
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('password error');
}*/
// 我的项目寄存物理门路,也就是站点的拜访地址
$path = "/www/wwwroot/39.96.73.167/guide-webhooks/";
// 判断须要下拉的分支上是否有提交,咱们这里的分支名称为 main
if ($content['ref'] == 'refs/heads/main') {
// 执行脚本 git pull,拉取分支最新代码
$res = shell_exec("cd {$path} && git pull origin main 2>&1"); // 以后为 www 用户
// 记录日志 ($content 返回的是一整个对象,能够按需获取外面的内容,写入日志)
$res_log = '------------------------->' . PHP_EOL;
$res_log .= '用户' . $content['pusher']['name'] . '于' . date('Y-m-d H:i:s') . '向我的项目【' . $content['repository']['name'] . '】分支【' . $content['ref'] . '】PUSH' . $content['commits'][0]['message'] . PHP_EOL;
$res_log .= $res . PHP_EOL;
// 追加形式,写入日志文件
file_put_contents("git_webhook_log.txt", $res_log, FILE_APPEND);
}
echo 'done';
- 在咱们从 Github 克隆下来的代码文件中,有一个名为
webhooks.php
的文件,它是用于解决 Github 回调时拉取 Github 对应博客代码库的脚本文件。 -
当初 http://39.96.73.167/webhooks.php 就能够配置到 Github 的 webhooks 下了,如图:
- 配置,URL、Content type、Secret、trigger,配置实现后确认即可,另外你能够把多个服务器实例都配置上 webhooks,这样就能够在推送代码到 Github 仓库时一起部署了。
六、部署验证
目前 ,拜访博客是这样,如下: 接下来咱们开始批改博客文件并提交,验证主动部署更新站点
1. index.php 新增代码
- 你能够在 index.php 文件中批改任意内容,或者增加新的内容。
2. push 代码到 Github
- 推送新批改的内容,到代码库中,期待 Github webhooks 回调脚本
3. 验证博客更新
- 地址:http://39.96.73.167/
-
成果:
- 通过拜访博客地址,曾经能够看到咱们新退出的内容,曾经主动部署更新到站点了!✌🏻
4. 查看脚本执行日志
在咱们的 webhooks.php 中,执行 git pull 脚本的时候,还有一段日志记录,便于通晓谁对网站对了什么!
git_webhook_log.txt
- git_webhook_log.txt 是在 webhooks.php 中记录的日志文件,你能够自行扩大其余须要输入的内容。
5. 查看 webhooks 推送日志
- 每一次 webhooks 执行时,都会有对应的记录,来通知你本次代码推送是否被回调胜利。并且在日志中,你还能够看到 webhooks 向你推送的内容 JSON 文件内容,你能够从中获取须要的信息,比方这是谁推送的、在哪个分支推送的、推送的文件有哪些等等。
- 这里也截取了一段推送的 JSON,其余信息你能够在推送记录中本人查看了。
七、总结
- 本章节咱们带着大家彻底的把 webhooks 的应用走了一遍,也让须要此技术的小伙伴能够让本人的站点部署变更的更加
聪慧一些
。当然本人做记录也帮忙了一些师弟和小姐姐! - 那么当初如果你手里有服务器正在吃灰不晓得怎么用起来,当初能够折腾起来了,因为傅哥给你录好了入门视频、写好了操作文章,那么不要期待了,上吧!年轻人!课程链接:https://space.bilibili.com/15637440/channel/seriesdetail?sid=479958
八、系列举荐
- 《Netty+JavaFx 实战:仿桌面版微信聊天》代码开源、上云部署、视频解说,只为让你给点个 Star!
- Cloudreve 自建云盘实际,我说了没人能限得了我的容量和速度!
- 一天建 4 个,小傅哥教你搭博客!
- 小傅哥,一个有“副业”的码农!
- 讲道理,只有你是一个爱折腾的程序员,毕业找工作真的不须要再花钱培训!