【Hexo】一键部署至远程服务器

前言

浏览洪哥博客时看到了一篇文章,使用Git将Hexo部署到远程服务器,觉得很有用,正好解决了我无法自动化部署至云服务器的烦恼。

首先讲一下我目前的部署方案,我之前介绍过如何进行Hexo文章的自动备份自动部署,我目前采用的就是这种方案,目前我一共有三个博客站点,一个部署在GitHub(blog.shiguang666.eu.org),一个部署在Vercel(blog.shiguang88.icu),一个部署在云服务器(blog.shiguangdev.cn),因为Vercel关联了GitHub账户,本质上前两种都是部署在GitHub上,只不过不是在同一个仓库,部署到云服务器的站点每次都要手动更新文件,非常麻烦。

接下来介绍下如何使用Git将Hexo一键部署至远程云服务器。

1、环境说明

1.1、远程和本地都需要安装Git

Linux上安装Git命令如下:

基于 Debian/Ubuntu 的系统:

1
sudo apt install git -y

基于 Red Hat/CentOS/Fedora 的系统:

  • 对于 CentOS/RHEL 7 及以下版本

    1
    sudo yum install git -y
  • (对于 CentOS/RHEL 8 及以上版本)

    1
    sudo dnf install git -y

1.2、远程服务说明

我的博客采用 1Panel 管理面板进行部署,网站主目录为:

1
/opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn

静态网页文件需要放在index目录内

image-20241213221659373

2、操作步骤

2.1、创建仓库

连接云服务器,切换到博客主目录

1
cd /opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/

在博客主目录创建一个文件夹,存放仓库文件

1
mkdir repo

切换到仓库目录,初始化裸仓库

hexo.git 是一个 文件夹,但它是一个特殊的文件夹,称为 裸仓库(bare repository)

  • 裸仓库 是一个没有工作目录(working directory)的 Git 仓库。
  • 它只包含 Git 的版本控制数据(如 .git 目录中的内容),而不包含实际的文件内容。
  • 裸仓库通常用于 共享代码部署代码,而不是用于开发。
1
2
3
cd repo

git init --bare hexo.git

2.2、创建钩子

1
vim /opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/repo/hexo.git/hooks/post-receive

输入i进入编辑模式,然后将下面那两行代码粘贴进去,输入:wq保存退出。

1
2
#!/bin/bash
git --work-tree=/opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/index --git-dir=/opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/repo/hexo.git checkout -f

根据实际情况修改目录位置,这个脚本的作用是 将 Git 仓库中的最新代码强制更新到指定的目标目录

这里,我指定的目标目录是 :

1
/opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/index

Git 仓库位于

1
/opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/repo/hexo.git

给钩子脚本赋予可执行权限

1
chmod +x /opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/repo/hexo.git/hooks/post-receive

2.3、修改Hexo配置

进入本地hexo博客的根目录,编辑站点配置文件 _config.yml,找到deploy,添加如下配置

1
2
3
deploy:
- type: git
repo: root@xx.xx.xx.xx:/opt/1panel/apps/openresty/openresty/www/sites/blog.shiguangdev.cn/repo/hexo.git,master

其中root@xx.xx.xx.xx 是Git账户@站点IP/域名

至此配置完成,本地执行hexo d 即可进行一键部署,部署时需要进行授权

image-20241213225942950

注意

如果有站点采用了 自动部署的方式进行部署,那么云服务器的站点需要单独执行,执行后注释掉deploy配置,否则会导致自动部署失败

image-20241213230626300

推荐使用 SSH连接远程服务器,这样就不用每次都输入密码进行验证了。

同理,部署云服务器节点时需要注释掉其他节点部署配置,由于自动部署每次都是通过脚本下载的hexo插件进行部署,所以也存在一些弊端,比如不支持自定义插件脚本或样式。

这样反而更麻烦了,不如直接停掉自动部署,自动备份依旧保留。

想要禁用自动部署,直接引用源码仓库的Actions功能就行了。

image-20241214162633169

部署时使用hexo d进行一键部署多个服务节点了。