从 Calckey v13 stable 升级到 Firefish v1.0.3

Calckey 在 v13 后换了架构,失去了迁移回 Misskey 的可能性,所以 v14 的时候一直在观望。用了几个月后感觉比较稳定,rebrand to Firefish 后也出了新的 stable 版本,还终于赶上隔壁长毛象出了编辑帖子的功能,此外也有不少新功能,遂决定升级。

第一步是装新的 dependency,rust:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

除了 Rust 外没有安装别的,因为服务器现在负担小所以没装 DragonflyDB,搜索也还够用就没配置新的搜索(实际我现在都不知道我在用什么软件搜索 🤷‍♀️)。

在进行大刀阔斧的改动前进行了备份:在 VPS 提供商储存了一份 snapshot。先关机再备份可以确保数据的完整性,但重新开机进行下一步操作之前如果有使用任何会开机后自动启动实例的服务(比如systemd service)请记得手动关掉(谁忘了,我忘了)。

此外对数据库进行了备份:

cd /tmp
sudo -u postgres pg_dump -d calckey > calckey-data-20230721-22-16.sql

这个地方把目录更改到tmp是因为 postgres 用户对这个目录有写入权限,如果在自己的用户目录下会出现权限问题从而无法导出。可以之后再手动移动文件到想要的目录下。

手贱升级了一下所有的包(might not be a good idea 但暂时没出事):

apt list --upgradable
sudo apt upgrade #upgrade all the packages

升级 Node.js:

Uninstall old one(v19.9.0): sudo apt-get remove nodejs

Install v20.5.0 using nvm: nvm install node

想着既然都开始升级在折腾了那就加点 SWAP 吧,虽然内存基本不吃紧。仍然参考了这个傻瓜式旧教程,加上了 2G。

接下来因为服务改名了,为了保持一致性手动给数据库也改名。改名前检查是否有 session 连接至当前数据库,如果有就杀掉进程:

db=# \connect postgres;

\x

SELECT  *
FROM pg_stat_activity
WHERE datname = 'calckey';

SELECT
    pg_terminate_backend (pid)
FROM
    pg_stat_activity
WHERE
    datname = 'calckey';

ALTER DATABASE calckey RENAME TO firefish;

失败(哈哈)。提示当前仍有 session 连接至数据库。直接重启 postgreSQL:sudo service postgresql restart 还是失败,显示仍有 11 个 session,到这时才发现 calckey 的 service 开机后已经自己启动了……

sudo systemctl stop calckey
sudo systemctl stop redis

重试改名,终于成功了。

手动把 repository folder 也改名后 pull 新版本:

mv calckey firefish
cd firefish

git remote set-url origin https://git.joinfirefish.org/firefish/firefish.git
git pull -ff

因为已经修改过一些文件所以出现了以下报错:

error: Your local changes to the following files would be overwritten by merge:
    calckey.nginx.conf
    packages/backend/src/remote/activitypub/misc/ld-signature.ts
    packages/sw/package.json
    pnpm-lock.yaml
Please commit your changes or stash them before you merge.
error: The following untracked working tree files would be overwritten by merge:
    packages/sw/webpack.config.js
Please move or remove them before you merge.
Aborting

粗暴简单地删除了所有冲突文件(不成功便成仁):

cp calckey.nginx.conf /home/usr/old-file/ #唯一记得备份了的文件
rm calckey.nginx.conf
rm packages/sw/webpack.config.js
rm packages/backend/src/remote/activitypub/misc/ld-signature.ts
rm packages/sw/package.json
rm pnpm-lock.yaml

重新 pull 文件成功。

升级依赖包:

corepack enable
pnpm i

覆盖并编辑新 config 文件,基本上没什么变动,改了一下数据库的名字:

cp .config/example.yml .config/default.yml
sudo vim .config/default.yml

新 nginx config 文件:

sudo cp ./firefish.nginx.conf /etc/nginx/sites-available/ && cd /etc/nginx/sites-available/
sudo vim firefish.nginx.conf
sudo ln -s ./firefish.nginx.conf ../sites-enabled/firefish.nginx.conf
sudo nginx -t

记得把/etc/nginx/sites-available//etc/nginx/sites-enabled/里的旧文件删掉,改文件名应该也没问题不过安全起见直接写了新的。检查配置文件时报错:40: Too many levels of symbolic links,看了N个网站以后:可能是相对路径有问题(天知道为什么)。手动把之前链接的文件删掉,再把命令改成:

sudo ln -s /etc/nginx/sites-available/firefish.nginx.conf /etc/nginx/sites-enabled/firefish.nginx.conf

用绝对路径验证就没问题了。

最后就可以开始 build 和 migrate(官方这里的命令竟然把build打错了呃呃呃救命):

NODE_ENV=production pnpm run build
NODE_ENV=production pnpm run migrate

Migrate 的时候 redis 好像一直在报错,重启了一下,现在想想好像是因为之前被我关掉后根本就没有在运行。成功之后先用基础命令跑起来运行一下:NODE_ENV=production pnpm run start log 看起来没有问题但打开网站的时候显示 offline 推测是 nginx 没有在正确运行,又重启一下 nginx(然后才发现也根本就没有在运行呵呵):sudo systemctl restart nginx

之后的正式启动想一步到位所以就去修改了启动 daemon。把旧的 calckey.service 关闭:

cd /etc/systemd/system/
sudo vim firefish.service
sudo systemctl disable calckey.service
sudo systemctl daemon-reload
sudo systemctl enable firefish
sudo systemctl start firefish

Bruh,华丽失败,只好用普通的NODE_ENV=production pnpm run start先跑起来看看,这次终于正常运行了!systemd service换了好多种方式最后都没法像之前一样正常运行,有可能是因为升级/重装搞坏了 npm 和 pnpm 的路径,总是在报错无法找到可执行文件,一直是 203 或 127 error,尝试了各种 debug 方法也没有成效。最后只好屈服使用官方的启动方法 pm2(根本不知道在倔什么):

npm i -g pm2
pm2 install pm2-logrotate
pm2 start "NODE_ENV=production pnpm run start" --name Firefish

之后在/home/user/.pm2里可以查看 log 文件,也可以使用pm2 logs,但发现竟然没有时间,于是使用了重启来添加timestamppm2 restart Firefish --time 再看log就有时间了,这样升级也终于算是告一段落。

新的 UI 觉得没有旧的好看,但总体来说还是比长毛象好看(开始拉踩)。比较让人困扰的是学了长毛象在每个时间轴上方都新加了对当前轴范围的解释,然而因为我用的是隐身窗口导致每次登录都会显示提示,关掉也没用。怪烦人的……有空看看能不能用 custom css 解决(或者考虑直接改代码)。意外的是中继的问题被升级解决了,虽然根本就 no idea how,不过解决了就好了嘎嘎嘎嘎嘎。希望 Firefish 这个 fork 可以长久,至少不要在我离开 fedi 之前停止支持 😇

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注