想做一个自己的博客,而网上的像CSDN之类广告太多,而且没法个性化设置,于是有了搭建自己博客的想法,恰巧在知乎上看到一个教程,免费,重点是能免费搞,于是乎……走上了一条不归路……


声明

本篇只是大致记录了一些我搭站过程中遇到的坑

至于博客搭建主体路线在别人的教程

也就是说没什么事情看那些超链接就好…


起源

就是这个 超详细Hexo+Github博客搭建小白教程 我看的第一篇教程,还是相当详细了,于是就按部就班开始了。

这里用的是 githubhexo

其中github可以用coding等代替,hexo可以用Jekyll代替

这里在给一篇用coding的文章

总之我是用github+hexo的,这套应该算是主流配置哈

之后就是一系列的坑了


建站

安装hexo是用命令行装的,而用的指令是node.js的,所以要先装node.js这个问题不大

进入一个文件夹,要在里面

用下面的指令安装hexo

npm install hexo-cli -g
npm install hexo --save

然后我的那个文件夹里就有了一些不知什么东西

之后我就往下做

hexo init
npm install

报错了,我以为正常的,其实错误的原因是文件夹不为空

解决方法:清空这个文件夹或新建一个文件夹

至于原本里面的东西,其实我也不知道什么用

这样之后就可以了

hexo g
hexo s

就可以访问了,一切正常

再来是github与本地连接,因为我本来就是github用户,这个没什么问题,教程也有很详细的

我们在hexo init的文件夹第可以找到这样一个文件_config.yml这就是相当重要的配置文件了,文件末尾有这样的

deploy:
    type:

按照教程指示,改为

deploy:
    type: git
    repository: https://github.com/[你名字]/[你名字].github.io
    branch: master

[你名字]就是你之前在github上建立的repository的名字

type: gittype:git之间一定要有空格

另外,repository:可以缩写为repo一些教程里用的是缩写,我差点没看懂

网址不要写错,我之前复制来的ssh是`git@github.com:KaizynX/KaizynX.github.io.git`

然后就报错了,中间的:应该改为/,不如自己敲吧

还有很重要的一点是之前建立github的respository的名字一定要和你gihub的用户名一样

比如我的github的用户名是KaizynX,respository的名字就是kaizynx.github.io,小写,我就是因为这个错误调了好久

在你gethub的respository的settings上会显示Your site is published at https://kaizynx.github.io/

因为之前没有完全一致,会导致显示Your site is published at https://kaizynx.github.io/kaizyn.github.io

由此引发一些列不可估量的错误,虽然能访问,但是没法正常显示,如这位兄弟的情况

再者这篇教程中对于_config.yml的配置其实没讲清楚

这里大概讲清楚了

url: http://[你名字].github.io
root: /
permalink: :year/:month/:day/:title/
permalink_defaults:

其中有几行是这样的东西

你需要把第一行改一下

至此网站总算是可以用了
hexo三部曲

hexo clean    #清除缓存
hexo generate #生成
hexo deploy   #部署

具体什么意思可以看百度之类,简写就是

hexo cl
hexo g -d

部署之前应该要安装个git插件

npm install hexo-deployer-git --save

部署之后可能会跳出一个github的登陆窗口,也可能不会,没什么关系,然后你就可以访问你的网站了,如https://kaizynx.github.io
注意是https


发布文章

站是总算建好了,想起了我最初的目的——写博客

hexo new 名字

此时博客的目录结构大致如下

- node_modules
- public
- scaffolds
- source
    - _posts
- themes

都有什么用可以百度一下

_posts中你就可以看到多了一个.md文件

这个就是你新建的博客,.md是markdown的格式

竟然是markdown格式,那总该有个IDE吧

推荐 当然得选一个可以本地编辑有客户端的

编辑完保存,再执行hexo三部曲,过一会你就可以看到你的博客更新了,至此似乎已经实现温饱了!

20181029

还是vscode好,记一下语法就行了,没那么麻烦


但是

怎么和我想的不太一样啊。

这套hexo+github的实质大概是你用markdown写一篇文章,hexo帮你生成html,部署到github上,是个静态的网页,你只能本地修改,本地上传

可我希望像CSDN那样在线发布的呀

革命尚未成功,同志仍需努力


更换主题

其实我主题是很早就换了,默认的真是太丑了,换的早,坑也出现得早

