光速(大雾)博客配置I -- Hexo+git+Nginx

前言

大年三十突然想正经搭个博客,说干就干。本着快捷易用的原则(当然也不能丑- -),选Hexo框架搭建,并借助git和Nginx把博客部署在自己的服务器上。

第一步 安装Hexo + git + Nginx

默认已经装完了git

Node.js

装node的方法有一大堆(孔乙己:你知道node有几种装法吗)。这里通过比较通用的nodejs版本管理器nvm安装,首先通过curl(mac和linux都能贼方便用)安装nvm

1
$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh

然后重启终端,安装稳定版node

1
$ nvm install stable

验证安装成功

1
2
$ node --version
10.15.1

安装Hexo,初始化Hexo项目

按照官网安装,和官网不同的是不需要启动hexo服务因为待会是要部署在Nginx上的。

1
2
3
4
$ npm install hexo-cli -g
$ hexo init blog
$ cd blog
$ npm install

创建了一个名叫blog的文件夹(也叫项目)

第二步 配置

Nginx

安装

1
$ apt install nginx

运行并设为开机运行

1
2
$ systemctl start nginx
$ systemctl enable nginx

测试nginx

1
$ wget http://127.0.0.1

能够正常获取index.html就表明成功

配置git

建立git同步仓库

详细可参考廖雪峰的git教程
新建git用户

1
$ adduser git

禁止git用户shell登陆,编辑/etc/passwd,找到类似

1
git:x:1001:1001:,,,:/home/git:/bin/bash

换成

1
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

建立裸仓

1
2
3
$ cd /home/git
$ git init --bare hexo.git
$ chown -R git:git hexo.git

将本机上运行Nginx的用户的ssh公钥填入/home/git/.ssh/authorized_keys文件(比如说我是用root用户运行Nginx文件的,就需要把root的ssh公匙放到authorized_keys里

1
$ cat ~/.ssh/id_rsa.pub

1
$ vi /home/git/.ssh/authorized_keys

配置Nginx

查看配置文件位置

1
$ nginx -t

得到配置文件位置在/etc/nginx/nginx.conf,参考配置文件说明,在http一项中添加虚拟主机如下

1
2
3
4
5
6
7
8
9
10
11
12
13
https {
...
server {
listen 8080;
root /home/git;
server_name localhost;

location / {
index index.html index.htm;
}
}
...
}

这里只需要配置最基本的参数即可,别的参数如重定向什么的交给Hexo处理
重启Nginx服务

1
$ service nginx restart

第三步 自动发布

这里通过hooks完成网站更新工作,将/home/git/hexo.git/hooks下的post-update.sample重命名为post-update

1
$ vi post-update

exec git update-server-info前添加

1
git --work-tree=/home/git --git-dir=/home/git/hexo.git checkout -f

修改post-update文件权限为可执行

1
$ chmod +x post-update

找到之前创建的Hexo项目(也就是blog文件夹),编辑_config.yml,修改#deploy如下

1
2
3
4
deploy:
type: git
repo: git@<your ip address>:/home/git/hexo.git
branch: master

在Hexo项目中(blog文件夹下)安装hexo-deployer-git

1
$ npm install hexo-deployer-git --save

创建新

1
$ hexo new new_blog_name

重新部署

1
$ hexo g -d

g(generate),d(deploy)
新文章在blog/source/_post
访问ip:8080就可以看到博客啦

LaTex支持

突然发现Hexo初始并不支持LaTex,对于深度炼丹人士这怎么行,好在很多主题都有很提到怎么添加LaTex支持,这里因为我主题用了archer,所以选用他提供的参考方法
以下操作在项目文件夹(也就是~/blog)下完成

用Kramed替换Marked

1
2
$ npm uninstall hexo-renderer-marked --save
$ npm install hexo-renderer-kramed --save

<your-project-dir>/node_modules/hexo-renderer-kramed/lib/renderer.js中的

1
2
3
4
5
// Change inline math rule
function formatText(text) {
// Fit kramed's rule: $$ + \1 + $$
return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$');
}

改为

1
2
3
4
// Change inline math rule
function formatText(text) {
return text;
}

用hexo-renderer-mathjax代替hexo-math

1
2
$ npm uninstall hexo-math --save
$ npm install hexo-renderer-mathjax --save

更新mathjax的CDN

9102年了npm装的最近版hexo-renderer-mathjax还在用过期的CDN(不换不能用,如果哪天官方给的版本里CDN更新了那就不用做这步了)。
<path-to-your-project>/node_modules/hexo-renderer-mathjax/mathjax.html中的含CDN链接的<script>标签更新为

1
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>

在文章设置中开启mathjax

1
2
3
4
5
---
title: Test Mathjax
date: 2019/02/04
mathjax: true
---

测试

这是一个 $R_{m \times n} = U_{m \times m} S_{m \times n} V_{n \times n}’$ 测试

舒服了…

参考

使用Nginx+Hexo光速搭建博客并实现服务器自动部署

阿里云CentOS下Hexo+Nginx建站过程