Mastodon | 把实例塞进另一台冰箱需要几步?

1860字

2023年Contabo修改了收费策略,续费周期变为了按月扣款(写邮件过去可以按年付),同时每月涨价了1欧,从4.99欧变为了5.99欧。

涨价,加上去年几次Contabo断线,我在想:要不换个商家吧?

正好过了年纯之来问我,他开了个独服,想找人平摊费用,配置差不多,价格可以下来一点,很有诱惑力,加上他说可以手把手教我迁移实例,心动不如行动,踩坑就在当下!

以下站点迁移过程仅为自用笔记和踩坑记录,我比一年前也没什么长进,全靠朋友一步步教,很多地方不太懂发生了什么,只是如实记录过程,供未来有需求时查阅。

理清思路就出发,提站跑路——

我的Mastodon实例使用Docker安装,到新机器当然也不变,于是基本迁移思路还是蛮简单的:

  1. 在旧机器上打包整个旧实例
  2. 用rclone把旧站点同步到储存服务上
  3. 在新机器上下载并解压旧实例
  4. 迁移旧站点的.env.production文件,并重新配置nginx
  5. 在CouldFlare上定向到新的服务器IP

把实例装进冰箱需要几步

同步服务选用的是OneDrive,申请E5开发计划之后有5T的容量,足够做临时性的迁移使用。具体步骤可以参考如下文章:免费申请office E5开发者订阅,附无限续期+私人网盘教程

暂时不考虑续期,所以按文章步骤设置完5T网盘容量就可以了。

我的Mastodon实例目录在/opt/mastodontar -zcvf /opt/mastodon mastodon.tar.gz打包整个实例为mastodon.tar.gz。执行这一步前最好把实例的各种外站媒体之类的清理一下,否则整个过程会很慢。
——就是说我为什么清理完了打包一看有整整50G啊,Mastodon有这么恐怖吗?

打包完实例后,安装rclone,并用rclone将压缩包上传至OneDrive,参考:利用 Rclone备份 VPS 数据到 onedrive

虽然但是,我在授权时疯狂报错
最后纯之给我做了一份配置好的文件,直接复制粘贴使用了……

rclone config file //查询配置文件地址
Configuration file is stored at:
/root/.config/rclone/rclone.conf>)
nano /root/.config/rclone/rclone.conf //编辑配置文件

设置好之后rclone config看一下,显示:

Current remotes:

Name                 Type
====                 ====
mastodon             onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> 

同步命令:

rclone copy -v --stats 5s /opt/mastodon/mastodon.tar.gz mastodon:/

…………50个G传了整整3个半小时。

把大象搬出冰箱需要多久

来到新机器,安装Docker,安装Docker-compose,安装Nginx,安装rclone,噼里啪啦一顿下载之后,按上面的办法也配置一份rclone,之后下载OneDrive中的mastodon.tar.gz到根目录/下。

rclone copy -v --stats 5s  mastodon:/mastodon.tar.gz /
cd / //跳转到根目录
tar -zxvf mastodon.tar.gz //解压mastodon.tar.gz

解压后的文件会依然在/opt/mastodon

复制旧站点的.env.production文件,编辑到新站点之中

cd /opt/mastodon
nano .env.production

把服务up起来看一下容器迁移情况如何,显示healthy就可以继续下一步

docker-compose up -d
docker ps

Nginx,你到底有几个坑

理论上这件事很简单:复制一下旧机器的Nginx配置文件,注释掉证书相关的内容,重新申请证书,实际上:

回合1:

nginx -t提示no "ssl_certificate" is defined for the "listen … ssl" directive in
翻阅各种issue之后,根据这个讨论猜测是因为新安装的nginx版本比较新,有些写法现在不被允许(当然不对,而且我后来去官方仓库找了nginx配置示例,更新于两个月前)
于是我注释掉了如下三行,nginx -t后显示successful。重新申请证书。

  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name 站点域名;

回合2:

站点将您重定向的次数过多
站点将您重定向的次数过多
站点将您重定向的次数过多
站点将您重定向的次数过多

抖动程度代表我的精神污染程度。

搞定这件事……我当然搞不定啦,总之研究了很多办法,后来纯之说是和回合1是同一个毛病:

ssl证书路径有问题:

 # Uncomment these lines once you acquire a certificate:
 # ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
 # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

先找了一个没用的证书让它运行起来,之后再重新申请证书,然后certbot申请的证书会自动替换。

回合3:

APP能顺利连上站点,但是网页只显示站点Logo,CSS下不来。

根据All CSS / JS Not Being Passed Client Side,猜测是授权问题,尝试chmod +x /opt/mastodon,无效;猜测需要重新构建缓存,在CF上清除缓存;无效,猜测是CF配置问题,检查了是否打开了CF上的Auto Minify,但设置是正确的。

最后根据pollopen新更新的内容,发现Nginx配置文件需要新修改一个地方:

try_files $uri =404;修改为try_files $uri @proxy;,复制到服务器中保存。

好在现在站点能顺利访问了,谢天谢地……

你也想跳迪斯科吗?

文中的文字抖动效果来自开源项目:CSShake