用duplicacy备份Pleroma

前言

备份原理

备份什么

  • 上传的文件:/var/lib/pleroma/upload
  • 静态文件:/var/lib/pleroma/static
  • 数据库:pleroma.pgdump
  • 配置文件:/etc/pleroma/config.exs

参考:Backup/Restore/Move/Remove your instance - Pleroma Documentation

如何备份

  • Pleroma 停机后,备份数据库
  • tar 结合gzip 压缩打包 static/uploads/文件夹
  • 复制配置文件config.exs
  • duplicacy 将所有本地备份内容上传至 S3 存储中
  • expect脚本在 duplicacy 备份过程中自动输入

备份准备

  • 确定上述备份内容的所在位置
  • 创建一个备份存放的文件夹并进入:
    bash
    sudo mkdir /opt/pleroma-backup && cd /opt/pleroma-backup
  • *安装 expect
    bash
    sudo apt-get install tcl tk expect
  • *安装 duplicacy,详见 Duplicacy CLI 备份工具基本使用笔记

备份流程

我是在 root 用户下操作的

1. *初始化 duplicacy

在开始之前,确保按照安装好了 duplicacy,然后进入到备份文件夹中(下为/opt/pleroma-backup),

这里设置 duplicacy Snapshot ID 为 pleroma,bucket 名为pleroma

bash
# contabo storage
sudo duplicacy init -e pleroma s3c://[email protected]/pleroma

然后输入密码,如 1234

我所用的是 Contabo storage,比较推荐 Cloudflare 的 R2,但我尚不清楚如何配置……

其他平台的配置参考: Supported storage backends - How-to - Duplicacy Forum

2. 获取备份脚本

从 Github 获取并解压:

bash
sudo curl -L https://github.com/Sevichecc/pleroma-backup-script/releases/download/1.0.1/backup-script.zip -o backup-script.zip
sudo unzip backup-script.zip
sudo rm -rf backup-script.zip

3. 修改设置

bash
sudo vim .env

其中:

  • PLEROMA_DB: pleroma 数据库的名字
  • PLEROMA_PATH: pleroma 静态文件的位置,下面应该会有staticuploads 文件
  • PLEROMA_CONFIG_PATH: pleroma 设置文件的位置
  • BACKUP_PATH:备份文件夹的位置

以下为默认值:

bash
PLEROMA_DB=pleroma
PLEROMA_PATH=/var/lib/pleroma
PLEROMA_CONFIG_PATH=/etc/pleroma/config.exs
BACKUP_PATH=/opt/pleroma-backup

4. *设置 duplicacy

打开duplicacy 脚本:

bash
sudo vim duplicacy.sh

在引号内填入自己的各项配置:

bash
set ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
set SECRET_ACCESS_KEY "YOUR_SECRET_ACCESS_KEY"
set PASSWORD "YOUR_PASSWORD"

下面这段表示的是用duplicacy prune -keep 7:30设置了对于超过 30 天的版本,每 7 天保留一次新版本。

如果需要的话,删掉前面的注释,如:

bash
##### (optional) Keep a revision every 7 days for revisions older than 30 days
expect "completed"
spawn duplicacy prune -keep 7:30
expect "ID"
send "$ACCESS_KEY_ID\r"
expect "Secret"
send "$SECRET_ACCESS_KEY\r"
expect "password"
send "$PASSWORD\r"

最后,给 duplicacy 备份脚本执行权限

bash
sudo chmod +x duplicacy.sh

3. 运行脚本

bash
sudo bash backup.sh

4. 定时备份

用 crontab 设置定时运行该脚本,这里设置的是每 7 天备份一次,如果还没有 crontab 的话,需要安装一下,这里不再赘述

编辑 crontab 任务:

bash
sudo crontab -e

添加下面这行

bash
0 1 */7 * * root /bin/bash /opt/pleroma-backup/backup.sh

保存退出。

停机通知 bot

创建了一个简单的停机 bot,在停机备份前 1 小时发嘟提醒

安装依赖:

sudo pip3 install requests beautifulsoup4 Mastodon.py

创建 bot:

bash
sudo vim bot.py

写入:

py
#!/usr/bin/python
from mastodon import Mastodon
Mastodon.create_app(
'backupbot',
api_base_url = 'https://your_pleoma_instance.com',
to_file = 'backupbot_clientcred.secret'
)
mastodon = Mastodon(
client_id = 'backupbot_clientcred.secret',
api_base_url = 'https://your_pleoma_instance.com'
)
mastodon.log_in(
'bot_account_username',
'bot_account_password',
to_file = 'backupbot_usercred.secret'
)
mastodon = Mastodon(
access_token = 'backupbot_usercred.secret',
api_base_url = 'https://your_pleoma_instance.com',
feature_set = 'pleroma'
)
mastodon.status_post('各位居民们,很抱歉,1小时后将停机备份10分钟,喝杯咖啡稍等一下吧~:cafe_cappucino:')

其中

  • api_base_url:实例 URL
  • bot_account_username : bot 登录的用户名
  • bot_account_password :bot 登录密码

设置定时:

bash
sudo crontab -e
bash
0 0 */7 * * cd /opt/pleroma-backup && python3 bot.py

然后就做完了!

参考:

%sveltekit.body%