前言
之前,我的博客一直是使用 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 | deploy: |
其中 ubuntu 为仓库拥有者的用户名,x.x.x.x
为服务器公网 ip,冒号后的为远端仓库路径
这时候我们使用 hexo g
,就可以将原本应该 push 到 GitHub pages 的文件,push 到我们服务器的仓库了
配置 Nginx
Nginx 配置教程
访问博客
不出意外的话,现在已经可以通过访问 4000 端口号或域名进入博客了