Hexo作为一款优秀的静态博客广受好评。网上大多数的教程都是基于Hexo+Github Page来写的。这种模式有很多优点,但对我来说也有一些缺点。首当其冲的就是无法很好的适应多平台,随着移动互联网时代的到来,我们可以实现在移动设备上进行轻办公。同时我们每天都要流转于家、公司和路上。如果想在每一台设备上都能够进行无缝连接的使用Hexo,我们首先可以选择jaredly
的hexo-admin项目,使用hexo-admin
我们可以实现在线编辑博客并发布。但是,本文的主角并不是hexo-admin
,而是SHOMT(Simple-Hexo-Online-Manage-Tool),一个基于Python Flask和Git,实现在线管理、自动备份Markdown文档到Git的Hexo在线管理备份系统。
本文主要介绍如何使用SHOMT在线管理、同步、备份Hexo博客内容。项目说明、配置参数等详细内容可以参考项目页面。
使用方法
准备工作
环境配置
环境配置部分分为两种方法:
- 不使用docker
- 使用docker
不使用docker
配置Hexo环境
这部分是按照官方教程进行安装的:
安装Node.js环境,可以参考:nodesource
1 | 这里如果安装最新的14.x会导致hexo出错,所以选择了相对稳定无错的12.x版本,如果本身为root用户则可删除"sudo -E" |
至此,hexo所需要的基本环境已经搭建完毕。接下来需要初始化一个目录作为blog目录。此处以/home/blog
为例,初始化的目录需要为空,否则会报错。
1 | mkdir /home/blog && cd /home/blog |
配置git-ssh
配置git-ssh是为了在与git系统交互的过程中无需手动输入密码,这部分可以参考掘金上的帖子。使用码云参见官方文档。
创建并拉取git备份仓库
拉取远程备份仓库,例如我这里创建的为https://github.com/lureiny/test_blog
,其中仅包含一个README.md文件。
1 | 这里clone时一定要使用ssh的链接,否则git push时会需要输入用户名,这在配置git-ssh的链接中有提到 |
配置python环境
这里使用miniconda进行配置
1 | cd /home && wget "https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh" -O "miniconda.sh" |
至此所需的python环境搭建完成。
安装screen
screen是用来解决终端断开时进程自动终止问题的一个程序,因为无论是python
进程还是hexo server
都不是后台进程,这就导致我们退出终端时进程会自动中断,因此使用screen来解决这个问题
1 | sudo apt install screen |
screen简单入门参考:菜鸟教程
使用Simple-Hexo-Online-Manage-Tool
1 | cd /home && git clone git@github.com:lureiny/Simple-Hexo-Online-Manage-Tool.git "shomt" && cd shomt |
针对此用例的配置如下,详细的配置文件说明可以参考项目页面上的说明。
post_path: “/home/blog/source/_posts”
deploy_command: “cd /home/blog/ && hexo g”
remote_git: “git@github.com:lureiny/test_blog.git”
local_git_path: “/home/blog_bak”
webhook_secret: “test”
token: “token”
其他参数默认
1 | 新建一个screen窗口并启动hexo进程 |
访问
至此,访问http(s)://{host}:5000可以看到管理页面,访问http(s)://{host}:4000可以看到博客页面,这里我建议使用Nginx作为网络服务器反向代理本地的4000和5000端口
配置webhook
在github备份项目页面(本例中: https://github.com/lureiny/test_blog
),webhook设置在Settings
->Webhooks
->Add webhook
。
在Payload URL
中填入回调链接:http(s)://{host}:5000/webhook
,Content type
选择application/json
,Secret
中填入配置文件中webhook_secret
对应的值。使用码云参见官方文档。图文说明可参考简书上的文章中的步骤一。
使用docker(推荐)
项目还提供了使用docker的部署方法。具体步骤如下。
配置git-ssh
文件目录准备工作
需要将备份仓库本地目录、shmot本地目录、hexo blog目录(执行hexo inti的那个目录)放在同一个目录下,然后将这个目录挂载到容器的/home
目录下,例如本例中将三个目录均放到宿主机的/home
目录下。
- 备份仓库本地目录:
/home/blog_bak
- shmot本地目录:
/home/shomt
- hexo blog目录:
/home/blog
对应的命令如下:
1 | cd /home |
配置docker
这里给出的是基于ubuntu16.04的安装命令,其他操作系统可以参考:官方文档
1 | sudo apt-get update |
因为这里要使用到docker-compose
命令,因此还需要安装docker-compose
:官方文档
国内vps的下载的速度可能会有一些慢,可以本地下载文件之后上传到/usr/local/bin目录下
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
修改docker-compose配置文件
docker-compse的配置文件在shomt/docker
目录下,可以按照注释说明进行修改,其他保持默认即可。docker配置文件(docker-compose.yml)默认如下:
1 | version: "3" |
修改shomt配置文件
参考使用Simple-Hexo-Online-Manage-Tool
启动docker
1 | cd /home/shomt/docker |
如果是初始化一个空目录,这里需要等待一段时间对应的4000端口才能访问,等待时间视网络情况而定。
访问
至此,访问http(s)://{host}:5000可以看到管理页面,访问http(s)://{host}:4000可以看到博客页面,这里我建议使用Nginx作为网络服务器反向代理本地的4000和5000端口。
配置webhook
在网页上管理
管理页面链接:http(s)://{host}:5000/
,打开后显示如下。在token输入框中输入配置文件中设置的token
。如果token不正确,则无法在页面上进行任何操作。
查看文件列表
输入好token后,点击显示文件列表
,页面会动态加载出当前博客目录下的文件信息,效果如下。列表中包含文件名、title、发布时间、更新时间、以及提供了下载和删除的操作。
上传
输入token
->选择文件
->上传文件
,文件名可带空格,系统会自动处理这类文件名。上传成功后系统会自动刷新出文件列表。因为上传和删除时后台系统需要与远端git服务器进行沟通,如果使用github的话,需要等待的时间略久,并不是提交不成功。
下载
输入token
->点击对应的下载
按钮
删除
输入token
->点击对应的删除
按钮
强制生成静态文件
输入token
->生成静态文件
按钮,系统会强制重新生成静态文件
通过git管理
git clone
备份仓库到本地。直接在本地进行修改、提交、推送即可。使用github会有一定的延迟,需要耐心等待,一般3-5s后刷新页面即可。
新增
在根目录下创建新的markdown
文件,编辑
->commit
->push
即可。
更新
git pull
拉取最新的版本后,编辑
->commit
->push
即可。
更新
Front-matter
时,新增的Front-matter
仅需要直接添加即可,对于需要删除的项,在标签前面加上#
后上传即可
删除
git pull
拉取最新的版本后,删除文件
->commit
->push
即可。
备份
通过引入blog备份仓库,实现了版本管理与博客的备份。全部发布过的博客都可以通过git系统进行备份和版本管理。
扩展/自定义
不同主题的Front-matters
可能会略有不同。比如ButterFly
主题与Heox官方默认主题相比,Front-matters
中可选的多了top_img
和cover_img
等,在markdown.py
中的Markdown_File_ButterFly
类继承了Markdown_File
类,并通过配置文件中extends
来配置额外所需要的参数{"img_path": "/img/background_img", "imgs_path": "/home/blog/themes/Butterfly/source/img/background_img"}
,重写了_generate_front_matter
方法,该方法主要功能就是生成默认Front-matters
信息。通过这种形式,实现自定义,按照自己的需求来重新设计文件默认Front-matters
格式。
结束语
至此,文章完成了对shomt的使用方法介绍以及功能介绍,大家如果在使用过程中有任何问题,欢迎到项目页面提交issue或者在此博客进行评论,我会第一时间回复解答各位的问题。