# 前言
俺胡汉三又打完游戏回来更文啦,诶嘿。因为博客是基于 Hexo+Shoka 的嘛,本地项目就存在 gitee 上了,每次在客户端写完文章上传要部署到服务器上时,都要去登录服务器去手动执行 git pull
,感觉好麻烦呀,于是研究了一下下 webhook,在客户端 push 的时候会自动执行钩子函数去通知服务器进行更新,好诶,问题解决,那么看看是怎么实现的吧~
# 环境需知
由于钩子函数依赖于 php 实现,所以需要服务器安装 php 环境。由于环境安装比较麻烦,所以服务器这里使用了宝塔面板进行安装管理(会安装的自行跳过哈~
# 阿里云系统重置
既然要用宝塔面板,那就想着把服务器重置一波吧,登录阿里云后台点击重置系统,推荐 AlibabaCloudLinux (CenterOS)
好嘞,重装完系统感觉干净了很多,接下来就安装宝塔面板吧,登录 ssh,执行下列代码
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec |
安装成功后会提示面板路径 and 账号密码,记得保存哦~
登录面板、登录绑定自己的服务器,然后安装 LNMP 环境 (nginx 和 php)
安装 git
yum -y install git |
配置用户名密码
git config --global user.name "名字" | |
git config --global user.email "邮箱地址" |
生成配置 ssh-key
ssh-keygen -t rsa -C "邮箱" |
将生成的 id_rsa.pub 内容添加至 gitee 仓库
好啦,准备工作完成啦,接下来进行 nginx 代理和 webhook 吧
# 反向代理与 Webhook
# Nginx 反向代理
本来是不打算写 nginx 配置的,但由于站点配置了宝塔面板,在执行 webhook 的时候用户为 www,因此对于文件权限需要进行相关配置,所以干脆也重新配置一次好啦
- 切换 www 用户
su www |
如果出现 This account is currently not available.
错误,请将 /etc/passwd
文件下的 www:x:1000:1000::/home/www:/sbin/nologin
替换为 www:x:1000:1000::/home/www:/bin/bash
即可
后续操作完后,最好再将配置改回去哈
- git clone
切换到 www 用户,切换到你要存放的目录,git clone 一下(这里一定要使用 ssh 的方式进行 clone,不然服务端 git pull 需要输入账号密码),www 用户就有这个文件夹的读写权限啦,或者直接命令行设置 or 宝塔面板设置文件夹读写权限也行
在 git clone 时若遇到读取私钥文件错误问题,记得将私钥文件配置 www 读取权限
- 添加站点
点击添加站点,输入域名与对应的服务器文件夹目录即可
ssl 证书配置,可在阿里云申请,申请完成后将秘钥对输入配置保存即可
CORS跨域问题
:如果你的项目在访问别的资源时出现了跨域问题,记得在站点配置中添加 add_header 'Access-Control-Allow-Origin' '*';
哦😊
好啦,到此,站点配置就配置完成啦,你应该也能正常访问了,接下来就是 webhook 配置自动更新啦
# Webhook
Webhook,别名钩子函数,其实就是在 git 仓库 push 或其他操作时能自动 RPC 你的服务端代码,实现自动更新
- 自动更新钩子函数
这里采用 php 代码,别问,问就是网上抄的
<?php | |
$path = "/xxx/xxx"; // 你的 git 项目路径 | |
$cmdRes = shell_exec("cd {$path} && git pull origin master --rebase 2>&1"); // 执行 git pull ,2>&1 为将输出结果返回 | |
echo $cmdRes; |
注意,你的 php 可能禁用了 shell_exec
函数,需要在 php.ini
的 disable_functions
中删除该函数的禁用!!!记得要重启 php 服务哦~
宝塔面板中的 php.ini
路径为 /www/server/php/74/etc/php.ini
- gitee 配置 webhook
- 将钩子函数上传至你的服务器站点目录下以便调用
- 打开你的 gitee 项目,点击管理 ->Webhooks,添加一个 push 的 webhook,不设置密码,url 为站点域名 + 钩子函数.php
- 好啦,理论上这样就可以啦,点击测试按钮看看返回信息吧,若返回结果正常为 git pull 消息那么就证明你成功啦,如果不成功,辣么肯定是你的姿势有问题,在评论区留下问题瞅瞅吧 hhh
# 总结
好耶ヾ (✿゚▽゚) ノ,现在就能在客户端 git push 后主动同步至服务器啦,麻麻再也不用担心我去登录服务器同步浪费时间精力啦 hhh,完结,撒花💕
大佬的参考文档