Build your blog
前言
一直想要构建一个属于自己的博客,可以作为自己生活工作的输出和记录。但是碍于各种麻烦(买服务器,构建,运维)(当然主要就是懒),最终只停留在想想阶段。 后来意识到输出的重要性,才认真的考虑构建自己的博客。
博客技术选型
博客主要有动态网站,静态网站。
- 动态网站,比如Wordpress,自己写的动态网站博客(jsp php等)。这个就是比较麻烦,要服务器,要自己构建,自己维护。(所以一直没有去实施) 但是这种比较灵活,可玩性比较高,可以根据自己的需求处理。
- 静态博客,就是服务器只托管静态的html页面,并没有动态的能力。其实很早之前网上就有这样的博客了,只是以前一直不知道这就是静态博客。 不过了解之后,发现这个可玩性也很高,可定制自己的博客样式,而且可以结合github,免去服务器的维护。
- 博客就应该简单,不需要太多的乱七八糟的动态交互。 因此很适合做静态网站的形式。
了解一番,静态博客可选择: github.io/GitHubpage + hexo/Jekyll/hugo. 最后选择了hexo,主要因为它是nodejs写的,而我也想学nodejs,因此就选hexo。
原理,利用hexo/Jekyll/hugo等静态网站生成器,将md文件生成的静态的html页面,push到github上。github托管你的静态网站,github会提供一个博客域名给你,你就可以访问域名使用了。
静态博客框架原理
静态博客框架/静态博客生成器 利用模版语言如ejs/njk等,将md文档渲染成html。
搭建
具体搭建方法见 链接。 以下记录,就是记录流程和一些关键概念。
1.新建github的repository。
githubpage用途
github上新建githubpage。repository名为 githubusername.github.io. 新建这个仓库后,通过域名githubusername.github.io就可以访问这个仓库下的静态资源。
注意名字只能是githubusername.github.io,其他名字的仓库,github不会托管的,也就是说github只给每个用户一个githubpage。
相当于github帮你托管了一个静态网站,并给你提供了网站域名githubusername.github.io, 你通过这个域名就可以访问静态网站了。
2.安装hexo。
hexo 快速、简洁且高效的博客框架, 静态博客生成器。 官方文档
2.1 安装hexo
其基于nodejs,因此先安装nodejs。
hexo原理,其实就是样式和内容分离。渲染。
0.读取总配置文件。根目录下的 _config.yml.
1.渲染。source文件夹 和 theme文件夹。 两次渲染。1.第一次先将source下各自文件夹中的md文件渲染成article对象。2.根据种配置文件中theme将article对象根据theme文件夹下相应的lauout的ejs的进行渲染成html,输出到public。article对象用哪个layout的ejs进行渲染,用的是 md所在的文件夹名称 就是 theme下layout对应名称的xx.ejs。 theme的渲染配置在各自theme文件下的_config.yml.
配置文件中也是定义一些变量。
模版语言:ejs njk
hexo 目录结构,原理。
目录结构, 配置文件, 原理。
目录结构
配置文件
原理
2.2 hexo 安装主题
有很多主题可供选择。这里我尝试了两种,hexo-theme-matery, next. 最后选用了next,因为最符合简约 有效的风格。 hexo-theme-matery 虽然很炫,但是太杂了,不适合技术博客的风格。
安装主题,选择你喜欢的主题。
- 找到你喜欢theme的github, git clone 到hexo根目录下的theme目录下。
- 修改根目录下的_config.yml中的theme配置。 修改为theme目录下的主题目录名。
2.3 hexo 常用命令
(要在init生成的目录下执行hexo命令)
hexo init XXX
hexo g / hexo generate 生成静态页面。在public目录下。
hexo s / hexo server 启动本地http服务器, 访问localhost:4000
hexo clean clean生成的文件。
hexo new “xxx” 生成文章,到_posts下。
hexo new page “xxx” 生成文章,到source下。
hexo new draft “xxx”
除了hexo new post|page xx。也可以在相应的目录下手动生成md。
hexo d / hexo deploy 会将public下生成的文件puosh到_config.yml配置文件设定的github仓库上。
关于.yml配置文件 注意两个地方。根目录下的_config.yml, theme目录下各个主题的_config.yml
我安装的hexo 和 next主题 版本 如下:
hexo -v
NexT version 8.10.1
Documentation: https://theme-next.js.org
========================================
hexo: 5.4.1
hexo-cli: 4.3.0
os: darwin 16.7.0 10.12.6
node: 15.3.0
v8: 8.6.395.17-node.22
uv: 1.40.0
zlib: 1.2.11
brotli: 1.0.9
ares: 1.16.1
modules: 88
nghttp2: 1.41.0
napi: 7
llhttp: 2.1.3
openssl: 1.1.1g
cldr: 37.0
icu: 67.1
tz: 2019c
unicode: 13.0
2.4-1. 主题的功能,插件定制。
我想要的博客功能: 简洁,不需要花哨, 搜索, 归档, tag, 分类。
- 归档,分类,tag。
- 搜索。 npm install hexo-generator-searchdb
- RSS。 npm install hexo-generator-feed –save
- 字数统计,阅读时长等。npm install hexo-word-counter
- 访客统计。 不蒜子。
- 评论功能。 gitalk, valine。 评论回复时 邮件提醒。
- 留言板。gitalk, valine。
- gitalk 文章与issue对应 是根据文章的url来决定的。文章的url作为issue的id。gitalk issue初始化问题(利用sitemap.xml去自动化初始化)。
1.设置valine评论。 valine + leancloud. https://ioliu.cn/2017/add-valine-comments-to-your-blog/ 2.设置valine评论的邮件提醒。 valine admin. https://github.com/zhaojun1998/Valine-Admin 注意:leancloud的休眠策略。防止休眠:1.leancloud定时任务。2.github action 发请求。 https://blog.csdn.net/Aoman_Hao/article/details/105323917 https://github.com/zhaojun1998/Valine-Admin https://blog.csdn.net/weixin_49687704/article/details/119790377
- gitalk 文章与issue对应 是根据文章的url来决定的。文章的url作为issue的id。gitalk issue初始化问题(利用sitemap.xml去自动化初始化)。
- 阅读进度。修改next中参数就行。
- 文章加密。
- 简单的前端设置密码。(绕过,到githubio上还是可以看。比如hexo-theme-matery就是这么加密的)。pass。
- 对整篇文章内容加密,解密前只显示加密的密文。(hexo-blog-encrypt) - 说说,备忘录。
- 相册。
- tag的词云。 hexo-tag-cloud。
- 添加CC协议。
- 将githubpage放到giteepage。 github太慢。
- 添加音乐播放器。 aplayer, metingjs。 hexo-tag-aplayer(hexo-tag-aplayer 是 APlayer播放器的 Hexo 标签插件。也支持metinjs。) hexo-tag-aplayer 只在md文件中使用。其他可以在支持html标签的页面中使用。
- 使用<iframe>
- 使用aplayer。
- 使用aplayer + metingjs.
(以上三种可以在md文件,也可以在像sidebar.njk这样的njk文件中使用。)
- 使用hexo-tag-aplayer.(hexo的标签插件只能在md文件中使用。为什么无法用在njk文件? 好像也不能用在ejs文件中)
- 放在sidebar; 放在某篇文章; 页面跳转继续播放全局可播放; 底部磁吸模式;- 放在sidebar里只能
<iframe>
,aplayer原生,或者metings。因为hexo标签插件在njk文件不起作用。 - 关于全局播放。 使用pjax技术。 即不刷新请求,同时改变url。(ajax + pushstate)。 next很简单,直接开启pjax:true
- 放在sidebar里只能
2.4-2.定制 修改 主题 (增加新的功能 样式等)
当官方/第三方 主题 功能 样式都无法满足自己的需求,就要自己去魔改了。
2.5.自定义开发hexo theme。
真正厉害的就是自己开发hexo的主题。
3.push到repository。
当我们完成文章创作之后,就可以发布到githubpage上了。
1. 修改根目录下的_config.yml的deploy配置。
4.域名访问。
1. yourgithubusername.github.io
2. 如果你自己有域名的话,可以将你的域名cname到yourgithubusername.github.io。
1. 在域名服务商处将自己的域名cname到yourgithubusername.github.io
2. 在github网站上 githubpage 的 repository 中的settings->githubpage->domain 修改为你的域名。 (修改cname后,要记得修改 评论模块的安全域名设置(gitalk leancloud))
3. 问题:既然域名服务商已经添加了域名解析cname,为什么还要在github上添加cname? github上的cname作用是什么? 如果没有设置github上的cname,就不成功。 我原先也是这么想的,其实就是相当于域名cname到githubpage上就可以了。但是我试过不行。仅仅在域名服务商那边设置cname还不行,还要在github上设置cname才行的。 所以我不知道github上设置cname是什么作用? 是为了验证? 另外,两个域名互相cname会怎样??
5.利用github action自动发布。
0.源文件仓库。 私人。
1.gihubpahe仓库。 公开。
2.在源文件仓库中设置githubaction。 方式1.使用hexo d 一键部署 发布到gihubpahe仓库。 方式2.编写hexo的action直接来将生成的静态文件push到gihubpahe仓库。
方式1将token放在源文件中不是很好。
hexo 的_config.yml中设置token提交:
deploy:
type: git
repo: https://xxxtoken@github.com/ruozhiertong/ruozhiertong.github.io.git
branch: main
然后直接 hexo d.
改进,通过hexo指令向其传递变量,然后再action中向hexo传变量。 比如类似 hexo d –github_token xxxtoken. 然后再github action中去设置xxxtoken。
方式2,可以直接使用github action中设置东东。
为了保证源文件的私有性,所以设置了步骤0的私有仓库。 每次编写md文件后,push到步骤0的仓库。 步骤0仓库的action会生成静态文件push到步骤1的仓库,从而实现源文件和公开博客的分离。
总结
建博客:
- 在github上创建githubpage的repository。
- 安装hexo,创建hexo工程,安装主题,安装相应的功能,修改配置文件参数。
创作:
- hexo new xxx 创建文章
- xxx.md 的内容创作。 编辑相应的categories,tags等。
- hexo g && hexo s 本地生成和浏览
- hexo d 部署到githubpahe。
- 访问 yourgithubusername.github.io