引言
最开始我是在CSDN上写博客的。博客写了一年多,访问量勉强破万,感觉其中至少有三成是自己贡献的。而且CSDN上的广告是越来越多,网页编辑器也是越来越不好用。
十一月份,在青岛的ICPC区域赛失利之后,想要重新开始,和过去告别。也从此转移自己写博客的阵地。考虑过转投暂时还比较干净而且可以部分定义页面的博客园,但是最终还是决定在Github Pages上搭建属于自己的博客。
然后,翻了一些网上的教程,用Hexo框架和NexT主题搭了一个比较素雅的符合个人审美的博客。然而,Hexo搭建的博客需要先在本地生成博客页面然后再上传到服务器上,每次发博客都需要在电脑重新生成页面并上传,感觉没有那么方便。在不同电脑上想要发博客更是十分困难,感觉如果胡乱操作后本地部署的文件发生了一定的错乱,恢复起来会十分麻烦。
后来发现,Github Pages原生支持Jekyll,因此如果只需要推送文章可以直接在github的仓库里做。于是决定在期末考试后用Jekyll重新搭建个人博客。原来的博客不再维护。
构思
目前博客的demo如下:
想搭建一个足够干净、页面几乎不要有多余元素的博客,同时博客的功能还要足够丰富,满足我以下的需求:
- 用Markdown写博客
- 支持Latex公式
- 支持mermaid等插件
- 个性化Live2D
- 分享一些我在其他网站的个人账号
- 移动端适配
- 足够快的加载速度
- 访问量统计,评论互动
- ……(需求是会逐渐增长的,参见关于)
其中,Live2D是我某次访问别人的博客初次见到的,感觉非常吸引人。最终的目标是去掉网页上所有多余的元素,只剩下博文和Live2D看板娘,看板娘本身还可以作为博客访问的导航,感觉会十分有新意。
搭建过程(不定期更新)
我目前读的专业是计科超算方向,所以软件工程专业相关方面的基础几乎为0😌,大部分的内容都是参考网上教程慢慢摸索的,假如对某些过程有意见和建议欢迎向我提出!
开发环境
这个学期选了一门Linux相关的公选课,感觉还不错,因此直接把开发环境是搭建在Windows Subsystem for Linux(简称WSL)上了,Windows下也可以直接访问其中的环境,详见这篇博客。
sudo apt install jekyll
Jekyll是基于Ruby和Node.js环境的,很多依赖的包也会同时安装进来。现在,找在目录下打开终端,运行如下代码,加入新建了一个名为blog
的文件夹,则说明安装成功了。
jekyll new blog
结构解析
观察刚刚生成的博客目录,有如下的结构:
├──_config.yml
├── _drafts
| ├── begin-with-the-crazy-ideas.textile
| └── on-simplicity-in-technology.markdown
├── _includes
| ├── footer.html
| └── header.html
├── _layouts
| ├── default.html
| └── post.html
├── _posts
| ├── 2007-10-29-why-every-programmer-should-play-nethack.textile
| └── 2009-04-26-barcamp-boston-4-roundup.textile
├── _site
├── .jekyll-metadata
└── index.html
它的结构还算是比较简单清晰,详细功能如下表。
文件/目录 | 描述 |
---|---|
_config.yml | 保存配置数据。很多配置选项都可以直接在命令行中进行设置,但是如果把那些配置写在这儿,就不用非要去记住那些命令了。 |
_drafts | drafts(草稿)是未发布的文章。这些文件的格式中都没有 title.MARKUP 数据。学习如何使用草稿。 |
_includes | 可以加载这些包含部分到的布局或者文章中以方便重用。 |
_layouts | layouts(布局)是包裹在文章外部的模板。布局可以在 YAML 头信息中根据不同文章进行选择 |
_posts | 这里放的就是的文章了。文件格式很重要,必须要符合:YEAR-MONTH-DAY-title.MARKUP。 永久链接 可以在文章中自己定制,但是数据和标记语言都是根据文件名来确定的。 |
_data | 格式化好的网站数据应放在这里。jekyll 的引擎会自动加载在该目录下所有的 yaml 文件(后缀是 .yml, .yaml, .json 或者 .csv )。这些文件可以经由 `site.data` 访问。如果有一个 members.yml 文件在该目录下,就可以通过 site.data.members 获取该文件的内容。 |
_site | 一旦 Jekyll 完成转换,就会将生成的页面放在这里(默认)。最好将这个目录放进 .gitignore 文件中。 |
.jekyll-metadata | 该文件帮助 Jekyll 跟踪哪些文件从上次建立站点开始到现在没有被修改,哪些文件需要在下一次站点建立时重新生成。该文件不会被包含在生成的站点中。将它加入到 .gitignore 文件可能是一个好注意。 |
index.html and other HTML, Markdown, Textile files | 如果这些文件中包含 YAML 头信息 部分,Jekyll 就会自动将它们进行转换。当然,其他的如 .html, .markdown, .md, 或者 .textile 等在的站点根目录下或者不是以上提到的目录中的文件也会被转换。 |
Other Files/Folders | 其他一些未被提及的目录和文件如 css 还有 images 文件夹, favicon.ico 等文件都将被完全拷贝到生成的 site 中。 |
选取模板
和丰富精美的Hexo比起来,好的Jekyll模板真的是太少了…经过漫长时间的挑选,最终选择在lanyon主题的基础上修改啦。
这里选我自己的博客为模板,也可以在GitHub上慢慢翻一些别人的博客或模板。
git clone https://github.com/wu-kan/wu-kan.github.io YourBlog
发送到Github托管
把本地文件修改后,上传到博客仓库的master
或者gh-pages
分支即可。
定制
Update: 注意!以下移植插件的办法即将/已经过时。目前的计划(v2.3.0)是,将所有插件做成jsloader的形式,这样引用的时候只要
<script src='/public/js/x.js'></script>
即可,可以加快页面访问速度。目前的计划是完全去掉_include/
目录下的所有文件。
我把博客实现的的插件基本上都封装起来了,拿走的流程都差不多:
- 将我博客代码仓库下
_includes\
相关文件加入你自己的_includes
- 在你的
_config.yml
内加入相关配置项(如果有的话,可以参看我的) - 最后在需要这个插件的地方加入
include语句
即可
加入Live2D看板娘
已经将相关代码封装,将我博客代码仓库下_includes\live2d.html
加入你自己的_includes
,在</body>
标签前加入如下代码。
{% include live2d.html %}
随后在你的_config.yml
内加入如下配置项:
live2d:
enable: true
live2d_settings:
- key: "'waifuEdgeSide'"
value: "'right:0'"
- key: "'modelId'"
value: 5
- Live2D的前端基于fghrsh/live2d_demo修改,感谢。
- Live2D的后端暂时使用了fghrsh提供的api,感谢。
数学公式渲染
这里选择速度更快的KaTeX来渲染,参考使用KaTeX代替MathJax渲染公式。
已经将相关代码封装,将我博客代码仓库下_includes\katex.html
加入你自己的_includes
,在</body>
标签前加入如下代码。
{% include katex.html %}
随后在你的_config.yml
内加入如下配置项:
katex: # KaTeX
enable: true
stylesheet: //unpkg.com/katex/dist/katex.min.css
src: //unpkg.com/katex/dist/katex.min.js
auto-render: //unpkg.com/katex/dist/contrib/auto-render.min.js
delimiters: true # 开启行内公式$\KaTeX$支持
mermaid流程图
已经将相关代码封装,将我博客代码仓库下_includes\mermaid.html
加入你自己的_includes
,在</body>
标签前加入如下代码。
{% include mermaid.html %}
随后在你的_config.yml
内加入如下配置项:
mermaid: # https://github.com/knsv/mermaid
enable: true
src: //unpkg.com/mermaid/dist/mermaid.min.js
stylesheet: //unpkg.com/mermaid/dist/mermaid.min.css
markdown-expand: true
valine评论系统
配置详见官方手册,说得很清楚了。
已经将相关代码封装,将我博客代码仓库下_includes\valine.html
加入你自己的_includes
,在你需要评论模块的地方加入如下代码。
{% include valine.html %}
随后在你的_config.yml
内加入如下配置项(这是我的,请根据官方手册上的说明获取自己的参数):
valine:
enable: true
src: //unpkg.com/valine/dist/Valine.min.js
appId: ******
appKey: ******
notify: true # 评论回复邮件提醒
verify: true # 验证码服务
avatar: identicon
placeholder: 在这里评论吧!
visitor: true # 文章访问量统计
highlight: true # 代码高亮
avatarForce: false # 每次访问强制拉取最新的评论列表头像
recordIP: true # 记录评论者IP
下一步计划
详细的开发计划及建站内容详见博客详情页。
从这个页面得到的灵感,目标是博客上除了文章和作为导航的Live2D之外不出现其他的模块,尽量的干净、快速。
参考资料
大部分的参考链接已在原文给出,同时搭建本博客的过程中还参考了以下内容,感谢作者们:
![]() |
![]() |