利用winwin hexo editor、inotifywait和rsync在宝塔上搭建后台在线编辑hexo文章

前言

不得不说Hexo的有点很多,但后台的缺失既是优点也是缺点。以前也不是很在意这个,但近段时间较忙,比较少机会在家用电脑,突然想到能不能帮hexo弄一个后台来编写文章呢? 这样的话就能随时随地像typecho、wordpress那样编写文章但又能享受hexo的有点。 搜了大半天,结果在V2ex发现了有大佬居然真的写了这么一个hexo后台:

地址: https://yujianghao.github.io/winwin-hexo-editor/
github: https://github.com/YuJianghao/winwin-hexo-editor

功能

  • 文章增删改和预览 | Post add/delete/update and preview
  • 发布和草稿 | Post puiblish/unpublish/drafts
  • Markdown编辑 | Markdown editor
  • 分类 | categories
  • 标签 | tags
  • git同步 | git push/reset/pull
  • hexo命令 | hexo generate/deploy/clean
  • 登录 | Basic authentication
  • 文章排序 | Post sort
  • front-matters
  • 文章搜索 | Search

安装

安装Hexo和Node.js

首先需要在VPS上安装Hexo和Node.js, 这位大佬怕小白不懂,自己手把手教学:从头教你搭建Hexo博客

安装单个winwin hexo editor

  1. 下载源码 | Download source

    git clone https://github.com/YuJianghao/winwin-hexo-editor
  2. 文件夹改名并运行安装命令

    cp -r winwin-hexo-editor bingwong-editor
    cd bingwong-editor
    bash install.sh

    安装过程中要求填写hexo blog的路径、token、用户名、密码等

    What’s your hexo blog path? The same path as your hexo _config.yml file

因为我的hexo blog的路径为/root/bingwong/那么这里填写/root/bingwong/就可以了,剩余的就是设置token、用户名、密码。

  1. 利用pm2 后台运行
    # 使用pm2 | with pm2
    # 开启 | start
    npm run prd

这里是其他pm命令:

pm2 list
pm2 stop    
pm2 restart 
pm2 delete  

然后用浏览器打开http://localhost:5777 就可以了。当然,你可以配置nginx指定一个网址进行http服务器反向代理。

不说了,直接上才艺

安装多个winwin hexo editor

假设你的VPS部署了多个hexo,那么我们只需要相应地安装多个winwin hexo editor就可以了。
同样地,先下载源码,然后将文件夹命名为不同的名字,如:

bingwong-editor
thepapers-editor

然后各个editor都需要按照上面第二步根据提示安装就可以了。

但我们先不要急着利用pm2 后台运行,因为我们需要改一改每个editor的运行名称。

我们先打开bingwong-editor文件夹里面的package.json,你就会发现:

"prd": "export NODE_ENV=production && pm2 start bin/www --name hexoeditor"

这里要改为

"prd": "export NODE_ENV=production && pm2 start bin/www --name hexoeditor-bingwong"

我们用同样的方法将thepapers-editor文件夹里面的package.json改名。

为什么要这样做呢,就是为了运行pm2之后用于区分不同的editor:

如果hexo是通过正常的git或者是rsync来deploy的话,下面这个笨方法就不用试了。 下面的这个方法是直接同步hexo 生成的public文件夹到宝塔网站上


使用inotifywait和rsync进行实时同步文章到宝塔的“网站”

上面的winwin hexo editor只是让hexo多了个后台,但hexo生成网站到public文件夹后并不会自动实时同步到宝塔的”网站”中,这里有一个笨方法就是利用inotifywait监控public文件夹的变动情况,然后利用rsync实时同步到宝塔的”网站”中。

安装inotifywait和rsync

鉴于安装教程比较简单,大家百度自行补脑。

inotifywait是 inotify-tools 包中提供的一个工具,它使用 inotify API 来监控文件/目录中的变动情况。
rsync是一个快速、功能丰富的copy工具。它可以进行本地拷贝、从远端主机拷贝、拷贝到远端主机。

编写inotifywait运行脚本

我创建新文件夹hexo-sync-script,然后在文件夹下新建了文件bingwong.sh并写入以下代码:

#!/bin/bash

source_dir=/home/yourself/bingwong/public/
dest_dir=/home/yourself/bingwong.org/
while :
do
    inotifywait -r -e modify,create,delete ${source_dir}
    sleep 10
    rsync -avz ${source_dir}/ ${dest_dir} --delete
done

rsync说明

  • a:表示archive mode,即备份目录下的所有内容(包括子目录中的内容),并且保持软链接、文件属性、文件修改事件、文件的所有者和宿主信息不变,并且同步字符/块设备以及命名socket和fifo等特殊文件。
  • v:表示输出备份的详细信息
  • z:表示传输时进行压缩
  • –delete: 删除备份目的地里src中没有的文件
  • ${source_dir}/ : 表示要备份的是${source_dir}目录下的所有内容,注意这里最后的 / 不能去掉,否则会把${source_dir}目录本身备份过去
  • ${dest_dir}: 表示备份的目的地是 /data/ 目录

inotifywait说明:

  • r: 表示递归监控子目录中文件发生的事件
  • e: 指定要监控的事件列表。对于备份系统来说,只需要监控 modify、create和delete三种事件就行了。

使用systemctl让脚本开机启动

可以使用systemctl将备份服务做成开机启动。

首先创建/etc/systemd/system/bingwong.service, 或者利用宝塔直接新建文件 bingwong.service

sudo vim /etc/systemd/system/bingwong.service 

内容如下:

[Unit]
Description=BingWongSyncService

[Service]
ExecStart=/home/hexo-sync-script/bingwong.sh start
ExecStop=/home/hexo-sync-script/bingwong.sh stop

[Install]
WantedBy=multi-user.target

使用systemctl让bingwong.service开机启动:

sudo systemctl enable bingwong.service

最后启动服务:

sudo systemctl start bingwong.service

参考:

  1. 使用inotifywait和rsync进行实时备份
  2. 使用inotify-tools与rsync构建实时备份系统

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 [email protected]