Hexo 是一个便捷的静态博客系统,最方便快捷的方案就是部署到 GitPage 上。但是 GitPage 的服务器位于美国,如果没有加 CDN 的话,国内用户访问 GitPage 的速度普遍较慢,而且国内搜索引擎对基本不(能)抓取 GitPage 上的内容,影响网站的 SEO。
环境
- 带 Git 环境的 ECS(以 Centos 为例)
- 本地 Hexo 环境(Node.js 等)
- 已备案域名等其他必要的东西
原理
示意图
创建仓库
在 ECS 上,检查 git 环境,创建 git 仓库
1 | mkdir blog.git && cd blog.git |
其中 git init --bare
指令的作用是创建一个裸仓库。裸仓库与普通 git 仓库不同,普通 git 仓库包含所有可操作性的项目文件和.git
目录,而裸仓库只包含 commit 的版本信息。简便起见,这里直接创建裸仓库。
Hexo 配置
1 | deploy: |
插件安装
1 | npm install hexo-deployer-git --save |
该插件的作用是执行 deploy
的时候,将 hexo 生成的静态文件提交到 hexo 的_config.yml
配置的 deploy.repo
地址。如果已经成功部署到 GitPage 过,该插件一般都默认安装了,可以执行该命令检查、更新插件。
自动部署
创建钩子
进入 git 仓库 /hooks
目录,并创建钩子 post-receive
。
1 | cd /www/blog.git/hooks |
然后输入以下内容
1 |
|
其中 /www/blog.git
为仓库路径,/www/wwwroot/pwner.cn
为博客网站路径,/www/tmp/blog
是临时目录。
git 会先将文件拉到临时目录,然后再将所有文件拷贝到博客网站目录 /www/wwwroot/pwner.cn
。
保存后退出。
更改目录权限
更改网站目录权限
1 | chmod +x post-receive |
运行
每次写完博客,在本地博客目录下运行 hexo g -d
即可。可能需要输入远程访问服务器的密码。
出现以下提示说明部署成功。
1 | ... |