本文分别从树莓派、Termux以及VPS CentOS介绍如何搭建Hexo博客系统
一、树莓派上搭建Hexo博客
问题:hexo是静态博客,支持markdown,wordpress需要数据库支持,两者可以共存于一张树莓派上吗?
1、我在树莓派上搭建本地博客的历程
在树莓派上搭建博客,我开始用apache+wordpress,后了改用ngix+wordpress,下一步打算换成git+hexo。先在github上体验,熟悉了之后在本地实现,当然为数据安全起见,旧的wordpress保留,换一块tf卡实现hexo。
Wordpress对Markdown支持太差了,计划新建Hexo博客,我的一块老树莓派支持两个博客系统同时运行吗?
需要安装git吗?需要ngix支持吗?Hexo和Wordpress比较,不需要数据库,是静态博客,使用Markdown格式,对写手非常友好,还支持流程图、目录等让我心动的扩展特性。
当然hexo也有其缺点,wordpress可以在线编辑博客内容,只要有浏览器就可以了,也就是说在手机上都可以发博客。hexo则需要一台电脑,在手机上无法发博客了,很大很大的缺点啊。只好登录github,在线编辑博客了。
我有一个大胆的想法:一直想买一块树莓派3,但是树莓派3与我的Pro5手机都是用的A57芯片,感觉有重复投资的尴尬。用手机做服务器功耗还是很小的,而且有触摸屏。想象到以后家里用手机做服务器的远景,还是很诱人哒!
树莓派快速搭建hexo博客系统
树莓派Hexo博客配置
在Android手机搭建Hexo博客环境
hexo+github pages博客建立以及同步到手机
2、为什么要学习Markdown与LaTex
1)、Markdown是什么?
如下是维基百科的介绍摘选:
Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber)。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档”。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。
Markdown可以用十个左右的关键字,实现文章格式化,而且被wordpress等兼容。
2)、相关的编辑器
很多,比较有名的:sublime、atom、haroopad。目前我使用typora与stackedit:
typora(Win+Mac):所见即所得,支持流程图,支持Latex公式。安利一下Typora:极致简洁的markdown编辑器
google chrome扩展:stackedit,支持离线编辑,支持流程图。
编辑器的兼容性:我用typora写日志,用了列表与check项(表达不规范啊,以后修改),复制到haroopad与stackedit,后两个都与typora显示不一致!
官方的编辑器是谁?如何判断三者的对与错?
练习mermaid扩展graph,在haroopad与stackedit中无效啊?咋回事?grahp与flowchart有啥区别?
3)、Markdown如何实现目录
TOC吗?
4)、Markdown extension之流程图flow、甘特图gantt、流程图graph
相比MS Office常用流程图符号,Markdown能实现哪些流程图样式,有哪些限制?
先学哪些基本的流程图(比较Word,常用的排版也就是设置行间距,字体样式,排序、表格等),进阶再学哪些(目录)?
1)flow
Markdown流程图(flow)测试代码:
``flow
st=>start: Start
op=>operation: Your Operation
cond=>condition: Yes or No?
e=>end
st->op->cond
cond(yes)->e
cond(no)->op
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
29
30
31
32
33
34
</pre>
##### 2)gantt
甘特图(mermaid gantt)测试代码(来自[Draw Diagrams With Markdown](http://support.typora.io/Draw-Diagrams-With-Markdown/)):
<pre>```mermaid
%% Example with slection of syntaxes
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram functionality to mermaid
section A section
Completed task :done, des1, 2014-01-06,2014-01-08
Active task :active, des2, 2014-01-09, 3d
Future task : des3, after des2, 5d
Future task2 : des4, after des3, 5d
section Critical tasks
Completed task in the critical line :crit, done, 2014-01-06,24h
Implement parser and jison :crit, done, after des1, 2d
Create tests for parser :crit, active, 3d
Future task in critical line :crit, 5d
Create tests for renderer :2d
Add to mermaid :1d
section Documentation
Describe gantt syntax :active, a1, after des1, 3d
Add gantt diagram to demo page :after a1 , 20h
Add another diagram to demo page :doc1, after a1 , 48h
section Last section
Describe gantt syntax :after doc1, 3d
Add gantt diagram to demo page : 20h
Add another diagram to demo page : 48h
</pre>
##### 3)graph
流程图graph(mermaid flowchart)测试代码:
<pre>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
29
30
31
32
33
34
graph TD
B["fa:fa-twitter for peace"]
B-->C[fa:fa-ban forbidden]
B-->D(fa:fa-spinner);
B-->E(A fa:fa-camera-retro perhaps?);
``
###### a、graph的节点(Node)形状
<pre>矩形(node default):例如 A
矩形带内容(node with text):例如 A[你好] 注意,字符串中带括号等特殊字符,需要用双引号将字符串包围起来。
圆角矩形:例如 A(你好)
圆形:例如 A((你好))
非对称形(a node in a asymetric shape ):例如 A>你好]
菱形(rhombus):例如 A{你好}
</pre>
###### b、graph连线形状
<pre>直线(缺省): A---B
带字符: A--text---B 或者 A---|text|B
带字符有箭头:A-->|text|B 或 A--text-->B
虚线箭头:A-.->B 问题:A-->B是啥?
虚线箭头带文字: A-.text.->B
粗线箭头:A==>B
粗线箭头带文字:A==text==>B
</pre>
为啥以下graph在typora中显示方向错误,而且会提示语法错误?
<pre>```mermaid
graph TD
A[产品规划]
B{会议纪要}
C(规格书)
A-->B-->C
一个新品开发流程实例(需要解决如何添加特殊字符,比如换行符、顿号等):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 graph TD
a1[样机需求单输入] --> b1[产品经理]
b1 --> c1(电路设计)
b1 --> c2(结构设计)
b1 --> c3(模组设计)
b1 --> c4(电源设计)
b1 --> c5(软件设计)
b1 --> c6(样机接口人)
c1 --> d1[1样机需求人安排提机黄岛或提供借机单据给样机接口人借机青岛2样机到位后样机接口人添加整改样机流程]
c2 --> d1
c3 --> d1
c4 --> d1
c5 --> d1
c6 --> d1
d1 -->|整改样机流程|e1(模组设计结构设计第一级)
e1 --> f1(电路设计工艺设计软件设计第二级)
f1 --> g1(请硬件测试工程师韩春海现场检验样机并在PLM中审批整改记录第三级)
g1 --> h1(国际营销提供提交发货申请单并安排快递提货通知样机接口人备货)
h1 --> i1(样机接口人发货)
4)单独使用mermaid
可以通过npm安装mermad(mermaid依赖于phantomjs):
npm install -g mermaid
npm install -g phantomjs
语法学习:
Markdown: 语法
Markdown基础教程 - 曾梦想仗剑走天涯
Markdown流程图语法
Markdown笔记:如何画流程图
进击的Markdown教程
markdown绘图插件—-mermaid简介
mermaid docs
问题:在本地wordpress服务上实现对Markdown的支持(失败,放弃吧)
Wordpress.com网站支持Markdown,可以在设置中打开。
但是我在树莓派上安装的本地Wordpress程序目前还不支持,需要通过安装插件实现,推荐使用两个插件:WP Editor.MD和Jetpack(wordpress.com官方实现Markdown的方式)。经过简单测试,这两个插件其实是把用户用Markdown格式书写的博客,转换成了wordpress的标记语言。比如我用两个井号写了一个二级标题,发布之后显示正常,再看源代码,编程了尖括号的h2了!原生支持该多好啊。估计因为这个原因,流程图和甘特图的支持就没有希望了?
参考的是文章:在Wordpress中如何使用MarkDown编辑博文
这篇博文讲述了wordpress部分支持markdown的格式化快捷键方式,比如用两个#号输入二级标题,换行后,wordpress会自动转换为<h2>语法:
Editor.MD插件:
问题1:编辑界面显示错误
启动插件后,编辑本文出现界面混乱,把源代码显示到预览区了。应该是目前wordpress的软件BUG,点击更新按钮就好了。新开一篇文章也没有问题。但左右窗口不能很好的对齐,是不是离线编辑器也是如此,无法避免?
问题2:查看文章错误
把标题改成Markdown格式,明明编辑器中预览很好的,查看文章时并不支持Markdown啊?后来才知道不支持一级标题。问题来了,本地Wordpress程序原生支持Markdown,不装插件其实也可以直接写,只是在写博客时不能及时预览,不方便罢了。
问题3:旧文章的转换
我目前的博客中,用到的特殊格式很少,主要有4种需要转换为Markdown格式:一级标题,pre代码,code代码,超链接。
一级标题:不支持吗,因为Wordpress开发团队认为文章题目是一级标题,所以文章内容最高二级标题。注意井号后加空格,Editor.MD插件处理的不严谨。
pre代码:
code代码:
超链接:
Jetpack 插件:
由于不能忍受编辑界面显示错误,关闭Editor.MD插件,开启Jetpack插件。本地Wordpress服务中的编辑界面又回到熟悉的原生界面了。而且我发觉手工将H1改为Markdown语法的两个井号的二级标题,也自动改回H2了,好奇怪!
问题4:流程图、序列图、甘特图等
目前我的博文都是纯文字的,希望早早转到采用Markdown编写上。尤其是要实现第一个流程图!
博客编辑神器:Markdown编辑器
LaTex能实现数学公式,暂时用不上。
二、Android之搭建Hexo博客
目的:基于hexo的github pages,实现markdown写作
遇到的难以解决的问题:
1、安装debian会走ss流量,如果 ss延迟较大,会提示失败,关闭ss直接连接 ftp.debian 没有网络问题,但比优质ss网速慢很多,说明防火墙的影响还是很明显的。
2、不小心退出xfce,再进入就没有桌面了,不知道如何恢复。还有xfce桌面分辨率为1920*1080,太高了,如何降低?
3、如何在xfce中安装firefox?
新手需要注意的问题:
1、开启ssh与vnc2、如何完全卸载linux实例
3、busybox用来扩充linux命令?
手机搭建服务器的优缺点
Pro:
1、功耗低,不需要另外购置硬件,减少开销
2、随着无限流量时代的到来,可以做到服务器在手
3、Android手机通过LTE上网,获得的是IP v6?是不是可以轻松看YouTube?
Linux Deploy:在Android上部署Linux
旧手机小用途:在Android手机上建网站,较完全指南
用Linux Deploy在Android上安装Linux
实践1:安装首个debian实例
路由器中给手机固定局域网IP地址,例如192.168.1.191
手机root
通过官网下载Linux Deploy并安装运行
右上角菜单“配置”中选中ssh与vnc
右上角菜单“安装”,直到提示“deploy”
左下角“启动”,直到提示“start”
右下角图标查看账号密码信息,通过putty ssh连接ok
通过vnc viewer连接ok,但是图形界面分辨率过高,改LXDE为xfce可以吗?
实践2:测试性能(连接debian服务器需要翻墙?反正自己的ss开启有问题时无法更新,换购买的ss就好了)
sudo apt-get update #问题:su的密码是啥?我是通过“sudo passwd root”修改了root密码来解决的。sudo apt-get install sysbench
sysbench –test=cpu –cpu-max-prime=20000 run
魅蓝一代note成绩是344秒,比我的树莓派一代1460秒快很多,也比树莓派3代快一些。相信魅族Pro5的性能会更好。详细内容如下:
Doing CPU performance benchmarkThreads started!
Done.
Maximum prime number checked in CPU test: 20000
Test execution summary:
total time: 344.6957s
total number of events: 10000
total time taken by event execution: 344.6883
per-request statistics:
min: 34.20ms
avg: 34.47ms
max: 51.72ms
approx. 95 percentile: 34.66ms
Threads fairness:
events (avg/stddev): 10000.0000/0.00
execution time (avg/stddev): 344.6883/0.00
问题:我想在魅族Pro5上测试sysbench,但是手机没有安装linux deploy,只有termux,无法安装sysbench。如何解决?
实践3:搭建hexo环境
参考
Hexo博客搭建全攻略(一):基于Hexo+Github环境搭建
sudo apt-get install git-corewget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
实践4:安装codeblock开发环境
sudo apt-get install build-essential #安装编译器sudo apt-get install gdb #安装debug工具
g++ -c hello.cpp #编译一个简单的c++程序
g++ -o hello hello.o #链接,如果不用 -o,g++ hello.cpp会不生成 hello.o 文件,直接输出可执行文件 a.out
./hello #执行
三、在VPS上搭建Hexo博客
服务器平台:vultr(VPS提供商),而不是github
软件平台:CentOS,Nginx
1、配置服务器端环境:
1)、VPS新建CentOS Server上搭建Nginx
passwd # Windows 10环境下,通过putty登录(复制初始密码,通过鼠标右键粘贴),修改root密码
rpm -q centos-release # centos-release-7-3.1611.el7.centos.x86_64
yum install epel-release # 安装 CentOS 7 EPEL 源,似乎没有必要,所以没有执行
yum install nginx # 安装 Nginx
systemctl start nginx #启动Nginx
firewall-cmd –permanent –zone=public –add-service=http #添加 HTTP 和 HTTPS 端口到防火墙允许列表
sudo firewall-cmd –permanent –zone=public –add-service=https
sudo firewall-cmd –reload
sudo systemctl restart firewalld.service
打开浏览器,复制Server的ip地址,回车,就会看到欢迎页面:“Welcome to nginx on Fedora!”。注意提示:index.html在“/usr/share/nginx/html”目录中,nginx配置文件在“/etc/nginx/nginx.conf”
curl 127.0.0.1 # 会显示Nginx主页的html代码
yum install net-tools #安装网络工具
netstat -ntpl #确认Nginx打开了80端口,但是没有443端口,为啥?
netstat测试内容如下:
Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2493/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 429/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 606/master
tcp6 0 0 :::80 :::* LISTEN 2493/nginx: master
tcp6 0 0 :::22 :::* LISTEN 429/sshd
tcp6 0 0 ::1:25 :::* LISTEN 606/master
2)、配置Nginx虚拟主机mkdir -p /usr/share/nginx/blog/html #新建blog目录用于放置Hexo,新建一个测试用index.html主页文件
vi /etc/nginx/conf.d/blog.conf #新建虚拟主机配置文件,因为nginx配置文件(/etc/nginx/nginx.conf)内包含一行内容”include /etc/nginx/conf.d/*.conf;“,所以是可行的。
systemctl restart nginx #重启 Nginx 服务器,使nginx服务器虚拟主机设定生效
新配置文件”blog.conf”内容如下:
server {listen 80;
listen [::]:80;
root /usr/share/nginx/blog/html;
index index.html index.htm index.nginx-debian.html;
server_name zhangqihui.mobi www.zhangqihui.mobi;
location / {
try_files $uri $uri/ =404;
}
}
本地Windows 10电脑,编辑“C:\Windows\System32\drivers\etc/hosts” #增加一行“xx.xx.xx.xx zhangqihui.tk“ 将服务器ip地址指向自己的域名,打开浏览器,通过域名就可以看到虚拟机测试主页了。(我先设置了DNS CNAME,没有测试)
3)、到DNS将域名解析到服务器地址
到godaddy,配置zhangqihui.mobi DNS指向VPS ip地址
到tk网站,通过我的Facebook账户登录,将zhangqihui.tk指向服务器ip地址 #因tk网站不稳定,改用godaddy
4)、部署Hexoyum install git #在 VPS 上安装 git
cd ~
mkdir blog.git && cd blog.git #创建空白 git 仓库,并且设置 git hook
git init –bare #返回提示“Initialized empty Git repository in /root/blog.git/”
cd hooks
vi post-receive #创建脚本,并写入内容
chmod +x post-receive #赋予脚本的执行权限
在 /root/blog.git/hooks/post-receive 脚本内容如下:
#!/bin/bashGIT_REPO=/root/blog.git #git仓库TMP_GIT_CLONE=/tmp/blogPUBLIC_WWW=/usr/share/nginx/blog/html #网站目录rm -rf ${TMP_GIT_CLONE}git clone $GIT_REPO $TMP_GIT_CLONErm -rf ${PUBLIC_WWW}/*cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
2、配置本机环境
1)、Windows 10 安装Hexo环境
缺省设置安装git; # (2.15.1) 64-bit version of Git for Windows ,需要FQ,TNND!
缺省设置安装Node.js; # node-v9.2.0-x64.msi
在D盘新建hexo目录,通过鼠标右键命令“Git Bash Here”
$ npm install hexo-cli -g
提示如下:
C:\Users\qdmca\AppData\Roaming\npm\hexo -> C:\Users\qdmca\AppData\Roaming\npm\node_modules\hexo-cli\bin\hexonpm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules\hexo-cli\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”win32”,”arch”:”x64”})
added 217 packages in 68.345s
$ hexo init blog #在 blog 目录下初始化 hexo 博客
提示如下:
INFO Cloning hexo-starter to D:\hexo\blogCloning into ‘D:\hexo\blog’…
remote: Counting objects: 62, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 62 (delta 0), reused 2 (delta 0), pack-reused 59
Unpacking objects: 100% (62/62), done.
Submodule ‘themes/landscape’ (https://github.com/hexojs/hexo-theme-landscape.git) registered for path ‘themes/landscape’
Cloning into ‘D:/hexo/blog/themes/landscape’…
remote: Counting objects: 785, done.
remote: Total 785 (delta 0), reused 0 (delta 0), pack-reused 785
Receiving objects: 100% (785/785), 2.53 MiB | 1.08 MiB/s, done.
Resolving deltas: 100% (410/410), done.
Submodule path ‘themes/landscape’: checked out ‘73a23c51f8487cfcd7c6deec96ccc7543960d350’
INFO Install dependencies
▒▒Ϣ: ▒▒▒ṩ▒▒ģʽ▒▒▒ҵ▒▒ļ▒▒▒
npm WARN deprecated swig@1.4.2: This package is no longer maintained
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”win32”,”arch”:”x64”})
added 429 packages in 22.993s
INFO Start blogging with Hexo!
$ cd blog #进入博客根目录,并且安装相关插件依赖等$ npm install
提示如下:
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules\fsevents):npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”win32”,”arch”:”x64”})
added 116 packages in 10.783s
$ hexo g # 渲染 Source 目录下文件问静态页面
提示如下:
INFO Start processingINFO Files loaded in 314 ms
INFO Generated: index.html
INFO Generated: archives/index.html
INFO Generated: fancybox/jquery.fancybox.js
INFO Generated: fancybox/fancybox_loading.gif
INFO Generated: fancybox/blank.gif
INFO Generated: fancybox/jquery.fancybox.css
INFO Generated: fancybox/fancybox_loading@2x.gif
INFO Generated: archives/2017/index.html
INFO Generated: fancybox/jquery.fancybox.pack.js
INFO Generated: fancybox/fancybox_overlay.png
INFO Generated: fancybox/fancybox_sprite@2x.png
INFO Generated: css/fonts/FontAwesome.otf
INFO Generated: fancybox/fancybox_sprite.png
INFO Generated: fancybox/helpers/jquery.fancybox-buttons.css
INFO Generated: fancybox/helpers/jquery.fancybox-thumbs.css
INFO Generated: fancybox/helpers/jquery.fancybox-buttons.js
INFO Generated: archives/2017/12/index.html
INFO Generated: fancybox/helpers/jquery.fancybox-thumbs.js
INFO Generated: css/style.css
INFO Generated: css/fonts/fontawesome-webfont.eot
INFO Generated: css/fonts/fontawesome-webfont.woff
INFO Generated: js/script.js
INFO Generated: css/images/banner.jpg
INFO Generated: fancybox/helpers/jquery.fancybox-media.js
INFO Generated: css/fonts/fontawesome-webfont.ttf
INFO Generated: 2017/12/03/hello-world/index.html
INFO Generated: fancybox/helpers/fancybox_buttons.png
INFO Generated: css/fonts/fontawesome-webfont.svg
INFO 28 files generated in 844 ms
$ hexo s # 本地跑一个 server 来看博客效果
提示如下:
INFO Start processingINFO Hexo is running at http://localhost:4000/. Press Ctrl+C to stop.
本地浏览器打开网址“http://localhost:4000/”,测试hexo安装成功 #如果通过路由器端口映射,应该在外网也能看到
2)、配置本机环境
$ npm install hexo-deployer-git –save #在博客目录下运行下面命令,安装 git 部署工具
提示如下:
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules\fsevents):npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.3: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”win32”,”arch”:”x64”})
added 132 packages in 18.447s
qdmca@ASUS13 MINGW64 /d/hexo/blog
编辑博客配置文件“_config.yml”为如下内容(修改deploy选项,注意,冒号后面有空格,否则会出错!):
deploy:type: git
message: update
repo:
s1: root@45.32.227.150:/root/blog.git/,master
$ git config –global user.email “3dlinux@gmail.com“ #配置本地git用户信息$ git config –global user.name “root”
$hexo d #部署本地渲染网页到服务器上
本文参考:从 0 开始搭建 hexo 博客
在VPS上搭建hexo博客,利用git更新