--- slug: twikoo-update-shock summary: 抽象的 Twikoo 更新 tags: - Twikoo title: Twikoo更新惊魂 date: 2024-07-11 description: 本文介绍了Twikoo评论系统更新导致评论丢失,作者尝试重新部署并成功恢复评论,但未备份数据。作者决定重新创建数据库并导入新的评论,并增加多数据库备份。 categories: ["百草园"] featuredImage: https://img.viento.cc/cover/twikoo-update-shock-cover.webp draft: false --- 各位老友们好,我是 Chlorine。 今天讲一个挺抽象的事,就是关于 Twikoo 评论的更新。请做好血压飙升的准备。 ## 前言 Twikoo 这个评论系统我从建站开始就开始用,美观,功能强大,(大部分时候)省心,而且开发者 [iMaeGoo 大佬](https://www.imaegoo.com/)也一直在尽心尽力地维护。这大半年下来,也攒了一百多条评论了,也是我这个小破站的珍贵回忆呐。 我的 Twikoo 有两个云函数,一个在 Vercel 上,一个在 Netlify 上。本来用的是前一个,后来秉持着服务都堆到副域名的原则换成了后一个。反正数据库都是那一个,换个域名有什么大不了的。 *记住这句话(咬牙切齿)* ## 左思 *注:这个标题是谐音* 今天看到 Twikoo 更新了,于是打算更新一下。只不过 Twikoo Netlify 的更新实在是有点抽象,不管是把 `package.json` 的版本号改成 `latest` 还是 `1.6.38` 都不好使。我甚至顺手去提了个 issue。 然后,我就想到了一个让我想打自己的主意:那我重新部署不就行了? 火速删除项目,导入仓库重新部署…… 我记得 Twikoo 得有个环境变量 `MONGODB_URI` 来着?应该填多少呢? 坏了,我不知道。刚才删除得太着急,忘记复制了。我记得 Vercel 的那个似乎和这个不是一个数据库?应该存的是旧版的数据,没有用。 这应该不是什么大逝,去 MongoDB 重新创建一个 user 就完事。期间顺带着喜提几个 function crash,经过检测是 MongoDB 的 Network Access 没配置泛播可见。 然后 redeploy,云函数运行正常,美滋滋。 喜滋滋地去网站上看一圈……这怎么需要注册?重设密码了? 行吧,重设就重设。点进去…… **不是,我评论呢?怎么全没了?!** ![震惊.webp](https://img.viento.cc/emoji/EMJ-pom_shocked.webp) ## 抢救 这属实是吓了我一跳。这怎么换个字符串啥也没有了? 注:后来看到了 Twikoo 官网的备注: > 连接字符串包含了连接到 MongoDB 数据库的所有信息,一旦泄露会导致评论被任何人添加、修改、删除,并有可能获取你的 SMTP、图床 token 等信息。请妥善记录这一字符串,之后需要填入到 Twikoo 的部署平台里。 好像有点合理,但是又不合理…… 事不宜迟,赶紧想招。我没有 `twikoo_comment.json` 的备份,唯一可能的方式就是通过 MongoDB 直接导出。我有导出 MongoDB 数据的经验,但是现在 Windows 备用机不在手中,只能硬着头皮用 MacBook 导出。 看一下 MongoDB 的数据量,看起来很正常,一百多兆呢(我真傻,真的。Twikoo 的数据基本都是文本,怎么可能有这么大的数据量?后来我看了新的 MongoDB 后端面板,我这些评论加在一起只有 156kb,那也就是说我需要十几万条评论才可能达到这个量……这都是后话了)。这也使我成功地忽略了侧边栏显示的那一堆奇怪的 collection。 然后,自然是没有然后啊。MongoDB Compass 啥也导不出来,MongoDB Atlas CLI 倒是一次成功了,但是导出的是空的(我真傻,真的,我早该想到的,前端面板都看不见,MongoDB 怎么可能有有效数据?)。 > 事已至此,先吃席吧。——我的微积分助教 PWK 学长 然后我就摆烂了。算了,丢了就丢了吧。大不了从头再来,还可以趁机换个评论系统(此处容我吐槽一下,Twikoo 的加载慢得不像人)。 然后我又回到了我忠诚的本地环境。想着反正都丢了,不如试着把 envID 换成原本那个域名,里面还留着一些评论,还能损失最小化。反正情况也不可能再糟糕了。 `make` 构建,在浏览器里面预览……然后,奇迹发生了:**我的评论全回来了**。 原来,事实上,我的两个云函数共享着同一份数据库。言语已经不能形容我此刻的心情了。 > 多中心备份配享太庙! ## 后续 其实到这里故事已经可以结束了,我只需要把 Vercel 云函数的环境变量扒下来就完事。但是我打算再走一步。 我重新开了一个 project,创建了一个新的数据库。这次的字符串我拷贝了下来,存到了我的 `tokens.csv` 里面。然后部署 Netlify 云函数(顺带着又喜提几个 function crash)。然后打开前端面板,导入我新下载的 JSON。 这一方面算是多数据库备份,另一方面,我希望调几个数据,而 Twikoo 的前端导入功能有时候不太好使,不能覆盖。所以干脆导入一个白板里面。 由于 Twikoo 的面板配置存在连接字符串里面,因此我需要再配一遍。这倒不是麻烦事。期间我还注册了新的机器人邮箱,以后大家就可以接到这个小助手的邮件通知啦(我本来想用 outlook,奈何实在是不给力,一直 SMTP error,一点招没有)。