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

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
Cisco Talos Blog
Cisco Talos Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The GitHub Blog
The GitHub Blog
GbyAI
GbyAI
L
LangChain Blog
Vercel News
Vercel News
博客园 - 叶小钗
MongoDB | Blog
MongoDB | Blog
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
T
Threat Research - Cisco Blogs
T
Threatpost
Scott Helme
Scott Helme
T
Tailwind CSS Blog
Latest news
Latest news
Stack Overflow Blog
Stack Overflow Blog
Blog — PlanetScale
Blog — PlanetScale
The Register - Security
The Register - Security
罗磊的独立博客
P
Proofpoint News Feed
腾讯CDC
S
Schneier on Security
雷峰网
雷峰网
A
About on SuperTechFans
T
Tenable Blog
F
Full Disclosure
Cyberwarzone
Cyberwarzone
博客园_首页
有赞技术团队
有赞技术团队
K
Kaspersky official blog

eallion's Blog

春假清明自驾游 Ubuntu 25.10 安装和配置 秋假 彩礼 2025 博客变化 预制菜 联邦礼仪之一 重拾写博客的乐趣 少儿 TED - 时间管理大师 n8n 之同步博客到 Mastodon n8n 之备份 Mastodon 嘟文 Docker 部署 Mastodon NAS 折腾记 Windows 11 安装软件
如何备份 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 的数据到云存储中,确保数据的安全性和可靠性。备份脚本可以根据实际需求进行调整,比如添加更多的目录备份、修改备份频率等。