我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章
本文总结了作者对博客倒腾过程中遇到的问题及解决方案,包括主题、代码渲染异常、评论系统、页面卡顿、图片压缩、部署到CloudFlare等。作者发现Shoka主题存在问题后转向使用ShokaX主题,并采用Waline评论系统,部署到CloudFlare以提高访问速度。此外,作者还介绍了自动生成搜索索引和使用ChatGPT生成摘要的方法。文章以幽默的语气表达了对博客优化过程的总结和个人体会。
# Prologue
是的,我又倒腾了一天博客,因为我发现昨晚的部署方案存在一堆坑,所以在本文里总结一下:
# 问题一览
# Shoka 主题
千万不要用这个主题,Shoka 主题已经停更了,很多代码有问题(依赖库更新 / 安全性问题等)
但是这个主题是真的好看 ┭┮﹏┭┮
,别急,有解决方案,往下读。
# Markdown 代码渲染异常
调试了一下源码发现不会触发 PrismJS
的渲染代码的函数,所以无法正常生成代码块头部:
代码块... |
同时,因为没触发相应逻辑,所以也没办法将代码每行可以单独选择并产生高亮,而是将会把整个代码块选择后变高亮,功能残缺,让我感觉很难受:
{ | |
"foo": 1, | |
"bar": [ | |
1, | |
2, | |
3 | |
] | |
} |
# Valine 评论安全问题
该库已停止维护,不再开源,且老版本有安全问题,会造成数据被人利用等问题。。。
# 其它次要问题
- 页面渲染偶尔会卡顿
- 需要项目里
clone
一份主题,造成文件管理时需要处理额外的文件(还会全局搜索的时候搜到无关的东西,需要额外剔除) - 图片不会进行压缩
- 国内访问
Vercel
部署的页面过于缓慢
# 解决方案
# ShokaX 主题
功夫不负有心人,我找到了 ShokaX 主题,还在维护,并且解决了大部分上述问题:
- Markdown 里的代码能正常渲染了!
- 支持将图片压缩为
webp
格式! - 启动速度更快了!
npm
安装主题即可,无需复制到项目内- 支持
waline
或其他评论系统
# Waline
Waline 是一个评论系统,需要自己部署一下服务端程序,支持云部署也支持自己部署
因为我懒得备案,而用 Vercel
太慢,我选择自己部署这个系统到东京的一个服务器上:
# 申请 LeanCloud Token
这个和昨天搞 Valine 差不多,但是这个现在支持用海外版 LeanCloud 了,获取两个 API Token
和 App Id
后直接 docker
启动就行,我懒得写 compose
了:
docker run -d \ | |
-e LEAN_ID=APP_ID \ | |
-e LEAN_KEY=APP_KEY \ | |
-e LEAN_MASTER_KEY=MASTER_KEY \ | |
-p 8360:8360 \ | |
lizheming/waline |
# 反代
你也不写直接让服务器 IP 在外网带个端口裸奔吧,我们就简简单单写个映射:
记得解析个域名
因为用了一键申请 SSL 证书,所以我做了个判断,如果是在请求证书目录(自动续签脚本会访问这里),那就不走反代,反之则强制走 SSL 并进入反代:
# 强制 SSL | |
if ($server_port !~ 443){ | |
rewrite ^(/.*)$ https://$host$1 permanent; | |
} | |
#一键申请 SSL 证书验证目录相关设置 | |
location ~ \.well-known{ | |
root /path/to/root | |
allow all; | |
} | |
# proxy to 8360 | |
location / { | |
proxy_pass http://127.0.0.1:8360; | |
proxy_set_header Host $host; | |
proxy_set_header X-Real-IP $remote_addr; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
proxy_set_header X-Forwarded-Proto $scheme; | |
proxy_set_header REMOTE-HOST $remote_addr; | |
add_header X-Cache $upstream_cache_status; | |
# cache | |
add_header Cache-Control no-cache; | |
expires 12h; | |
} |
如果用了 Cloudflare
,千万别把这个解析在里面代理了,不然会出现无限次重定向的问题(因为本身 Cloudflare
也做了强制 SSL
,但是他的强制 SSL
与 Waline
登录回调不兼容,所以必须关闭 Cloudflare
的代理然后自己做 SSL
重定向)
# 配置
然后在博客项目的 _config.shokax.yml
里配置一下评论网站信息即可:
waline: | |
enable: true # 是否启用 | |
serverURL: "https://server.com" # waline 服务端地址 | |
lang: "zh-CN" # 评论界面语言 | |
locale: {} # 本地化替换,详见 waline 文档 | |
emoji: # 表情包,默认为 waline 官方配置 | |
- https://unpkg.com/@waline/[email protected]/weibo | |
- https://unpkg.com/@waline/[email protected]/alus | |
- https://unpkg.com/@waline/[email protected]/bilibili | |
- https://unpkg.com/@waline/[email protected]/qq | |
- https://unpkg.com/@waline/[email protected]/tieba | |
- https://unpkg.com/@waline/[email protected]/tw-emoji | |
meta: # 评论可以填写的项目 | |
- nick | |
- mail | |
requiredMeta: # 评论必须填写的项目 | |
- nick | |
- mail | |
wordLimit: 0 # 评论字数上限 (不建议为 0) | |
pageSize: 10 # 每页显示评论条数 | |
pageview: true # 页面浏览量显示 | |
search: true | |
reaction: true | |
comment: true |
# 最后
弄好后打开服务端地址,登录一下自己账号,这个号就默认是管理员账号了,会在博客网页的评论区显示额外内容(例如你的评论会多个 博主
的描述,同时你可以删除和屏蔽评论)
# 托管到 CloudFlare
因为 Vercel
实在对国内环境不友好(尽管我在国外),于是我打算把网站部署托管到 CloudFlare
主要是托管到国内服务器上要备案域名,而我一直不在国内没办法备案
另外就是部署到 CloudFlare 能走他们的 CDN,肯定比我自己在海外的服务器访问起来快
# 部署
部署过程很简单,在 Worker/Pages
里托管对应的 Git 工程即可,然后默认执行 npm run build
即可,再设置生成的代码在 public
目录下,这样就能在 Git 项目更新后自动部署出来了。
# 域名解析
记得域名解析一下就行,加个 CNAME
的事情
# 自动生成搜索索引
因为用了 Algolia
搜索,没有给这个项目申请自动索引,所以需要自己提交索引。
所幸现在用的 hexo
里的 algolia
插件有接口: hexo algolia
于是我们直接改一下 package.json
就行了:
{ | |
"name": "xxx", | |
"version": "0.0.0", | |
"private": true, | |
"scripts": { | |
"build": "hexo generate && hexo algolia && hexo deploy", | |
... | |
} | |
... | |
} |
这样一来每次构建网站时就会自动提交索引给 Algolia
了
# 使用 ChatGPT 生成摘要
感觉这个很好玩就搞了一下,需要在 OpenAI
的 API 后台创建新项目,然后创建 项目API Token
,这样才能正常使用
申请后我们改一下配置文件 _config.shokax.yml
:
summary: | |
enable: true | |
introduce: "我是基于ChatGPT-turbo-3.5实现的AI助手,在此网站上负责整理和概括文章" # AI 自我介绍 | |
mode: openai # openai/custom | |
pricing: "trial" # trial 为试用模板 (3 RPM);pay 为即用即付模板 (60 RPM) | |
openai: | |
remote: "https://api.openai.com" | |
apikey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" |
# Epilogue
如你所见,现在这个博客比昨天看起来舒服多了(其实没有)!
解决了一些问题,然后又浪费了半天的时间,该去赶作业了。。。
下次一点更新点代码相关的博客