Hexo使用 GitHub Actions 自动推送更新到自己其他服务器
在使用 Hexo 搭建博客并推送到 GitHub Pages 后,我希望每次更新博客时,能够自动同步到我们的服务器(服务器上有其他域名,也是为了解决github page只能使用一个自定义域名的问题)。虽然可以通过在服务器上定期执行 git pull
来实现,但这种方法略显不够优雅。因此,我想到了使用 GitHub Actions
来实现这个自动化流程。💡
问题背景 🤔
每次执行 hexo cl && hexo g -d
后,GitHub Actions 的配置文件会被覆盖掉,因为 Hexo 部署时不会包含 .github
目录下的文件。这是因为 Hexo 默认不会编译以 .
开头的文件夹,这导致 public
目录中不会有 .github/workflows/<文件名>.yml
文件,从而使得 Actions 失效。
解决方案 🎯
通过阅读 hexo-deployer-git
的文档,我发现可以使用 extend_dirs
字段来包含特定的文件或目录,将其一同提交到远程仓库。这样就可以完美解决这个问题。👌
配置 Hexo
在 Hexo 的 _config.yml
中进行如下配置:
1 | deploy: |
注意:extend_dirs
读取的是博客根目录下的文件夹,而不是 source
中的。因此,GitHub Actions 的 yml 文件应该位于 /blogroot/.github/workflows/<文件名>.yml
,并且不支持通配符。
这样配置后,每次执行 hexo d
时,.github/workflows/
文件夹中的内容会被放到提交目录的根目录,即 /blogroot/.deploy_git/
中,GitHub 就能成功识别并执行 Action。🎉
使用 GitHub Actions 同步到服务器 🖥️
在项目根目录 /blogroot/
下创建 .github/workflows/deploy.yml
文件,填入以下内容:
1 | name: Deploy to Server |
配置 GitHub Secrets 🔑
接下来,到 GitHub Pages 项目的设置中配置环境变量:
点击
Settings
,找到Environments
。进入 GitHub 默认创建的
github-pages
环境变量组。在
Environment secrets
中点击Add environment secret
,设置以下变量:SERVER_IP
:你的服务器 IP 地址。SERVER_PORT
:SSH 连接的端口。SERVER_USER
:SSH 用户名。SSH_PRIVATE_KEY
:用于连接服务器的私钥。TARGET_DIR
:服务器上的目标目录。
完成这些配置后,运行 hexo cl && hexo g -d
,即可自动运行github action,可到后台查看进度。🚀
通过这样的设置,每次你更新 Hexo 博客并推送到 GitHub 时,GitHub Actions 将自动同步更新到你的服务器上,省去手动操作的麻烦。希望这个方法对你有所帮助!😊