备份你的服务器
设置日常备份(可选,但并非如此)
对于任何真实世界用途来说,你都应该保证日常备份Mastodon服务器。
概览
你所需要备份的东西,按重要程度排序:
- PostgreSQL 数据库
.env.production
文件或等效文件中的应用密钥- 用户上传的文件
- Redis 数据库
故障模式
人们通常要应对两种类型故障:硬件故障,诸如磁盘上数据损坏;以及人为软件故障,诸如误删特定文件。本文档中,仅考虑前一种类型。
丢失PostgreSQL数据库,那一切都完了。Mastodon将所有重要数据存储于PostgreSQL数据库中。如果数据库消失,那你服务器上所有的帐户、所有的嘟文、所有关注者都将随之消失。
如果你丢失了应用密钥,对你的用户而言,Mastodon的某些功能将停止工作。你服务器上的用户将被登出,双因子认证(2FA)将不可用,Web Push API订阅将停止工作。
如果你丢失了用户上传的文件,你将丢失头像、横幅、媒体附件,但Mastodon仍会继续工作。
丢失Redis数据库几乎是无害的:唯一不可逆的数据是Sidekiq队列及之前失败任务的重试计划。主页与列表时间流虽然存储于Redis,但它们可以使用tootctl再生成。
最好的备份是所谓的异地备份,即与Mastodon自身不在同一台计算机上存储的备份。如果你托管的服务器起火了,硬盘爆炸了,存储于同一硬件备份将不可用。
备份应用密钥
应用密钥是最容易备份的,因为它们是不变的。你只需要将 .env.production
存储在安全的地方就可以了。
备份 PostgreSQL
突然断电、硬盘故障、错误迁移数库库schema都会致使数据损坏。由于以上原因,推荐偶尔使用 pg_dump
或 pg_dumpall
备份数据库。
如果要求高可用性,可以使用热流拷贝(hot streaming replication)使第二台PostgreSQL服务器始终具有最新数据,并做好另一台服务器出现故障切换至此的准备。
备份用户上传的文件
如果你使用外部对象存储,诸如Amazon S3、Google Cloud 或 Wasabi,你无需为怎么备份它们而担心。各自的公司将负责处理硬件故障。
如果你使用本地文件存储,复制体积巨大的 public/system
目录(默认存储上传文件的地方)。
备份 Redis
备份Redis是很容易的。Redis会定期将数据写入/var/lib/redis/dump.rdb
文件,你只需要复制这个文件就可以了。