cat
Shioho

# 前言

俺胡汉三又打完游戏回来更文啦,诶嘿。因为博客是基于 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.inidisable_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,完结,撒花💕

大佬的参考文档

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

汘帆 微信

微信

汘帆 支付宝

支付宝