长毛象 Mastodon 建站指南 | 第七章:定期异地备份数据库和关键配置

隐私建议

首先,在配置异地备份前,建议先完善站点规则,向用户明确披露数据的留存期限,即用户删除账户后,TA的数据仍会因为备份文件的存在而被留存一段时间。

创建备份专用 Bucket

依然以 Scaleway 为例,创建一个专用于存储备份的 Bucket:

由于本教程使用 Rclone 进行备份,除了使用 Scaleway 之外,你可以使用其他云存储服务,如 Google Drive, OneDrive 等等。详见官方文档:https://rclone.org/docs/

安装与配置 Rclone

在长毛象服务器 SSH 中,运行以下命令安装 Rclone:

curl <https://rclone.org/install.sh> | sudo bash

运行配置命令:

rclone config

新建配置,起一个 Rclone 配置名称:

选择存储服务商:

配置密钥:

保存配置:

保存配置后,输入 q + 回车,退出配置。

运行以下命令列出储存桶下的文件目录,如果没有报错,则代表配置成功:

rclone lsd 配置名称:储存桶名称

配置备份脚本

新建目录,用于存放备份脚本。

mkdir /opt/mastodon-backup/
mkdir /opt/mastodon-backup/logs

编辑 backup.sh

nano /opt/mastodon-backup/backup.sh

写入以下内容:

#!/bin/bash

# Save this file at  /opt/mastodon-backup/backup.sh
# Set a cronjob:  0 19 * * * /bin/bash /opt/mastodon-backup/backup.sh > /opt/mastodon-backup/logs/backup.log 2>&1

#Get the relative path of the backup script
backup_script=$(dirname "$realpath $0")

#Loading the Config
source $backup_script/config.sh

#Clean up old db dump
rm /home/mastodon/live/dbbackup-*

#Generating a database dump backup
su - mastodon -c "cd /home/mastodon/live && pg_dump -Fc mastodon_production > dbbackup-$(date +"%Y_%m_%d_%I_%M_%p").dump"

#Loading the rclone password
#export RCLONE_CONFIG_PASS=$rclone_config_pass

#Moving the database backup
rclone move /home/mastodon/live/dbbackup-* $rclone_config_name:$s3_bucket_name/$backup_folder_name

#Copying important files
rclone copy /home/mastodon/live/.env.production $rclone_config_name:$s3_bucket_name/$backup_folder_name
rclone copy /var/lib/redis/dump.rdb $rclone_config_name:$s3_bucket_name/$backup_folder_name
rclone copy /etc/nginx/sites-available/ $rclone_config_name:$s3_bucket_name/$backup_folder_name
rclone copy /etc/elasticsearch/jvm.options $rclone_config_name:$s3_bucket_name/$backup_folder_name
    
#Remove dump files
rm /home/mastodon/live/dbbackup-*

编辑完成后,使用 ctrl + X 退出,按 Y 、回车保存。

编辑 config.sh

nano /opt/mastodon-backup/config.sh

写入以下内容,并替换:

  • scaleway 替换为你的 Rclone 配置名称
  • yourbucketname 替换为你的 Bucket 名称
#!/bin/bash

# Save this file at  /opt/mastodon-backup/config.sh
# Replace the values below with your S3 config

rclone_config_name="scaleway"
# rclone_config_pass="yourpassword"
s3_bucket_name="yourbucketname"
backup_folder_name="$(date +"%Y_%m_%d_%I_%M_%p")"

编辑完成后,使用 ctrl + X 退出,按 Y 、回车保存。

运行一次,然后在 Scaleway 面板中查看是否出现了备份文件,检查是否成功备份:

bash /opt/mastodon-backup/backup.sh > /opt/mastodon-backup/logs/backup.log 2>&1

如果遇到错误,可以查询备份错误日志排查问题:

cat /opt/mastodon-backup/logs/backup.log

配置定期备份

编辑定时任务:

crontab -e

写入以下内容,则备份任务会在每天服务器时间的 3:00 执行备份任务

0 3 * * * bash /opt/mastodon-backup/backup.sh > /opt/mastodon-backup/logs/backup.log 2>&1

编辑完成后,使用 ctrl + X 退出,按 Y 、回车保存。

你可以使用 crontab.guru 这个网站来检查定时任务的命令是否写对了。

https://crontab.guru/#0_3_*_*_*

定时备份任务配置完成。

循环销毁备份文件

利用 Scaleway 的 Lifecycle rules,可以简单实现备份文件的保留时限。

创建一个 Lifecycle Rule,随便起一个名字:

Transition 可不设置,留空:

Configure Expiration Options 设置为 7 天,则备份数据会保留 7 天,过期自动删除。

规则创建完成。

本章节完。