主要流程:
- 在本机(写博客的电脑,后面称之为
写作环境
)上用markdown语法进行写作,本机也需要Hexo运行环境,因为写好了还需要预览,检查.所见即所得. - 将整个hexo项目托管到一个中介服务器上,手段很多,但是GIT托管最好用.
- 在VPS上安装GIT,Hexo,Nginx.其中GIT用于文件同步;Hexo担当编译器角色,将markdown格式的文档生成静态网页;Nginx做Web服务器.
- 为了用得舒服,需要在GIT服务器上设置webhook,目的是为了push博客更新事件(pull太笨拙了),触发VPS的更新动作(git pull,生成静态网页)
如果这个流程看懂了,并且各个技术环节都比较熟练,后面可以不用看了.
环境
- 写作环境(自己的电脑)
- 操作系统 windows
- VPS环境
- 操作系统 Ubuntu 16.04 (amd64,kernel 2.6.32)
- GIT仓库 gitab.com
配置写作环境
- 安装nodejs(有windows安装包,过程略)
- 安装hexo命令行工具
1
npm install hexo-cli -g
- 创建hexo项目(此项目是后面需要通过git同步的项目)
1
2
3
4d:
hexo init my-blog
cd my-blog
npm i - 新建一篇文章,试试水
1
2
3
4
5新建的文章位于 source/_post/下,
文件名就是命令行输入的文件名,可以是中文,不过考虑到要部署到VPS(Linux)的需求,还是英文文件名便于命令行操作.
hexo new "hello hexo"
启动服务,服务器端口会在命令行提示.
hexo s
写作环境已经搭建好了,hexo项目根路径是
d:/my-blog
.如果不需要发布到外网就可以收工了.
配置VPS环境
安装nodejs
我在nodejs的版本问题上踩了大坑,因为默认仓库nodejs只更新到4.2.6
(2016-01发布),而hexo要求版本(>=6.9.0).这导致后面各种报错.所以有必要先看看软件仓库的nodejs版本号:
1 | apt update |
输出如下:
1 | nodejs: |
因此不能直接从apt仓库安装nodejs,我按照nodejs的指引安装了8.x:
1 | curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - |
然后使用npm安装hexo命令行工具
1 | npm install hexo-cli -g |
配置gitlab的ssh访问密钥
这一步是因为我希望非人工的方式和私有git项目同步,这需要身份认证.如果是public项目就不需要了.
- 生成密钥对
1
2your_email 应该是gitlab账号的email
ssh-keygen -t rsa -C "your_email" -b 4096 - 命令执行后会在当前目录生成一对公私钥,公钥以
.pub
结尾.为了能够让ssh连接gitlab服务器时选择合适的私钥,需要在~/.ssh/
下建立一个config文件,内容格式如下:1
2
3
4GitLab.com server
Host gitlab.com
RSAAuthentication yes
IdentityFile 填私钥文件(ssh-keygen生成)的路径 - 在gitlab上,有一个添加SSH Key的页面(在个人设置里),将公钥文件(以
.pub
结尾的那个)里面的内容粘贴进去就好.
具体内容参考gitlab文档
hexo博客自动同步
先把项目拉取下来
1 | mkdir -p ~/my-blog/git |
测试一下
1 | cd ~/my-blog/git/my-blog |
在项目根目录下新建一个脚本文件(deploy.sh
),处理git服务端的push事件:
1 | git pull origin master |
在项目根目录下新建一个js文件(webhooks.js
),监听gitlab的推送事件:
1 | var http = require('http') |
在gitlab上配置webhooks(先进入对应项目,然后找到Settings
->Integrations
)
- URL填
http://[vps的ip或者域名]:18080/webhooks/push
- Secret Token用不上,随便填一个.
- Trigger选
Push events
测试webhook
1 | node ./webhooks.js |
在gitlab上配置webhooks的地方,找到刚刚配置好的webhook,点击Test(Push events).如果看见打印日志信息(见webhooks.js)就说明成功了.
为了让webhook服务后台运行,可以使用pm2
配置Nginx
万事俱备,就差一个web服务器了,这里选择Nginx
安装Nginx
1
apt install nginx
建立配置文件
在/etc/nginx/conf.d/下新建hexo.conf文件,模版如下1
2
3
4
5
6
7
8server {
listen 80;
server_name 1.2.3.4;
location / {
root ~/my-blog/git/my-blog/public;
index index.html;
}
}server_name
修改为VPS服务器IP或者域名location.root
修改为${hexo项目}/public
重新加载nginx配置信息
1
nginx -s reload
现在应该可以在公网上访问了.