记一次 Misskey 升级事故

4 minute read

真是惊心动魄的一次升级,跨了好几个小版本,从 12.110.0 升级到 12.117.1 。主要是之前升级的时候出了点小麻烦,所以升级没那么积极(主要还是怕自己搞不定,慌得一批)。

问题表现

本次升级以后站点呈现一种奇怪的状态:

  1. 不能发帖
  2. 不能与联邦宇宙联通
  3. 未登录的情况下,登录页面空白
  4. 奇迹般的私信功能还在工作

升级完成,打开主页心里就在喊糟了,因为 Notifications 部件不工作了。我以为是部件出现问题,点到信息提醒界面,一切看起来都很正常,也就准备放着不管了。发现问题是在之后,主页完全没有新的信息流入,我试着发帖以后,发现失败。 当时一整慌乱,以为是之前升级的时候,ssh 断开连接导致升级出现差错,于是又重新走了一遍流程,结果仍旧是这样。

这实在太让人焦虑了,没有 Fedi 我怎么活啊!

查看 CHANGELOG,试图找出在这几个版本升级过程中,额外需要注意的事项,发现似乎和 redis 有关系,但具体是什么我不明白。

解决方法

重启

重启大法在什么时候都应该试试,第二天在糖喵的建议下,我试着先重启看看。

  1. 重启 VPS
  2. 重启容器

结果当然是没有恢复啦!不过总算学会查看正在运行的 docker 了。

docker ps 当前正在运行的容器

docker ps -a 列出所有的容器

重新安装

既然重启没有用就重新安装吧。

1. 备份

  • 配置文件

    1. docker-compose.yml
    2. default.yml
    3. docker.env
  • 数据库 db 文件夹,用户文件 files 文件夹,缓存文件 redis 文件夹

    tar 打包压缩 tar -czvf backup.tar.gz misskey/db misskey/files misskey/redis misskey/docker-compose.yml misskey/.conf

2. 重新安装

参照官方教程安装就好了

3. 还原备份文件

tar -xzvf backup.tar.gz

实际上最后重启容器就好了。但是问题没有这么简单,我在完成安装以后,可以正常打开站点,可是没有连接到用户数据库。此时此刻,我已经不知道该干什么了,只好再次求助糖喵。甚至打算破罐子破摔,来一个全新的站点了。

Troubleshooting

数据库连接失败

实际上是 docker-compose.yml 配置文件的问题,不晓得哪一次更新的时候,配置文件变成了默认的,造成 Misskey 和 PostgreSQL 无法正常连接,需要修改

1
2
3
4
5
6
7
8
9
  db:
    restart: always
    image: postgres:12.2-alpine
    networks:
      - internal_network
    env_file:
      - ./.config/docker.env
    volumes:
      - ./db:/var/lib/postgresql/data

站点空白,页面无更新

从前端看表现为 HTTP/1.1 500 Internal Server Error

从后端看表现为

ERR 1 [core] TypeError: Cannot read properties of undefined (reading 'stack')  
ERR 1 [core] TypeError: Cannot read properties of undefined (reading 'stack')  
[ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND redis  
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:71:26)  

主要锁定是 redis 出现问题。解决方法:将备份的 redis 文件夹改名,重新启动容器,让它自行生成 redis 在宿主机的目录。

终于学会了查看 Docker 日志 docker logs [container ID]

终于摸鱼站重生了