Hexo自动化部署

安装Git

apt install -y git
git --version

# 生成公钥
ssh-keygen
cat ~/.ssh/id_rsa.pub
# 将公钥配置到 github 的账户中ssh选项。

安装Go

apt install -y golang

安装Webhook

开源项目地址这里用此项目配合自定义shell脚本部署更方便

go install github.com/adnanh/webhook@latest

配置服务器

创建项目目录,克隆项目

mkdir -p 你的项目目录
cd 你的项目目录
git clone git://xxx.git

在同级目录新建hooks.jsondeploy.sh

编辑hooks.json文件

vim hooks.json

[
{
"id": "自定义id名称",
"execute-command": "./deploy.sh",
"command-working-directory": "你的项目目录"
}
]

编辑deploy.sh文件

按自己的需求编辑deploy.sh文件并赋予脚本执行权限,这里编写好可以手动测试下脚本是否正常执行。

vim deploy.sh
chmod +x deploy.sh

下面是我的脚本内容,仅供参考,使用了nvm版本,并事先在服务器提前安装好pnpm跟hexo-cli。

#!/usr/bin/env bash
set -euo pipefail
export PATH="/root/.nvm/versions/node/v20.19.3/bin:$PATH"

COLOR_RESET="\033[0m"; COLOR_INFO="\033[1;34m"; COLOR_ERR="\033[1;31m"
log(){ local lvl=$1;shift; local c=$COLOR_INFO; [[ $lvl == ERROR ]]&&c=$COLOR_ERR
echo -e "$(date '+%F %T') ${c}[$lvl] $*${COLOR_RESET}"; }

deploy_project(){
local dir=$1 cmd=$2
log INFO "进入目录 → $dir"
pushd "$dir" >/dev/null || { log ERROR "目录不存在"; return 1; }

log INFO "更新代码 → git pull"
git pull --ff-only --quiet

log INFO "安装依赖 → pnpm install"
/root/.nvm/versions/node/v20.19.3/bin/pnpm install --silent

log INFO "执行构建 → $cmd"
if ! eval "$cmd"; then
log ERROR "构建失败"
popd >/dev/null
return 1
fi

popd >/dev/null
log INFO "✅ 部署完成!"
}

declare -A PROJECTS=(
["你的项目目录"]="hexo clean && hexo g"
)

for dir in "${!PROJECTS[@]}"; do
deploy_project "$dir" "${PROJECTS[$dir]}"
done

运行webhook服务

# 系统默认9000端口 可以用 -port 更改端口号
nohup /root/go/bin/webhook -hooks /data/webhook/project/hooks.json -port 自定义端口 -verbose >webhook.log 2>&1&

# 手动结束进程
查看端口号
lsof:i 自定义端口
netstat -tulnp|grep 自定义端口
ss -tulnp|grep 自定义端口
杀死进程
kill -9 pid进程号

# 也可以部署到宝塔上的Go项目,命令项填写为
/root/go/bin/webhook -hooks /data/webhook/project/hooks.json -port 自定义端口 -verbose

测试

GET  http://ip:自定义端口
页面应该出现Ok
GET http://ip:自定义端口/hooks/自定义id名称
查看执行日志内容无报错即可

配置webhook触发

Github-要部署的项目-Settings选项-Webhooks,输入http://ip:自定义端口/hooks/自定义id名称即可