使用 rclone 备份 mastodon 数据

数字玩具 2022年01月27日 16:12

服务器有时间限制 Orz,万一哪天忘记续费全部木大完蛋。还是早点做个备份好。毕竟上面写了蛮多东西也不想丢弃。(想起 QQ 上写好多说说,当年….. 啊 黑历史 之后看见写的简直无语凝噎,都是无病呻吟的一些什么鬼东西啊!😧

准备

安装好 rclone已经配置完 mastodon ps:当然看着教程随便设置同步位置也可以的

编写备份脚本

注意 : 这是源代码模式安装 Mastodon 后的执行备份脚本,因为最近迁移至 Docker-Arm64,所以重新写了下 Docker 下的备份脚本,在下面。

编辑 backup.sh

1
sudo nano /opt/onedrive_thy/mastodon-backup/backup.sh

Copy

我直接放在 Onedrive 的 mastodon 备份目录下咯

写入下面这么多东西:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash

# Save this file at  /opt/onedrive_thy/mastodon-backup/backup.sh
# Set a cronjob:  0 19 * * * /bin/bash /opt/onedrive_thy/mastodon-backup/backup.sh > /opt/onedrive_thy/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:$onedrive_folder_name/$backup_folder_name

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

Copy

编写完成后使用 Ctrl+X 退出,按 Y 保存。

  • PS : 因为我没有开全文搜索引擎 elasticsearch 所以注释掉咯
  • PSS : 每个人的路径不一样,自己找找呗 😆

编辑 config.sh

1
sudo nano /opt/onedrive_thy/mastodon-backup/config.sh

Copy

写入以下内容:

1
2
3
4
5
6
7
8
9
#!/bin/bash

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

rclone_config_name="thy_disk"
# rclone_config_pass="yourpassword"
onedrive_folder_name=Data/Linux/VPS/Backups/TencentCloud/mastodon-backup
backup_folder_name="$(date +"%Y_%m_%d_%I_%M_%p")"

Copy

编写完成后使用 Ctrl+X 退出,按 Y 保存。

脚本检查

全部编写完成后运行一次:

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

Copy

这一步会卡一会儿执行程序,在执行完成后查询日志 :

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

Copy

或者直接登录网页或者 win 上的 Onedrive 查看(这好方便!

配置定期备份

编写定时任务:

1
crontab -e

Copy

写入下面这一坨,以后每天的凌晨 5 点(5 点不是凌晨了叭)自动执行备份任务:

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

Copy

编写完成后使用 Ctrl+X 退出,按 Y 保存。

Docker 下的备份脚本 | 2022-02-18 update

首先要明确自己需要备份哪些内容

按照优先级如下分类

  • .env.production 文件
  • 数据库备份
  • 嘟文图片
  • 站点图片
  • 外站数据

编写脚本 mastodon-docker-backup.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
#Get the relative path of the backup script
backup_script=$(dirname "$realpath $0")

#Loading the Config
#source $backup_script/config.sh

rclone_config_name="thy_disk"
# rclone_config_pass="yourpassword"
onedrive_folder_name=Data/Linux/VPS/Backups/OracleCloud/mastodon-backup
backup_folder_name="$(date +"%Y_%m_%d_%I_%M_%p")"

mastodon_folder=/home/mastodon/mastodon
#docker ps | grep mastodon_db | awk '{print $1}'
nowtime=$(date +%F)
SQL_FILE=sql_$nowtime.dump

cp ${mastodon_folder}/.env.production ${mastodon_folder}/backup/.env.production 

#Clean up old db dump
rm ${mastodon_folder}/backup/sql*

#Generating a database dump backup
cd ${mastodon_folder} && docker exec -it  mastodon-db-1 /bin/bash -c "pg_dump -U postgres -Fc mastodon_production -f /home/${SQL_FILE}" && docker cp mastodon-db-1:/home/${SQL_FILE} ${mastodon_folder}/backup/${SQL_FILE}

rclone move ${mastodon_folder}/backup/${SQL_FILE} $rclone_config_name:$onedrive_folder_name/$backup_folder_name

rclone copy ${mastodon_folder}/.env.production $rclone_config_name:/$onedrive_folder_name/$backup_folder_name

rclone copy ${mastodon_folder}/redis/dump.rdb $rclone_config_name:/$onedrive_folder_name/$backup_folder_name

echo 'OK'

Copy

因为暂时对图片备份没有需求所以先咕咕 (太大了叭!!

完成咯

这写完之后,大概服务器上任意什么位置的文件都可以使用 Onedrive 来备份了叭。尤其是我那些经常忘记的小容量 VPS 上的文件,那天不注意就没了。

赞美巨硬!!🎉🎉🎉

标签

吕楪

博主.本博客的所有者,一切的开始。