1
0
Fork 0
blog/content/posts/百草园/Twikoo更新惊魂.md

89 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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一点招没有