因为换主题是步入小康社会,温饱还没解决的话就算了

至于教程,原来的那些教程就有,我觉得这篇比较好的

可以去官网找找,这篇推荐的也不错

推荐使用next主题,据说是人气最高的

为什么呢?我看上的是Tranquilpeak主题,结果踩了好多坑

一开始我用next,后来换那个,用next倒是啥事也没有,换了之后……唉

毕竟用的人多,bug改的快吧,而且出错了网上容易找参考文献

而我用的这个,几乎没有。好吧,就是没有一个直接的解决方案,有的都是擦边球

说说正文,安装方法,直接git clonethemes文件夹下就好,详情见教程

然后我们就可以在克隆来的主题文件夹中看到,里面的结构类似我们整个博客文件夹的结构

最重要的也是配置文件了_config.yml对,主题有属于它自己的配置

你可以在里面改一些,具体看对应文档吧

通过配置文件你可以改网页图标,背景图片等等之类的

这个就是深入改造了,现在还玩不起,总之不用改也能用

然后就来说说我选的这个主题的坑吧

会报错

ERROR Script load failed: themes/tranquilpeak/scripts/tags/tabbed_codeblock.js

Error: Cannot find module 'jsdom'

第一句不重要,第二句是关键,先不说怎么解决吧

当时第一次用这个主题,发现不能用,我多绝望了

看来看去就这个看的上眼呐

于是我回到它github的官网上寻求帮助,看看文档之类的

于是我换了一个安装方式(撤回我之前说的话)

这次我从releases下载了一个稳定版本,解压到themes文件夹

其实两个方法都可以

区别是我选了不同的版本,所以这次没问题了


插件安装


官网

其实我觉得并不需要什么额外插件就已经够用了

关于插件,其实我们之前做的

npm install hexo-deployer-git --save

就是在安装插件,而且我怀疑

npm install jsdom
npm install jquery

也是插件,总上所述,安装插件还是一个相对简单的过程,一般也没什么配置

下面还是讲一下我的经历

后台管理

教程

这个插件是hexo admin

顾名思义就是你可以以管理员的身份登陆网站,并进行发布文章等操作

我一开始想实现我的伟大报复时,找到了这个

欣喜若狂的我迫不及待地装上了这个,且十分成功

就当我满怀希望觉得我能圆我美梦部署时

发现在github上无法进入admin界面

也就是说你只能在本地hexo s后,在本地爽爽

顿时失望透顶,原来也不过将hexo new ...换到了在网页上进行罢了

而且这个插件也没有markdown的语法帮助(虽然有预览)

据观察网上应该有界面更绚丽,功能更强大的插件

但由于无法实现我伟大报复,遂另寻其路

然后就有了下文的TravisCI大法


继续奋斗——TravisCI自动部署


参考一下这两篇文章

讲的是借助 TravisCI 实现了只需git push就可以更新

也就是说在不同终端,不需要再装node.js和hexo,只要git (emmm)

虽然和设想差了一些(许多)不过勉强接受吧,毕竟静态网页,没钱买域名买服务器

具体实现讲得挺清楚了,虽然看着玄乎,两者结合着看也是弄下来了

首先要讲源代码存到github上,之前的是把hexo生成的html部署到github上

教程里做法没有说,于是出坑了。

首先到你的博客的文件夹,打开git bash然后git init一下

remote加上。这个是git的基本操作,不说了

至于加那个remote,就原来那个好了,换个分枝

据说是可以再新建一个responsitory的,但是有点麻烦,也不知道有什么额外开销

git branch [新分枝名]

这个时候报错了

fatal: Not a valid object name: 'master'.

可以参考这里解决

我是随便commit了一次就可以了

然后把所有的东西都发送到这个分枝

git三部曲

git add .
git commit -m"随便写些什么"
git push [remote的名字] [新分枝名]

再去看TravisCI,过一会就会有动静了,看见它正在帮你进行hexo三部曲

说明成功了(呸)

虽然换了个版本在自己电脑上通过了,但在TravisCI上出现了相同的问题

Error: Cannot find module 'jsdom'

发现我的.travis.yml用的是这里的配置,感觉那两个不好用啊

然后在TravisCI上执行出来的又是没有格式的

我坚信不是我这里的锅了,本地依然完美,于是目光落到了

# 指定node_js版本
node_js: 
    - 7.9.0

想想本地都可以的,本地版本10.8.0

