# Blog 搭建
无法白嫖阿里云 or 腾讯云的学生优惠后,用个人云服务器作为博客的花费属实有点不能承受,于是又回归了 Github Pages + Hexo
的白嫖之路,途中踩到了诸多坑,这里稍微记录一下:
# 主题
逛 themes 的时候偶然看见了 ShoKa 主题,除了有点太过二次元外特效和布局还是很对我胃口的,唯一一点在于作者两年前就不更新了,看到最后一次更新时间时,我就意识到,安装之旅一定时会踩坑的...,咬咬牙,还是踩一遍吧
# node 版本
作为一个两年前的项目,用最新 LTS 版本 18.17.1 果不其然会出问题,主要在于该项目所依赖的插件 hexo-renderer-multi-markdown-it
中依赖了 puppeteer
,在已经解决了网络问题的情况下,仍然会报一个错误:
TypeError [ERR_INVALID_PROTOCOL]: Protocol "https:" not supported. Expected "http:" |
最终解决方法为将 node 版本降至 12.x:
sudo n 12.22.12 |
# deploy 插件
hexo 官方的 deploy 插件为: hexo-deployer-git
,提供了一键部署功能,而官方文档给的不是特别详细,token 变量赋值为 github 的 access token 仍然无法认证成功,这里直接给出认证成功的配置:
deploy: | |
type: git | |
repo: https://Your_Access_Token@github.com/<Name>/<Name>.github.io | |
branch: main |
# 包管理器
不知道是不是因为 node 降级之后没有把 yarn
降级的原因,当我用 yarn add xxx
安装依赖后,再次使用 hexo
指令时,会出现报错 cannot find module 'hexo'
,这里没有继续探究下去了,直接放弃 yarn
,使用 npm
就没有问题了。
# LeanCloud + Valine
该主题默认支持了使用 valine+LeanCloud
的方式实现无后端评论功能,有问题的地方在于 leanCloud 现在做了默认策略,无法通过默认地址进行访问,必须通过 应用 -> 设置 -> 应用凭证 -> 域名白名单
中的 Request 域名进行访问,在 _config.yaml
中的配置项中,必须在 serverURLs
为上述域名 xxxx.api.lncldglobal.com
才可以正常使用
# 本地预览正常但部署后 404
刚开始遇见这个问题是在实现分类图片时,图片就在 github 的仓库对应位置,但是加载页面时却 404,用英文搜了好久但其实没有搜到点上,这个问题的本质在于,默认 njk 模版在引用图片时使用的是绝对路径 /MISC/cover.jpg
,本地没有问题,但是部署到 github 后会出现无法访问的情况,此时将模版更改为 MISC/cover.jpg
即可,对我来说,问题的复杂在于,刚开始没有定位到问题,以为是 url 路径大小写的问题,所以就把 MISC
改为了 misc
,这有导致了新的问题,这个才是更值得记录。
由于 URL 路径对于大小写是敏感的,所以如果服务器路径为 http://xx.com/misc/cover.jpg
,那么此时,用 http://xx.com/MISC/cover.jpg
是访问不到的,所以我在更改大小写后,仍然有 404 的问题,且此时,我注意到在本地的 public 文件夹中, MISC
文件夹已经变为了 misc
,但 hexo d
后,github 仓库中仍然为 MISC
,原因在于 git 本身是对大小写不敏感的,即 MISC
和 misc
对于 git 来说是一样的,而 hexo 本身又是差量更新,所以大小写的变动并没有记录更新,仍然用之前的大写版本,该问题的解决方法如下:
- 修改
<root>/.deploy_git/.git/config
文件,将gnorecase = true
改为false
(使得 git 对大小写敏感) - 删除
<root>/.deploy_git
下的MISC
文件夹 (该文件夹内才是真正的 git 仓库) hexo clean && hexo g && hexo d
重新部署
# Jsdelivr 加速及刷新缓存
对于 github 项目来说,配置 Jsdelivr 加速极其简单,直接将资源的访问链接替换成 CDN 链接即可,CDN 链接为:
https://cdn.jsdelivr.net/gh/您的Github用户名/项目仓库名@版本/文件路径 |
例如,我自己改过的 MiniValine 的地址为:https://github.com/Gality369/MiniValine ,项目内的目录为 dist/MiniValine.min.js
,发布了一个 release 版本为 “v4.2.2-beta11”。
那么我只需将地址替换为:https://cdn.jsdelivr.net/gh/gality369/MiniValine@v4.2.2-beta11/dist/MiniValine.min.js 就可以让 jsdeliver 抓取我的 js 文件并通过 CDN 加速传给我。
注意,这其中涉及到缓存问题,例如当我改变了上述 js 文件后,由于 jsdelivr 会存一份缓存文件便于加速获取过程,所以当我请求时可能只能获取老版本的 js,我们可以通过将 cdn
换成 purge
的方式来告诉 jsdelivr 重新获取文件并刷新缓存,例如:
//刷新前 | |
https://cdn.jsdelivr.net/gh/gality369/MiniValine@v4.2.2-beta11/dist/MiniValine.min.js | |
//强制刷新,返回 status: finished 代表刷新成功 | |
https://purge.jsdelivr.net/gh/gality369/MiniValine@v4.2.2-beta11/dist/MiniValine.min.js | |
//重新访问即可 | |
https://cdn.jsdelivr.net/gh/gality369/MiniValine@v4.2.2-beta11/dist/MiniValine.min.js |
jsdelivr 大幅提升了网站的访问速度,最重要的是免费!!!
再次由衷感谢这样的项目🙏
# Hello World
仔细算算搭建个人博客已经有过大概 7、8 次了,每次总是因为各种各样的原因,最终都荒废了,记录的笔记,分享的技术也都遗失了,确实也有点遗憾。
本来计划等开学之后再重新搭博客来记录 & 激励自己,但是在认真看了 Sakura 师傅的博客之后,大受震撼,几经思索之后,不禁问自己为什么要等到 10 几天后呢?为什么不能现在开始呢?于是,说做便做,今天便将诸多坑都踩了踩,产出了新博客的第一篇文章。
博客将具体怎么发展,写那些内容,暂时还没有想好,但是一定会置顶一篇自己的每日进展作为激励,希望可以一直坚持下去,每天更新。
末了,写一句激励自己的话吧!
printf("泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也"); |