惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
博客园 - 司徒正美
A
About on SuperTechFans
Vercel News
Vercel News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
爱范儿
爱范儿
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
F
Fortinet All Blogs
S
SegmentFault 最新的问题
阮一峰的网络日志
阮一峰的网络日志
D
Docker
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
H
Help Net Security
量子位
IT之家
IT之家

eallion's Blog

春假清明自驾游 Ubuntu 25.10 安装和配置 秋假 彩礼 2025 博客变化 预制菜 联邦礼仪之一 重拾写博客的乐趣 少儿 TED - 时间管理大师 n8n 之同步博客到 Mastodon n8n 之备份 Mastodon 嘟文 Docker 部署 Mastodon NAS 折腾记 Windows 11 安装软件 博客排版 - 挤压中文标点符号 Hugo 博客集成 Mastodon 独立博客自省问卷 15 题 Chrome 插件更新:网址净化器 在 Hugo 中使用 Shiki 炒菜万能公式 uBlacklist 订阅合集 读《中文互联网正在加速崩塌》 CSS 和 JS 实现博客热力图 受灾小记 那,他吃什么?! Mastodon 同步到 Memos Hugo 外部链接跳转提示页面 联邦宇宙及 Mastodon 简介 2024 博客变化 部署动态生成 OG Image 的 API
如何备份 Mastodon
Charles Chin · 2025-06-09 · via eallion's Blog

# 前言

Docker 部署 Mastodon》介绍了如何使用 Docker 部署 Mastodon,现在来分享一下我如何备份 Mastodon。

有一些面板带有备份功能,但我不喜欢用面板,面板也会占用额外的资源,也可能存在安全隐患,所以我使用了命令行来备份 Mastodon。

# 备份方案

  • 备份工具:我用的是 rclone,也可平替为其他同步工具
  • 备份目的地:rclone 支持的目的地,我同时备份到 COS 和 R2
  • 备份内容:Mastodon 的 PostgreSQL 数据库和其他需要备份的目录
  • 备份频率:通过 cron 定时执行

# 安装配置 Rclone

  1. 安装 Rclone,参考: https://rclone.org/install/
  2. 生成 Rclone config

Rclone 生成 Config 很简单,输入 rclone config 基本上就是一路选择或者保持默认就可以了。
以配置腾讯云 COS 为例,需要手动输入的是: access_key_id secret_access_key

最终会得到一份这样的 Config 文件:

[B2]
...

[R2]
...

[COS]
type = s3
provider = TencentCOS
access_key_id = idididid
secret_access_key = keykey
endpoint = cos.ap-nanjing.myqcloud.com

通过命令 rclone config paths 可以查看这个 Config 保存在什么位置。
一般保存在 ~/.config/rclone/rclone.conf

# 备份脚本

以下是一个简单的备份脚本,保存为 /home/debian_username/mastodon_backup.sh,注意阅读脚本中的注释,修改相关路径和配置:

#!/bin/bash

# 设置需要备份的其他目录(绝对路径)
backup_dirs=(
	"/home/debian_username/docker/certimate:certimate"
	"/home/debian_username/docker/n8n:n8n"
)

# 同步的目的地,必须和 rclone.conf 配置的远程存储名称样同
remotes=("COS" "R2")
# 设置云存储桶名称
# 腾讯云 COS 的存储桶带有 APPID:mastodon-backup-1251444444
# 可以把其他平台的存储桶名称改为和腾讯云一样的格式
bucket_name="mastodon-backup-1251444444"

# 设置 Mastodon 备份文件名,临时使用,不重要
pg_dump_file="mstd_pg_backup.dump"

# 设置日期时间格式(示例:20231010-123045)
datetime=$(date +"%Y%m%d-%H%M%S")

# ================================================================

# 备份 PostgreSQL 数据库
# 备份前是否优化数据库(可选)
# docker exec mastodon-db-1 psql -U postgres -d postgres -c "VACUUM;"
# docker exec mastodon-db-1 psql -U postgres -d postgres -c "ANALYZE;"
# docker exec mastodon-db-1 pg_repack -U postgres -d postgres
docker exec mastodon-db-1 pg_dump -Fc -U postgres postgres > "${pg_dump_file}"
backup_dirs+=("${pg_dump_file}:pgsql")

# 创建备份文件
backup_files=()
for item in "${backup_dirs[@]}"; do
	dir=$(echo "$item" | cut -d':' -f1)
	prefix=$(echo "$item" | cut -d':' -f2)
	backup_file="${prefix}+${datetime}.tar.gz"

	if [[ "$prefix" == "pgsql" ]]; then
		# 处理PostgreSQL备份文件
		if [[ -f "$dir" ]]; then
			tar -czf "${backup_file}" -C "$(dirname "$dir")" "$(basename "$dir")"
			rm -f "${dir}"  # 删除临时导出的dump文件
			backup_files+=("${backup_file}")
		else
			echo "Warning: PostgreSQL dump file '$dir' does not exist. Skipping..."
		fi
	else
		# 处理目录备份
		if [[ -d "$dir" ]]; then
			tar -czf "${backup_file}" -C "$(dirname "$dir")" "$(basename "$dir")"
			backup_files+=("${backup_file}")
		else
			echo "Warning: Directory '$dir' does not exist. Skipping..."
		fi
	fi
done

# 同步到云存储,如果有多个远程存储,则用 for 循环同步
for remote in "${remotes[@]}"; do
	for file in "${backup_files[@]}"; do
		rclone copy "${file}" "${remote}:${bucket_name}/"
	done
done

# 删除本地备份文件
rm -f *.gz

echo "Backup completed and synced to cloud storage!"

# 定时任务

将备份脚本添加到 cron 定时任务中,使用 crontab -e 命令编辑定时任务:

# 每天凌晨 2 点执行备份脚本
0 2 * * * timeout 2h /bin/bash /home/debian_username/mastodon_backup.sh >> /home/debian_username/mastodon_backup.log 2>&1

# 结语

通过以上步骤,可以定期备份 Mastodon 的数据到云存储中,确保数据的安全性和可靠性。备份脚本可以根据实际需求进行调整,比如添加更多的目录备份、修改备份频率等。