My Hexo Website

一直想写个博客,拖到现在才开始写。虽然晚了很多,但总比什么也没有要好。
趁着现在还记得搭建博客所遇到的问题,在这里记录下来。

这个博客在github有一份备份。想用github做中间桥梁,中转博客。最后再写个自动化脚本同步博客。

现在先说说博客的搭建。

博客用的是默认主题landscape修改来的。只是删掉一些不用的东西,使博客更加简单。

修改代码高亮

Hexo的默认代码高亮不是很好。在我这里使用的是Google 的 code-prettify
把代码包下载下来后。解压开的prettify.css文件放在landscape主题的 source/css 目录下面。
其他语言的js文件都放到 source/js 目录下。

然后就可以修改 head.ejs 这个文件。让code-prettify在页面的最开始处加载。

<script src="<%- config.root %>js/prettify.js"></script>
<script type="text/javascript">
$(window).load(function() {
$('pre').addClass('prettyprint linenums');
prettyPrint();
})
</script>

修改默认的 highlight css 配置

<% if (config.highlight.enable){ %>
<link rel="stylesheet" href="<%- config.root %>css/prettify.css" media="screen" type="text/css">
<% } %>
修改图片插入方式

默认的Hexo图片管理不太方便。这里使用 hexo-asset-image 插件。
这样方便把图片与markdown放在同一个目录中,可以不再使用外部链接了。
可能这个插件的源没有与最新的同步好。还要打下补丁。

cd ~/mywebsite
hexo install hexo-asset-image --save
sed -i "s/^post_asset_folder: false/post_asset_folder: true/g" ~/mywebsite/_config.yml # 开户图片插件
sed -i "24s/.*/ var endPos = link.length() - 1;/g" ~/mywebsite/node_modules/hexo-asset-image/index.js # 打补丁
VPS新建立用户与组

为了方便管理,我们可以在VPS上重新建立一个用户与组来专门管理Hexo。

新建立一个hexo用户

usradd hexo

修改heox用户的密码

passwd hexo

新建立一个hexo用户组

groupadd hexo

把hexo用户增加到hexo用户组

usermod -a -G hexo hexo

切换到 hexo 用户

[[email protected] ~]# su hexo
[[email protected] root]$ cd ~
[[email protected] ~]$
配置github ssh登录

使用下面命令生成RSA的SSH Key

ssh-keygen -t rsa -b 4096 -C "[email protected]"

使用命令 eval `ssh-agent` 启动 ssh代理,并添加私钥到 ssh-agent中

[[email protected] ~]# eval `ssh-agent`
Agent pid 4186
[[email protected] ~]# ssh-add ~/.ssh/id_rsa

然后添加公钥到github
在github网页右上角下拉个人图标找到Settings–>SSH and GPG keys–>Add SSH Key 添加公钥。

最后我们测试下配置的密钥。如果成功将会返回成功信息。

ssh -T [email protected]

具体的配置可以看github的 使用 SSH 连接到 GitHub

重新部署Hexo

使用hexo用户从github上面克隆一份网页到VPS。
现在可以使用下面的命令重新部署Hexo。如果新的VPS没有安装hexo,可以用 npm install hexo hexo-cli hexo-server -g 安装hexo。

su root
npm install hexo hexo-cli hexo-server -g

su hexo
cd ~/mywebsite
npm install
hexo generate
hexo deploy

最后启动Hexo服务,正常情况下应该可以启动Hexo。

[[email protected] ~]# hexo server
INFO  Start processing
INFO  Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.
添加systemd启动Hexo

在/etc/systemd/system/目录中新建立一个hexo.service 内容如下。
具体的工作目录要根据实际目录修改。node 和 hexo 程序可以通过which找到。

[Unit]
Description=Hexo website Service
After=network.target
Wants=network.target

[Service]
User=hexo
Group=hexo
Type=simple
WorkingDirectory=/home/hexo/mywebsite
ExecStart=/usr/bin/node /usr/bin/hexo server
Restart=on-failure

[Install]
WantedBy=multi-user.target

hexo.service 配置完成后,我们可以启动Hexo服务。

[[email protected] hexo]# systemctl start hexo
[[email protected] hexo]# systemctl status hexo
● hexo.service - Hexo website Service
Loaded: loaded (/etc/systemd/system/hexo.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2019-08-05 21:08:04 CST; 2s ago
Main PID: 31588 (hexo)
Tasks: 10
Memory: 103.5M
CGroup: /system.slice/hexo.service
└─31588 hexo

Aug 05 21:08:04 dengyt systemd[1]: Started Hexo website Service.
Aug 05 21:08:06 dengyt node[31588]: INFO Start processing
为Hexo设置代理

这里使用caddy将Hexo网页代理出公网。
主要是因为443端口还有其他工具在使用,所以不会为了一个Hexo服务而浪费一个主要端口。

下面是我的caddy代理设置。

https://dengyt.net {
tls "[email protected]"
proxy / http://127.0.0.1:4000
gzip {
level 5
}
}
最后

Hexo的部署就到这里了。后面还有个同步的脚本,晚些空闲的时候再去写写。
过程可能跳过了很多内容。这些内容都是默认是已经会的基础知识。