VPS 初体验(五)将 Hexo 静态博客一键部署到 VPS
使用 Hexo 配合免费的 GitHub 的仓库和 GitHub Pages 可以快速在互联网上搭建自己的个人博客。但是因为 GitHub Pages 在国内的访问速度太差,为了得到更好的访问体验,可以选择将博客部署到自己的 VPS 上。最直接的方法就是手动将生成的博客静态文件手动使用 FTP 上传到 Nginx 上的博客站点目录下,但是这样每次更新都要手动 FTP 上传显得麻烦且不优雅。
而 Hexo 本身提供了快速方便的一键部署功能,支持包括 Git、Netlify、SFTP 等多种部署方式。虑到稳定性和同步速度,最终选择了使用 Git 方式部署到 VPS。
首先需要在 VPS 上准备一个 Git 裸仓库作为 Hexo 的部署仓库。当运行 hexo deploy
命令时,会自动使用 git push
将博客的静态文件上传到 VPS 的 Git 仓库中。
注意:裸仓一般都是用来当做远程的中心公共仓库,专门用来存储和同步分发,裸仓库可以被正常 clone
和 push
,但是裸仓没有 worktree 的,不能像普通仓库那样进行 commit
等 Git 操作。
光把博客静态文件上传到仓库还不够,还需要拷贝到 Nginx 的博客站点目录一下才能被 HTTP(S) 访问。为此需要使用到 Git Hooks 功能,当服务器端的 Git 裸仓收到 git push 之后,会自动触发 Git Hooks 中的 post-receive
脚本,该脚本将 Git 裸仓中的文件拷贝到 Nginx 的博客站点目录下。这样就可以真正达到了 hexo deploy
命令全程自动部署的效果。
在宝塔面板已经创建好 kiku.vip 站点作为博客入口,站点的根目录为
/www/wwwroot/kiku.vip
。在 VPS 上安装 git,部分 Linux 发行版自带 git,可以跳过该步。
1
sudo yum install git
在当前用户目录初始化一个 git 裸仓。
1
git init --bare ~/hexoblog.git
为创建的裸仓配置
post-receive
这个钩子,当仓库有收发的时候就会自动调用这个钩子。 在~/blog.git
裸库的hooks
文件夹中,新建并编辑post-receive
文件。1
vim ~/hexoblog.git/hooks/post-receive
在文件中添加下面的脚本代码。第 1 行命令是删除
/www/wwwroot/kiku.vip
(即 kiku.vip 站点目录)下的文件,第 2 行命令将~/hexoblog.git
下的文件git clone
到/www/wwwroot/kiku.vip
(即 kiku.vip 站点目录)。如果为要操作的文件都配置了合理的权限下面出现的代码可以不加sudo
,为了图方便都和避免各种意想不到的权限错误,推荐直接加上sudo
。1
2sudo rm -rf /www/wwwroot/kiku.vip
sudo git clone ~/hexoblog.git /www/wwwroot/kiku.vip但更加推荐使用下面的命令替换上面的两行命令,效果和上面等效,但是比使用
git clone
的效率更高。--work-tree
参数后面是的是站点目录,--git-dir
参数指定的是 git 裸仓地址,注意要使用~/hexoblog.git
因为用到了 sudo,~
会指向 root 用户目录,直接使用/home/Kiku/hexoblog.git
。1
sudo git --work-tree=/www/wwwroot/kiku.vip --git-dir=/home/Kiku/hexoblog.git checkout -f
整个的第 4 步可以用下面一行命令完成。
1
echo sudo git --work-tree=/www/wwwroot/kiku.vip --git-dir=/home/Kiku/hexoblog.git checkout -f > ~/hexoblog.git/hooks/post-receive
赋予
post-receive
脚本文件可执行权限1
chmod +x ~/hexoblog.git/hooks/post-receive
修改本地 Hexo 配置文件
_config.yml
中的 deploy 选项。
注意:如果 VPS 上的 SSH 的连接端口不是默认的 22 需要手动指定端口。1
2
3deploy:
type: git
repo: Kiku@kiku.vip:/home/Kiku/hexoblog.git如果想同时部署到 GitHub 和 VPS 上的 git 裸仓 deploy 应该如下:
注意有多个部署选项时
type
时前面要添加-
。1
2
3
4
5
6deploy:
- type: git
repo: git@github.com:Kiku-CN/Kiku-CN.github.io.git
branch: master
- type: git
repo: Kiku@kiku.vip:/home/Kiku/hexoblog.git重新生成部署 Hexo 博客,查看部署是否成功。
1
2hexo clean # 先删除曾静态文件和缓存,避免可能的 Bug
hexo g -d # hexo generate deploy
前前后后花了接近半个月的时间在 VPS 上,才终于把服务器折腾成自己想要的效果。在这个过程中学到了不少网络和服务器相关的知识,发现了不少优质的博客站点,见识了中文互联网环境在墙外的的另一面。
参考
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!