第一次因为改变域名,数据全部失效,重来用了几个月;第二次因为 VPS 故障,丢失 1 周数据,这还不算什么,但是配置文件我忽略没给自动备份,里的密码找不到,无法恢复实例;
累了,毁灭吧。
现在使用 memos 记录自己的简单日记了,因此 Mastodon 相关的文章都不会再更新,如果有失效的内容可以联系我,也许有空会更正。
本文 Mastodon维护 是另一篇文章的配套之作: Mastodon 原生安装步骤 – 技焉洲 (vfly2.com),介绍和具体使用方法请到:Mastodon 个人发布网络 – 技焉洲 (vfly2.com)
学会备份和迁移,不用再苦恼于 VPS 的费用和稳定度,轻松保障数据安全和迁移 Mastodon 实例到新的机器上。
备份
官网说明: Backing up your server – Mastodon documentation (joinmastodon.org)
需要备份的内容按重要性顺序:
- PostgreSQL 数据库。关于账户、密码、帖子、关注者等元信息,全在这里,丢失就意味着彻底结束了。
.env.production
文件,存有密码和其他设置的。这个一般不会有变化,可以在部署好后就保存到密码管理器中。- 媒体文件。只是不显示头像、媒体附件等,运作不受影响。
- Redis 数据库。丢失几乎无影响,可以不考虑。
在旧服务器上:
- 备份数据库。以 mastodon 用户运行下面命令
pg_dump -Fc mastodon_production -f backup.dump
- 备份媒体文件。媒体文件全在
/home/mastodon/live/public/system
,直接打包压缩,上传到其他地方即可。 - 这个可以不操作,除非你的实例有很多用户。Redis 定期写入
/var/lib/redis/dump.rdb
,备份这个文件就行。
自动备份的方法,其实写个脚本即可,请关注本站,将来会更新,毕竟这个是 AhFei 的需求。
更新
官网教程:Upgrading to a new release – Mastodon documentation (joinmastodon.org)
查看当前版本: 网站首页左下角就能看。
查看这个界面: Releases · mastodon/mastodon (github.com) ,了解版本更新说明,它会包含版本间的不同和更新时要注意的事项。
更新前,推荐先参考上面备份流程,备份一遍。
切换用户
su - mastodon
进入 Mastodon 根目录
cd /home/mastodon/live
下载发布的代码,具体的版本,在 Releases · mastodon/mastodon (github.com) 的发布说明中有,先看一遍这个说明。
git fetch && git checkout v4.x.x
如果你的版本较低,与最新版中间还隔着几个发行版,可以直接更新到最新版,但是要看一遍每个版本的发布说明。
继续看发布说明,根据上面的步骤执行更新 ,一般没几个命令。
根据发布说明的教程,执行过后,退回 root : Ctrl D
重启 background workers:
systemctl restart mastodon-sidekiq
重新加载 web process:
systemctl reload mastodon-web
reload
类似restart
,但不会下线,用restart
的话,服务会短暂的下线
streaming API server 更新后需要重启,但这么做会中断与所有客户端的连接,因此在重新上线后,会有一个峰值的客户端重连请求,对服务器来说,运行压力 load 也会迎来一个峰值
systemctl restart mastodon-streaming
尽量避免重启这个,如果发布说明上没要求就不必重启
迁移
官方教程: Migrating to a new machine – Mastodon documentation (joinmastodon.org)
总体流程:
- 首先,在新机器上走一遍安装流程 Mastodon 原生安装步骤 – 技焉洲 (vfly2.com),但是不要运行 mastodon:setup 那个命令
- 停止旧机器上的 mastodon:
systemctl stop 'mastodon-*.service'
- 导出 Postgres 数据库,复制媒体文件
system/
和配置文件.env.production
到新的服务器,具体流程在下面。
上面复制完数据后,注意权限和所有者。然后切换 mastodon 用户
su - mastodon
cd live/
- 运行
RAILS_ENV=production bundle exec rails assets:precompile
编译 mastodon - 运行
RAILS_ENV=production ./bin/tootctl feeds build
重建每个用户的 home timelines - 设置 Nginx,systemd,具体也是看 安装流程 Mastodon 原生安装步骤 – 技焉洲 (vfly2.com) 对应的小节
- 启动新机器上的 mastodon
迁移数据
必须要复制的文件有:
- Postgres 数据库
- 目录
~/live/public/system
,它包含了用户上传的媒体文件 (如果使用 S3 存储,这步可以省了) - 文件
~/live/.env.production
,包含服务端配置
非必须的文件:(可以不用管,重新弄就行)
- nginx 配置 (
/etc/nginx/conf.d/mastodon
) - systemd 配置文件,如果修改过 (
/etc/systemd/system/mastodon-*.service
) - pgbouncer 配置 under
/etc/pgbouncer
,没使用则不必
迁移数据库 Postgres
新、旧服务器都使用 mastodon 用户进行操作
su - mastodon
在旧服务器上,以 mastodon 用户运行下面命令
pg_dump -Fc mastodon_production -f backup.dump
在新服务器上,用 scp
或 rsync
复制 backup.dump
scp -P 22 mastodon@123.123.123.123:/home/mastodon/backup.dump ./
在新服务器上,以 mastodon 用户创建新的空的数据库:
createdb -T template0 mastodon_production
导入 backup.dump
:
pg_restore -Fc -U mastodon -n public --no-owner --role=mastodon \
-d mastodon_production backup.dump
注意,如果新服务器上的用户名不是 mastodon
,则应更改上面的 -U
和 --role
值。
没有任何输出就代表成功导入。
在迁移 Mastodon 实例时,使用
template0
数据库作为模板,手动创建一个空的 Postgres 数据库。template0
是 Postgres 中的一个特殊数据库,它是只读的,并且不包含任何自定义对象或设置。
这个方法在恢复 Postgres 数据库的时候特别有用。恢复数据库通常涉及使用pg_dump
命令创建的数据库备份。如果数据库中包含有自定义对象或设置,直接恢复到一个新数据库可能会遇到问题。
相关介绍: PostgreSQL: Documentation: 9.1: SQL Dump
迁移媒体文件和配置文件
文件多的话,一定要用 rsync
,我的实例就 AhFei 一人,就用 scp 了。
/home/mastodon/backup.dump ./
scp -P 22 mastodon@123.123.123.123:/home/mastodon/live/public/system /home/mastodon/live/public/
scp -P 22 mastodon@123.123.123.123:/home/mastodon/live/.env.production /home/mastodon/live/
可以看一下配置文件有什么
vim /home/mastodon/live/.env.production
原文链接: https://technique.vfly2.com/2023/11/maintenance-for-mastodon-backup-update-migration/
版权声明:本博客所有文章除特別声明外,均为 AhFei 原创,采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (technique.vfly2.com) 。
保持更新 ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的实用技能,欢迎使用 RSS 订阅,或在支持 ActivityPub 的平台关注 @vfly2tech@technique.vfly2.com
接收新文章的推送,如果能留言互动就更好了。
可在 Telegram 群组 https://t.me/vfly2 交流依文章步骤遇到的问题。