Hexo博客那点事,一些技术上的延伸

前言

2018年年初的时候我弄得hexo博客,到现在满打满算1年多,在上半年用的比较多,下半年我就销声匿迹了,很少写,这与懒不懒惰无关,是因为我自己的服务器遭受到了重创,数据全部被清空了,也就是说,我个人的服务全都挂了。

大概就是自己弄得文件系统、博客系统、游戏服务、还有一大堆费心写的费心编译的项目,全GG,至于为什么没有备份,因为那是我自己用旧电脑改装的服务器啊喂!!!
我眼前还浮现着之前美滋滋弄得漂亮的博客的样子,就是下面这个样子,我还完善了很多漂亮的主题。

mark
后来因为之前把博客部署到github.io了,所以文字性的东西勉强还算能够找到,图片是废了,更别说我的tomcat服务了。
最后总结出来一个,ubuntu经不起突然断电的折腾,因为有一天突然停电了,我的服务器就挂了,痛定思痛,我今年决定把博客再给前捡起来,然后在做一系列的风控措施吧,虽然我也不是运维,hahahaha。


框架

首先说一下,这篇博文主要是说一下hexo博客的延伸,需要有一定的linux基础以及会部署hexo项目的经验,最好有一些网络经验
我研究了一下我要做到什么样子,才算是能让我觉得满意的博客。

  • 服务器:首先是在自己的服务器上面进行操作。
  • Hexo主体:这块就介绍一下要安的包。
  • 主题:这块就比较鸡肋了,一般会部署的都会切换主题。
  • 资源:博客的资源操作,要怎么用。
  • 自动化:必须能够做到能够自动generate,自动deploy,以及backup,否则一切免谈。
  • 网络:项目部署后,要有自己的域名,而且要ssl证书的那种。(要求太过分了,hahahaha)

上面这些是我能想到的,还有些可能没有理清的,后续再说吧。


服务器

如果你只是想部署一个hexo项目,并且只会选择github.io作为主站点,那你可以点击右上角,然后去找一找比别的教程了。
服务器是整个项目必备的,而且一般都是linux,可以有以下几种选择。

  • 云服务器:优点是可以icp,固定ip(这就很舒服了),缺点也很明显,贵啊。
  • 自己搭建服务器:优点,自己可控,随意造,最重要的是,随随便便的i7+16G内存,无论做什么,编译速度不是完爆1核1G1Mb了,缺点就是,这个对你网络的运营商要求比较高。还有一点是,如果你家里网可以翻墙,自己的服务器还是有些优势的。

很明显我选择的第二种,因为考虑到性能问题(qiong),我当初做的服务器就是用旧电脑搭建的,就是下面这个。

还有我的运维环境,毕竟是在家里,不要在意那么多。

服务器系统是ubuntu server,经历过断电后,我就选择了server系统,而不用普通的ubuntu了,没有用centOS,因为对Debian这系列有好感,小版本是18.0.4。
安装教程可以自行百度,可以参照这个


Hexo主体

考虑到网络上太多的Hexo教程,以及能研究到延伸这里的,基本都是会的,不过我还是贴心的给挂上几个连接,以及一定要安装的一些包。

其实安装的话,看官网教程就可以了,如果你会一些linux知识,当然你要会前端那就更NB了。
先安装npm、nodeJs、以及hexo。

1
2
$ sudo apt-get install nodejs  
$ npm install -g hexo-cli

好像是上面这样,网上教程很多的,因为太久远了,有些忘了,不过这些也不是重点。
插件大概有一些。
hexo-admin,必装,因为这个编辑真的很舒服,教程点这里

1
$ npm install --save hexo-admin

效果如下:


hexo-deployer-git,必装,hexo部署到github.io的插件,教程点这里

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

暂时想这么多,后续再补吧。


主题

我感觉这块大家都明白,如果你懂一些前端知识,还是可以在人家已有的主体上面给修改一些东西的。
例如之前这个主题的代码字体不好看,可以去对应的主题下面,找到css文件,修改一下颜色,网页中按f12,查看具体的位置,其实我是真不太懂这块的,连蒙带侃的找到了对应的位置,修改了颜色。
我这个主题是Diaspora,我还是觉得挺好看的。


资源

这个资源怎么说呢,主要就是图片,音频,因为曾经博客丢失过,所以我就决定,弃用hexo自带的assert资源文件夹了,这个文件夹是文章对应的图片文件夹。
这个主要是要是整个项目丢了,那简直是灾难,所以我决定图片内文章全用图床形式,网络图片。
图床有几种选择:

  • 七牛
  • 存储桶
  • github
  • 自建http服务器。

很明显,我也选择的最后一种,大概是程序员的执拗,我一向喜欢用自己的服务器。
其实我也纠结了很久哪个更好点,毕竟除了自建服务器,其余的都是https协议(后面解释原因),也不花钱,但是我还是太懒了,hahahaha。
最后我选择了自己搭建nginx服务器,因为以前做ffmpge用到过,比tomcat更符合我的风格。
话不多说,先安装:

