Hexo - 自动部署博客

基于 GitHub-Webhooks 自动拉取并部署博客。

兆兆博客部署在宝塔面板上,每次部署时都要登录面板、上传文件,贼麻烦。燃鹅每次都忍了…终于有一天,忍无可忍了!

比较方便的方式可以通过 GitHub-Webhooks 设置钩子,在向 GitHub 远程仓库提交代码时,使用 webhook 向服务器发送请求,自动拉取代码更新博客。

在服务器的 webroot 目录下新建两个文件:

// webhook.js

const http = require('http');
const util = require('util');
const child_process = require('child_process');

const exec = util.promisify(child_process.exec);
const port = 3000; //配置端口
const host = 'localhost'; //配置域名
const matchUrl = '/webhook'; //配置路由

const server = http
.createServer(async (request, response) => {
try {
const url = request.url;
if (url === matchUrl) {
await exec('sh webhook.sh'); //执行当前目录下的脚本
response.write('Hexo webhook executed successfully');
response.end();
} else {
response.write(`Hexo webhook running at: http://${host}:${port}${matchUrl}`);
response.end();
}
} catch (e) {
console.error(e);
}
})
.listen(port, host, () => {
console.log(`Hexo webhook running at: http://${host}:${port}${matchUrl}`);
});
# webhook.sh
#!/usr/bin/env bash

rm -rf ~/www/wwwroot/zhaoo/*
cd ~/www/wwwroot/zhaoo/
git pull https://github.com/zhaoo/zhaoo.github.io.git

在宝塔面板的软件商店中安装 PM2管理器,运行 JavaScript 脚本:

配置 PM2

现在脚本是运行在 http://localhost:3000 下,外网无法访问,使用我们需要配置一个反向代理:

配置反向代理

默认是整个域名进行转发,会导致博客无法访问,所以需要修改下 Nginx 配置,只转发 /webhook 路由。

配置 Nginx

现在访问一下 https://www.izhaoo.com/webhook/,successfully!现在只需访问一次该 URL,服务器便会自动从 GitHub 拉取代码并更新博客。

最后只需要在 GitHub 配置一下 Webhooks 即可,向 GitHub 推代码时会自动向服务器发送请求。

配置 Webhooks

查看评论