换上似乎是有一定几率成功了

不过来说正解吧,解决问题的关键在于英语水平

错误:找不到模组’jsdom’

姑且这么翻译吧,于是强行安装这个找不到的module

在我们的博客文件夹中打开命令行

npm install jsdom

就可以解决了,不过呢,修补完这个问题后还有一个,这次是

Error: Cannot find module 'jquery'

同理

npm install jquery

之后git三部曲

TravisCI上就能顺利运行了,自动帮你hexo三部曲

更新于2018-09-09

终于。。。又出错了

在TravisCI搞出来的也没有格式,哭了

一直也找不到什么原因,曾一度想放弃TravisCI大法过着安稳额hexo三部曲日子

直到我回到学校,试图把博客编辑总站迁移

前面可能说过吧,源代码都在那个文件夹,相当于这就是编辑总部

而不是像CSDN一样可以在网上发布

于是我从git上下载了 源代码 的分枝

在学校电脑上搭建了环境

进行了hexo二部曲,在本地打开服务器一看

竟然也是丢了格式

曾一度认为环境出了问题,转为只能在家工作的想法

不过还是找到问题所在了

原因是主题文件夹下面没有assert文件夹

因为什么头像啊背景啊图标啊之类的都在这个文件夹里面

而罪魁祸首竟然是.gitignore

是它把assert给忽略了!

发现了这个让我感觉希望复燃,遂逐渐明白事件的来龙去脉

同理我在最高层文件夹检查了一下.gitignore,大致有个了解

.DS_Store     #不知道,反正我没有
Thumbs.db     #不知道,反正也没有
db.json       #应该是和node.js有关的
*.log         #各种日志
node_modules/ #node的模组?
public/       #hexo g弄出的网页源代码
.deploy*/     #也没有,好像和什么节点有关

需要注意的3-6行吧

第5行估计就是本地能通过而在TravisCI上报错的原因了

在TravisCI上要重新安装node.js和hexo等

你在本地有的插件在那边不一定有

第6行就是网页源代码了吧,你发现git上master分枝的就是这里面的东西

所以TravisCI有一种写法是把public/的push到git的master分枝

而我用的则是在TravisCI上执行hexo d

最后给出我成功的.travis.yml代码

# 指定语言环境
language: node_js
# 指定需要sudo权限
sudo: required
# 指定node_js版本
node_js: 
- stable
# 指定缓存模块,可选。缓存可加快编译速度。
#cache:
#  directories:
#    - node_modules

branches:
only:
    - source

# S: Build Lifecycle
before_install:
- npm install hexo-cli -g

install:
- npm install
- npm install hexo-deployer-git --save
- npm install jsdom
- npm install jquery

# 执行清缓存,生成网页操作
script:
- hexo clean
- hexo generate

# 设置git提交名,邮箱;替换真实token到_config.yml文件,最后depoy部署
after_script:
- git config user.name "KaizynX"
- git config user.email "2291443901@qq.com"
# 替换同目录下的_config.yml文件中gh_token字符串为travis后台刚才配置的变量,注意此处sed命令用了双引号。单引号无效!
- sed -i "s/gh_token/${GH_TOKEN}/g" ./_config.yml
- hexo deploy
# End: Build LifeCycle


# 方法一
#after_script:
# - cd ./public
# - git init
# - git config user.name "KaizynX"
# - git config user.email "2291443901@qq.com"
# - git add .
# - git commit -m "Update Blog"
# - git push --force --quiet "https://${GITHUB_TOKEN}@${GH_REF}" master:master
# E: Build LifeCycle

#env:
# global:
#  - GH_REF: github.com:KaizynX/KaizynX.github.io.git

我还遇到过的一个坑是在TravisCI连

npm install hexo-cli -g

都运行不了,报错,这个百度可以解决好像是什么缓存问题
错误代码如下

npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID

npm ERR! errno ERR_TLS_CERT_ALTNAME_INVALID

npm ERR! request to https://registry.npmjs.org/hexo-cli failed, reason: Hostname/IP does not match certificate's altnames: Host: registry.npmjs.org. is not in the cert's altnames: DNS:a.sni.fastly.net, DNS:a.sni.global-ssl.fastly.net

解决吗我也没实质性解决过吧,你们自己百度吧


网页进阶


这部分内容还是参照不同主题的不同文档

在他们github的页面上可以找到

参照下一篇 博客进阶