Hexo 迁移日记

前言

之前,我的博客一直是使用 Hexo 框架部署到 GitHub Pages 的。最近购买了服务器,想要将博客从 GitHub Pages 迁移到服务器上,一方面可以加速访问,提高用户体验,另一方面博客可以被百度搜索引擎搜到,毕竟国内还是用百度的人多。本篇记录一下迁移的过程,以供他人参考

其实一开始是打算在服务器直接建 Hexo 项目的,只转移博客的 md 源文件。后来发现每次上传都要 ssh 连接,非常的不方便,所以改用建立远程仓库的方式

在服务器建立 Git 仓库

安装 Git

正常情况下 Linux 操作系统都会自带 Git,通过 git --version 输出版本号判断是否已安装 Git。如果没有安装请自行搜索教程

创建 Git 仓库

新建一个 Git 仓库,并且新建一个 post-receive 文件

裸仓库是一个没有工作目录的 Git 仓库,它只包含 .git 目录,不包含项目文件,只包含版本控制信息。这种类型的仓库通常用于作为远程仓库使用,或者作为多个仓库的共同基础

我这里选择在 /home/ubuntu 下新建一个 git 文件夹,用来存放裸仓库

git 文件夹下执行 git init --bare hexo.git 命令新建一个仓库

使用任意你喜欢的方式在 hexo.git 文件夹下的 hooks 文件夹中新建一个 post-receive 文件,写入以下内容:

1
git --work-tree=/home/ubuntu/hexo --git-dir=/home/ubuntu/git/hexo.git checkout -f

post-receive 是 Git hooks 的一种,它位于 Git 服务器上的裸仓库中。Git 钩子是脚本,它们在 Git 仓库的各种重要动作发生时自动执行。post-receive 钩子在推送操作完成后执行

这条命令指定 /home/ubuntu/hexo 作为工作目录,所有上传的文件都会保存到这个文件夹下,指定 /home/ubuntu/git/hexo.git checkout 为 Git 仓库目录。checkout -f 命令会强制检出当前 HEAD 指向的分支的最新状态到工作目录。这会覆盖工作目录中的所有文件,丢弃所有未提交的更改,从而覆盖原博客旧文件

由于我已经提前创建 /home/ubuntu/hexo,所以才会指定它为工作目录。在上传前要确保工作目录存在

同时要授予该文件可执行权限:

1
chmod +x /home/ubuntu/git/hexo.git/hooks/post-receive

配置 Git 密钥

由于我之前已经生成过了密钥,所以这里不需要再重新生成了,Windows 下密钥的默认保存位置为 C:/Users/用户名/.ssh/id_rsa.pub,Linux 下的默认位置为 ~/.ssh/id_rsa.pub

如果没有生成过的话可以使用 ssh-keygen 命令创建密钥

之后在服务器的 ~/.ssh 目录下新建 authorized_keys 文件,使用任意你喜欢的方式将 id_rsa.pub 文件中的所有内容复制到 authorized_keys 文件中

之后修改权限

1
chmod 600 ~/.ssh/authorized_keys

修改 Hexo 上传仓库

修改 Hexo 项目根目录下的 _config.yml 文件:

1
2
3
4
deploy:
type: git
repo: [email protected]:/home/ubuntu/git/hexo.git
branch: master

其中 ubuntu 为仓库拥有者的用户名,x.x.x.x 为服务器公网 ip,冒号后的为远端仓库路径

这时候我们使用 hexo g,就可以将原本应该 push 到 GitHub pages 的文件,push 到我们服务器的仓库了

image-20240720132719016

配置 Nginx

Nginx 配置教程

访问博客

不出意外的话,现在已经可以通过访问 4000 端口号或域名进入博客了