1
$ sudo apt-get install nginx

然后配置,此处需要权限:

1
$ sudo vi /etc/nginx/sites-available/default

然后配置静态路径,具体内容需要修改为自己想开方的路径以及端口号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80 default_server;
listen [::]:80 ipv6only=on default_server;

root /var/www/html;
index index.html index.htm index.nginx-debian.html;
charset utf-8;
server_name _;

location / {
root /home/qingheyang/share/;
autoindex on;
}

}

然后开启 or 重启:

1
$ sudo nginx -S reload

如果你最后在浏览器输入你自己的ip或者域名,加nginx监听的端口号,能看到下面结果,说明成功了。

然后就可以在文章中引用了,需要注意的是,这些图片不能丢失,否则文章中图就挂了。
当然,这仅仅是我的选择,其实github,或者七牛都是不错的选择。毕竟稳定,不收费。
(2019-04-18补充)
其实markdown也可以上传视频的,通过下列代码插入到.md文档中就可以了:

1
2
<video src=' ' type='video/mp4' controls='controls'  width='100%' height='100%'>
</video>


自动化

无论何时,其实都可以考虑自动化,除去不长期开着项目的,只往github上更新的童鞋。

一键上传博客

我在去年的一篇文章里写了怎么用expect做到一键更新项目到github.io上去,再贴一下脚本吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#脚本里的用户名密码都需要修改
#!/usr/bin/expect -f
set gitUser QingHeYang
set gitPsw *******
set userPsw *******

spawn ssh qingheyang@localhost
expect "password:" {send "$userPsw\r"}
expect "qingheyang@*" {send "cd /home/qingheyang/Hexo/QHY_Blog2\r"}
expect "qingheyang@*" {send "hexo g\r"}
expect "qingheyang@*" {send "hexo d\r"}
expect "*Username*" {send "$gitUser\r"}
expect "*Password*" {send "$gitPsw\r"}

expect eof

exit 0

编辑完后,记得:

1
$ chmod 脚本.sh u+x

然后执行一下,你会发现,系统自动登陆,然后给你自动输入密码然后把项目deploy到github.io上去了。
这个有前提的,一定要配置hexo-deployer-git。

计划任务

计划任务主要是要做备份用,将整个项目以及网络资源还有服务器的部分内容,按时给备份到某一个地方去。
这回我给我的博客加上了备份功能, 因为静态页可以随时随地查看,但是静态页是没法反向转成项目工程的,一但项目工程丢失了,你的博客也就止步于此了。
所以备份必不可少,怎么备份呢,我的思路大概是:

1 .将自己的Hexo博客源文件夹以及图床文件夹,拷贝到一个目录中(也可以带入服务器比较关键的文件)。
2 .将这些文件压缩。
3 .将压缩文件上传。

技术点是:

1 .用ubuntu自带的计划任务,每周一、周四执行备份命令与脚本。
2 .用阿里云sdk上传至阿里云OSS中。

计划任务

什么是计划任务,计划任务是ubuntu定时执行的命令,具体教程可以参照这个,我定的是每周一周四,18:20开始备份,18:40截止备份。
计划任务具体操作如下:

1
& crontab -e

然后让你选择用哪个编辑器,有nano,有vi,我手滑了,选的nano,界面如下:

里面的白字是我手动输入的,注意,计划任务的命令最好用绝对路径

1
2
3
4
5
6
7
8
9
10
# 第5步,18:40执行上传文件到OSS的jar包
40 18 * * 1,4 /home/qingheyang/Java/jdk1.8.0_181/bin/java -jar /home/qingheyang/server_back_up/utils/utils.jar
# 第4步,18点30压缩备份文件夹
30 18 * * 1,4 zip -r /home/qingheyang/server_back_up/zipfile/backup.zip /home/qingheyang/server_back_up/sourcefile
# 第3步,18:27 复制我的世界文件夹进入备份文件夹
27 18 * * 1,4 /bin/cp -r /home/qingheyang/minecraft/newworld /home/qingheyang/server_back_up/sourcefile/minecraft
# 第2步,18:25 复制图床文件进入备份文件夹
25 18 * * 1,4 /bin/cp -r /home/qingheyang/share/blog_image /home/qingheyang/server_back_up/sourcefile/blog
# 第1步,18:20 复制博客工程进入备份文件夹
20 18 * * 1,4 /bin/cp -r /home/qingheyang/Hexo/QHY_Blog2 /home/qingheyang/server_back_up/sourcefile/blog

然后输入 Ctrl+o ,写入文件即可,按Ctrl + x,退出nano编辑器,然后重启计划任务:

1
$ service cron restart

