Hexo 提供多种部署方式选择,详见 官方文档,考虑到 GitHub pages 在国内感人的访问速度,本站决定部署到国内个人 vps 上,采用 Git Hooks 自动部署的方案。
默认服务器已安装好 git,并配置好 ssh 访问。默认服务器已安装好 nginx,并有可使用的域名。
# 原理
# Git hooks
Git hooks 是在 Git 仓库中特定事件(certain points)触发后被调用的脚本,通过钩子可以自定义 Git 内部的相关(如 git push)行为,在开发周期中的关键点触发自定义的行为。
Git hooks 有两种类型:客户端的和服务器端的,客户端的 hooks 由诸如提交和合并这样的操作所调用,服务端的 hooks 作用于诸如接收被推送的提交这样的联网操作。
# 流程
- 用户在客户端执行
git push
操作 - 远程仓库发现有用户执行了 push 操作,就会自动执行一个脚本 post-receive
- 在 post-receive 脚本中,将 git 仓库的代码拷贝到 web 站点目录下
# 配置
# 服务器配置
- 创建目录并初始化一个 git 裸仓库
mkdir -p /home/hexo | |
cd /home/hexo | |
git init --bare blog.git |
使用 --bare 参数,Git 就会创建一个裸仓库,裸仓库没有工作区,我们不会在裸仓库上进行操作,它只为共享而存在。
- 配置 git hooks
# 进入 blog.git 下的 hooks 目录 | |
cd /home/hexo/blog.git/hooks | |
# 新建 post-receive 并写入命令 | |
vim post-receive | |
# 要写入的内容如下: | |
git --work-tree=/www/hexo --git-dir=/home/hexo/blog.git checkout -f | |
# 保存后赋予可执行权限 | |
chmod +x post-receive |
# 本地配置
- 安装 hexo-deployer-git 包
npm install --save hexo-deployer-git |
- _config.yml 文件中增加如下配置:
deploy: | |
- type: git | |
repo: root@your server ip:/home/hexo/blog.git | |
branch: master |
# 使用
执行如下命令即可将本地内容自动部署到远程服务器上
hexo clean | |
hexo g | |
hexo d |