在自己服务器(办娃宫)上部署Hexo且用git同步

Hexo

之前有尝试过WordPress,也在使用为知笔记.不过直接同步到WordPress上格式一直很烂.后来放弃了.还是Hexo配合Markdown适合我.

搭建流程

本地搭建Hexo

Mac上还是比较轻松的.

首先安装Brew

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

再安装NodeJSHexo

1
brew install node
1
npm install hexo-cli -g

此时本地基础环境就已经搭建好.随便找个目录执行

1
2
3
hexo init blog
cd blog
npm install

本地浏览器打开http://localhost:4000/应该就可以看到一个初始网页了

服务器端配置

思路

Hexo的原理应该是本地使用NodeJSMarkdown渲染成静态网页. 所以服务器端只需要

  • 构建一个Http服务器
  • 通过Git同步部署到服务器的仓库
  • 写Git的Hook,将Pulish文件夹下面的内容同步到Http文件夹下

搭建Http服务器

1
yum -y install httpd

参考教程
如果不用httpd,也可以选择nginx

安装和配置Git

参考 教程一 教程二, 不过我自己的方法略有不同

1
2
3
4
yum install -y git
adduser git
cd /home/git/
sudo git init --bare hexo.git

执行完这几步以后,就在

  • 服务器上安装了Git
  • 创建了一个名字为git的用户
  • /home/git/目录下创建了名字为hexo.git的仓库

后面的步骤相比网上其他的教程来说,相对要tricky一些.

首先找一个SFTP软件,我用的是FileZilla. 然后使用root账户登录进去
1

  • 创建.ssh文件夹
  • 创建authorized_keys文件(空文件无后缀名)

接着在Mac本地创建 .shh文件夹/Users/**你的用户名**/.ssh/
命令行进入该文件夹后执行

1
ssh-keygen

文件叫id_rsa
2

将本地id_rsa.pub文件传到服务器的/home/git/.ssh目录下,然后执行命令

1
cat id_rsa.pub > authorized_keys

在本地创建post-receive文件(没有后缀名)

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/hexo.git #git 仓库
TMP_GIT_CLONE=/tmp/hexo
PUBLIC_WWW=/var/www/html #网站目录
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

将文件上传到/home/git/hexo.git/hooks目录下

此时已经完成了

  • Git的自动授权(也就是部署时候直接key授权,不需要再使用用户名密码了)
  • Git上挂Hook自动同步到网站目录

但是由于是使用FileZilla创建的文件和文件夹. 文件的权限和所有者不对(所有者是root帐号,不是git帐号).

权限可以使用FileZilla直接改,再需要改的文件夹下右键,选择文件属性

3

文件的所有权可以使用chownchgrp命令更改.

1
2
3
/home/git/hexo.git/ chgrp -R git *
chown git:git -R /var/www/html/
chown git:git -R /home/git/hexo.git/

因为具体操作的流程已经忘记了,不过如果git操作时候出现
insufficient permission
Permission denied
类似这种情况,应该就是文件的权限不够,或者文件的所有者不是git账户. 在服务器可以使用ll命令进行查看

4

需要保证 /home/git/目录下的所有文件 及 /var/www/html/目录的样子像上图一样. 两列都是git,而不是root

配置Hexo,使用Git同步

在本地的Blog文件夹根目录下执行,安装Git部署插件

1
npm install hexo-developer-git --save

修改_config.yml(注意是Hexo的Config,不是安装主题的Config)

coruntine_test.lua

1
2
3
4
deploy: 
type: git
repo: ssh://[email protected]服务器IP:SSH端口/home/git/hexo.git
branch: master

然后执行

1
2
hexo g
hexo d

大功告成

End

坚持原创技术分享,您的支持将鼓励我继续创作!