可以输入命令查看当前用户的计划任务:

1
$ crontab -l

云备份

(2019/04/16补)
定期打出来的压缩包是可以上传到某一个地方去的,有很多种选择,因为我域名是在阿里云买的,所以我就选择了阿里云的OSS存储器,价格低,很低很低,也方便管理,他有sdk给提供。
我做了个Java工程,打了个jar包,就当做是脚本来运行了。

阿里云OSS地址:https://www.aliyun.com/product/oss?spm=5176.8142029.selected.3.fbcf6d3eyuSIHf

贴一下java代码,最简单的文件上传:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.qhy.backup;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.aliyun.oss.OSSClient;

public class UploadBackupFile {

public static void main(String[] args) {
String endpoint = "http://oss-cn-beijing.aliyuncs.com";
String accessKeyId = "<你的accessKey>";
String accessKeySecret = "<你的accessKeySecret>";
OSSClient ossClient = new OSSClient(endpoint, accessKeyId,
accessKeySecret);
//地址一定要选绝对路径地址,不然会出错误
String backupPath = "/home/qingheyang/server_back_up/zipfile/backup.zip";
Calendar c = Calendar.getInstance();
c.setTime(new Date());
//以时间命名的备份文件
String fileName = (new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"))
.format(c.getTime()) + "_backupfile.zip";
ossClient.putObject("<你新建的bucket名称>", fileName, new File(backupPath));
ossClient.shutdown();
}
}

通过引入阿里云的sdk,然后打成jar包,扔进服务器,最后通过计划任务java -jar定时运行就可以了。
效果如下:

这是已经上传好的备份文件,阿里云也提供下载功能,具体代码编写就不贴了,有教程的,而且,服务器如果不崩溃的话,是用不到的。

这样通过上述两步,定时将博客重要的文件备份上传就完成了,总结一下问题:

  • 还不完备,其实可以都写到java里面,然后一步执行即可,现在这样写存在异步的问题,有可能这边没压缩完,下一个计划任务就已经开始上传了,只不过我懒得写代码了,给预留的时间也足够,hahaha.
  • OSS既然应用了,其实这个博客可以实现的很简单,我也没必要将他上传到github.io中去了,当一个静态存储桶也是够的。
  • 最大的问题就是,写的不够清晰明了,我省略了很多步骤,其实这篇文章可以细分很多很多方向,但我给集合到一起了,效果不是很好。

网络

这个可以重点说一下,因为这块涉及到域名、端口号、ssl证书等一系列的问题。

服务器网络

先说一下前提:你没有自己的云服务器,可能因为qiong,也可能因为你跟我有一样,有废弃的性能比较好的电脑,这是大前提,如果你有云服务器,不管是阿里云ECS,还是亚马逊AWS,你可以省略这块了,整篇文章对你来说都没有意义

自建服务器有个很大的缺点,就是非固定ip,甚至有可能是非公网ip。
这就涉及到很严重的问题,如果非公网ip,就意味着你的博客外网访问不到,因为网络是一层套一层的,你的服务器链接你的路由器,你的路由器连接着外网,这是必备条件。
如果你的运营商可以提供公网ip,但是你查询到的ip不是公网ip,那就需要你做一些措施了。
具体怎么查询呢,首先你需要连接上自己的wifi,然后百度一下,ip,然后看一下结果,然后登录自己的路由器,看一下ip,如果一致,恭喜你,运营商还算良心,如果不一致,可以致电运营商,讨要公网ip,没错,你有这个权利的。
有公网ip后,你需要在路由器进行端口映射,具体的方法,要看什么路由器了,需要映射的端口号有这些:

  1. 22端口:远程ssh以及ftp必备。
  2. 80端口:nginx监听的默认是80.其实可以修改的,对外接口一定不能是80,政策不给你开80端口的。
  3. 4000端口:hexo服务器默认端口,作用是你想随时随地编写博客,就得一直开着。

映射出去后,就可以远程对这些进行操作了。
最后的效果是,将自己的域名绑定ip,然后编写完博客后deploy到github.io上去,然后阿里云域名直接指向githu.io,做到个人域名访问发布的博客,最后一部是添加ssl证书。
达到现在这个博客的样子。
因为涉及到太多东西了,所以我有点不知道怎么写了,以后慢慢补吧,先告一段落。


写在最后

其实还有很多要写,seo站点优化,提交给百度及谷歌,添加访问量等等等等,但是有点写不下去了,先写写别的,如果我的这篇文章有幸被你看到了,有什么不明白的地方,可以通过留言告诉我,尽我所能去帮你。
啊对了,说一下我现在的这个效果吧:

  1. 我可以在任何一个地方编写我的博客,地址是http://www.deep-blue.cloud:9001
  2. 每周自动准时备份,备份完成后会给我发送短信。

就这样,以上

请我喝杯咖啡吧~

支付宝
微信