about

  • 2021年5月起自用笔记应用从蚂蚁笔记迁移到joplin,使用流畅
  • ps:由于2.1.9后的joplin版本做了一些所谓的排板优化,个人使用版本固定在2.1.9
  • 为了一至体验,写博客这个事也移到joplin来
  • 可行解决方案,想到了三种,理论上还有很多种:
    • 给jopin写一个插件,直接发布
      • 按官方文档搭建了开发环境,测试发了一个插件发现在mac下没反应,但在windows下正常,故放弃
    • 解析本地数据库,检查到改动后发布
      • 点帮助打开配置文件目录,后就可以看到database.sqlite文件,就是数据库文件,定时读就能看到改动
      • 其实这个方案蛮好的,只是不想在本地专门启个程序来做这个事
    • 由于我是使用腾讯云同步的,所以可以使用同步的数据进行处理
      • 给腾讯云COS写触发器,判断是否为是博客分类的,然后处理

迁移到AWS s3 + lambda

  • 由于腾讯云函数从6月开始收最低消费第月12块,所以迁移到aws
  • 具体:笔记同步到aws s3, 静态博客生成程序运行在aws lambda ,静态文件依旧在腾讯云cos
  • 阿里云也不考虑了,国内迟早都得收钱。。从新浪sea到腾讯scf,都不想让我们这些有零星自我开发需求的人不花钱过,你按量计费也行,没流量也没几个钱,你TM弄个低消包月,怎么忍,新浪当初也是,最低包月20
  • aws有一个问题就是一个月只有2000次调用的put量,一般正常是够 用的,但是如果文章多,首次同步,基本上就跳满了,我一共100条的样子,第一次同步就用了接近1600次put,get倒是有20000次,完全够用,下面帖一下aws给的免费套餐的量
  • 41a16a27477b0d427b41e38a4fcd5e8b.png

实现

postList.json

  • 博客文章列表,静态文件

后端

  • 后端是一个serverless,大致过程是
    • 验证是否刷于笔记桶
    • 下载文件
    • 分析备份文件内容,拆出markdown和属性类信息
    • 下载 postList.json 获取博客列表
    • 判断操作类型,包含添加,更新,删除
    • 渲染markdown,生成博客页
    • 更新postList
    • 上传博客文件,上传postList列表

前端

  • 索引页
    • 使用vue
    • 下载 postList.json 进行列表渲染
    • 后端直接输出
  • 分类页
    • 索引页加参 category=xxx 实现,由vue筛选列表渲染
  • 博客内容页
    • 后端生成时将内容放在头信息里
    • 由前端 marked渲染
    • 加了code语法高亮,加了异步数学公式渲染

done

当前看到的页面就是,前端具体代码直接右键开发者模式看就好

TODO

  • 首页时间显示,改为计算属性
  • 地址栏参数queryVar改为全局变量 分类检查时直接调用
  • 首页列表改为在 vue 初始化,
  • 内容页markdown前端渲染改为使用commonmark后端渲染,前端渲染还是有肉眼可见的过程的
  • 首页改为vue3,vue3少比vue2少十多k(并没有少),理论上vue3更快,跟上时代
    • vue3好像和vue2变化不是很大,需要改的地方不多
      1. app创建改为了一个函数,不再是vue2的new app
      2. data是一个函数,可以直接调用方法,不再需要写在created里
      3. app创建好后要手工mount到DOM节点上
      	let app = Vue.createApp({
      	data(){
      	 return {postListByYear:this.getPostListByYear()}
      	})
      	app.mount("#posts-list")
      
  • page页模板独立,由于之前resources拿不到,做成了String变量,研究了一下文档解决
  • 图片处理,有点复杂,待完成,于4月5日完成
    1. 先把图象标签拎出来
    2. 按id把图片复制到blog桶image目录下
    3. 替换图象标签里的连接
  • 并发问题 暂不考虑
    • lock文件,内容为文章id,每次处理时循环检查
  • 评论或留言版,考虑用第三方,使用了来必力
  • 代码高亮,添加了一些常用语言json,java,groovy,python
  • 公共静态文件cdn更换为为cdnjs.com,供应商为cloudflare
  • 用了codefever的git做为代码托管,主要是想知道自己之前改了啥,好排查问题
  • 静态首页,发现动态的首页seo不收
  • 使用bytool去除fastjson依赖
  • siteMap 生成
  • 添加 meta description tag
  • 更新时间使用笔记更新时间,而event时间
  • 解析器添加autolink扩展,支持直接写url,并对链接添加target = "_blank"新页面打开
  • 文章改名支持
    • 一个小bug导致的

迁移到aws

  • 笔记同步到aws
  • 更新程序,调整blog程序,添加aws s3事件相关逻辑,已基本改完
  • 部署aws测试调整,确认无异常,附件也要测试一下,自测俩小时。。哎写groovy是有点不容易看到bug
  • 移除腾讯云函数相关代码
  • 冗余一份postList在s3,用于判断是否需要update,如里不需要update就无需请求腾讯云了

迁移备注

  • aws s3需要开启 存储桶版本控制,才能收到更新事件
  • lambda 需要专门给s3加一下权限