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

推荐订阅源

G
GRAHAM CLULEY
T
Tenable Blog
Know Your Adversary
Know Your Adversary
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Privacy International News Feed
S
Security Affairs
NISL@THU
NISL@THU
O
OpenAI News
Attack and Defense Labs
Attack and Defense Labs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Schneier on Security
Schneier on Security
S
SegmentFault 最新的问题
S
Schneier on Security
G
Google Developers Blog
V
V2EX
C
Check Point Blog
U
Unit 42
Google DeepMind News
Google DeepMind News
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
T
The Exploit Database - CXSecurity.com
Recent Announcements
Recent Announcements
M
MIT News - Artificial intelligence
S
Secure Thoughts
博客园 - 司徒正美
Recorded Future
Recorded Future
P
Proofpoint News Feed
Spread Privacy
Spread Privacy
K
Kaspersky official blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
AI
AI
博客园 - 聂微东
N
News and Events Feed by Topic
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
Recent Commits to openclaw:main
Recent Commits to openclaw:main
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
Project Zero
Project Zero
W
WeLiveSecurity
博客园 - Franky

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 再看《星际穿越》 实感 自部署 GitHub 风格的 Reactions 点赞功能 图床 CDN CNAME 接入 Cloudflare SaaS 实现分流 利用 GitHub Actions 同步对象存储 留给孩子一个完整的母亲 博客 AI 摘要及优化 豆瓣同步到 Notion 和 Neodb NeoDB API 创建观影页面 Artalk 无评论随机显示诗词 孙燕姿关于AI孙燕姿的回复 Windows 安装 Rime 小狼毫五笔拼音输入法 Umami Docker 部署及优化 去有风的地方 非 24 小时睡眠觉醒障碍 Memos API 获取总条数 Memos API 公告样式滚动效果 Memos API 调用渲染页面 Memos 手动导入数据 Memos 简介 凉城利川·避暑旅居胜地(附 CCTV 报道) 珊瑚鱼 读《中文大约的确已经死了》 再说评论 且试天下 记一次博客被攻击 Hugo .GitInfo 的替代方案 Gitea 安装备忘 Twikoo 集成 Slimbox2 灯箱插件 童心皆可爱 减肥小结 白粽肉粽及端午快乐安康 劳动合同解除 (终止) 及赔偿一览表 启用 Waline 静态博客评论系统的选择 好好说话 KMS Windows 激活服务器 Ubuntu 20.10 优化 关于 Ubuntu Ubuntu ZFS 原生全盘加密 Ubuntu ZFS 加密 Home 目录 爱丽丝梦游仙境症 偶发 月半 Ubuntu 20.04.1 配置 LNMP 本地环境备忘 佛性写博 Ubuntu 20.04 优化 免费领取咪咕版 Kindle Typecho 迁移到 Hugo 博客迁移到 Hugo GitHub Actions 自动部署 Hexo 脚本 Gridea Hexo Hugo 等 git push 同步到多个仓库 Ubuntu 19.10 优化 Typecho 中英文之间自动加上空格 Ubuntu 配置 EverVim Ubuntu 配置 Guake Ubuntu 配置 Oh-My-Zsh 阿里云镜像改版 备份工具 Duplicati Ubuntu Server snap 安装 Nextcloud Ubuntu Server 安装 Mosh 算命 言论自由 无意义的个性化 「我谈的话题没什么敏感的」 博客换回默认主题 typecho1.2 (18.10.23) 新窗口打开链接 一言 APP 添加 “今日诗词” 官方源 api 让 Firefox 只在新标签页 newtab 显示书签栏 爱子七不责 改革开放 40 年 大民大国 40 年 40 本书
如何备份 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 的数据到云存储中,确保数据的安全性和可靠性。备份脚本可以根据实际需求进行调整,比如添加更多的目录备份、修改备份频率等。