备份pleroma记录
目录
关于我不止一次炸过站这回事告诫了备份的重要性。
熟悉官方文档
参考文档: 官方文档
根据官方文档的说明,熟悉相关的命令。
- 暂停运行实例
su pleroma -s $SHELL -lc "./bin/pleroma stop"
- 创建备份文件夹并写入权限
mkdir /pleroma_backup
chmod 777 /pleroma_backup
- 将pleroma_db的数据库转储为某种自定义格式并保存到【2】的路径下
sudo -Hu postgres pg_dump -d pleroma_db --format=custom -f /ple_backup/pleroma.pgdump
- 将服务器内相关文件下载至异地 1
相关文件(夹)目录
转储后的数据库文件:/ple_backup/pleroma.pgdump
上传文件夹: /var/lib/pleroma/uploads
静态目录(文件夹): /var/lib/pleroma/static
配置文件:/etc/pleroma/config.exs
可登录实例的Admin-FE管理台页面,静态目录路径在Settings-Instance-Static dir
;上传目录在Settings-Upload-Pleroma.Uploaders.Local
中核对确认。
也可使用find / -name <file name>
在服务器中查询
- 重新启动pleroma服务
su pleroma -s $SHELL -lc "./bin/pleroma daemon"
备份至电脑(不推荐)
相关命令行
# 从远程服务器下载文件到本地
scp <用户名>@<ssh服务器地址>:<文件> <本地文件路径>
# 远程服务器下载文件夹到本地
scp -r <用户名>@<ssh服务器地址>:<文件夹名> <本地路径>
# 从本地上传文件到服务器上
scp <本地文件名> <用户名>@<ssh服务器地址>:<上传保存路径>
# 从本地上传文件夹到服务器上
scp -r <本地文件夹名> <用户名>@<ssh服务器地址>:<上传保存路径>
本地定时备份
感谢 @梦猫鱼 写的 用duplicacy备份Pleroma 教程,给了我很大的帮助。
新建并进入本地备份文件夹
mkdir /opt/local_backup
cd /opt/local_backup
创建本地备份脚本
sudo vim backup.sh
粘贴
#!/bin/sh
source /etc/profile
echo "————————————backup to local directory——————————" | tee -a /opt/local_backup/backuplog.txt
echo `date +"%Y-%m-%d %H:%M:%S"` "now starting backup" | tee -a /opt/local_backup/backuplog.txt
echo 'stop pleroma' | tee -a /opt/local_backup/backuplog.txt
sudo systemctl stop pleroma
echo "0.create a backup day directory" | tee -a /opt/local_backup/backuplog.txt
if [ -d /opt/local_backup/`date +%Y%m%d``date +%Y%m%d` ];then
echo "Floder" `date +%Y%m%d` "already exists."
else
mkdir /opt/local_backup/`date +%Y%m%d`
echo "New floder" `date +%Y%m%d` | tee -a /opt/local_backup/backuplog.txt
fi
chmod +777 /opt/local_backup/`date +%Y%m%d`
cd /opt/local_backup/`date +%Y%m%d`
echo "1.dump database" | tee -a /opt/local_backup/backuplog.txt
sudo -Hu postgres pg_dump -d pleroma --format=custom -f /opt/local_backup/`date +%Y%m%d`/pleroma.pgdump
echo "2. copy upload & static folder" | tee -a /opt/local_backup/backuplog.txt
cp -r /var/lib/pleroma/static /opt/local_backup/`date +%Y%m%d`
cp -r /var/lib/pleroma/uploads /opt/local_backup/`date +%Y%m%d`
echo "3. copy config file" | tee -a /opt/local_backup/backuplog.txt
cp /etc/pleroma/config.exs /opt/local_backup/`date +%Y%m%d`
echo "restart pleroma" | tee -a /opt/local_backup/backuplog.txt
sudo systemctl start pleroma
echo `date +"%Y-%m-%d %H:%M:%S"` "finished" | tee -a /opt/local_backup/backuplog.txt
echo "Backup for" `date +%Y%m%d` "done!" | tee -a /opt/local_backup/backuplog.txt
备注
- 大概思路是每次备份时,按日期创建子文件夹,把备份数据放在当日文件夹下
| tee -a filename
把输入数据同时打印在屏幕和指定文件上;这里我是在每行echo
后加上了,应该有更便捷的命令,我没再查了。不需要可以删去。 后续需要查看备份记录,可直接进入backuplog.txt
查看chmod 777 $BACKUP_DATA
不加这个总是报没有权限的错误2,暂时没找到好的解决方法。
- 另外新建了
clear.sh
脚本,用来删除超过15天的备份文件夹
find /opt/local_backup/ -type d -mtime +15 -exec rm -rf {} \;
手动跑的话,在脚本的存放目录运行 sudo bash xxxx.sh
。当然也可以用crontab执行定时任务。
- 设置定时任务
sudo crontab -e
粘贴
# 每周五3点运行备份脚本
00 03 * * 5 root /bin/bash /opt/local_backup/backup.sh
# 每月一号21点运行清除备份脚本
00 21 1 * * root /bin/bash /opt/local_backup/clear.sh
异地备份
异地备份参考的是这篇: Duplicacy CLI 备份工具基本使用笔记
安装expect
sudo apt-get install tcl tk expect
Duplicacy工具
安装Duplicacy CLI
sudo wget -O /opt/duplicacy https://github.com/gilbertchen/duplicacy/releases/download/v3.0.1/duplicacy_linux_x64_3.0.1
给予权限
sudo chmod +x /opt/duplicacy
创建软连接
sudo ln -s /opt/duplicacy /usr/local/bin/duplicacy
验证安装是否成功
duplicacy -h
注册OneDrive Personal
,获取
访问令牌文件one-token.json
,将文件放置/opt/remote_bakup/.duplicacy
目录下
初始化duplicacy仓库(注意使用目录)
sudo duplicacy init -e pleroma one://pleroma
Enter the path of the OneDrive token file (downloadable from https://duplicacy.com/one_start):
password for one:
- 需输入
one-token.json
的路径.duplicacy/one-token.json
-e
代表加密,输入密码: ********
备份同步
duplicacy backup -stats -threads 4
- 将仓库所在目录下的文件夹备份至OneDrive中
- 同样需要输入访问令牌文件路径及密码
写成脚本
把备份同步写成脚本,方便一键运行。
sudo nano dup.exp
粘贴
#!/usr/bin/expect -f
set TIME [ clock format [ clock seconds ] -format "%Y-%m-%d %H:%M:%S" ]
send_user "$TIME\n\r"
set TOKEN_FILE_PATH ".duplicacy/one-token.json"
set PASSWORD "********"
cd /opt/remote_backup
set timeout -1
spawn duplicacy backup -stats -threads 4
expect "path"
send "$TOKEN_FILE_PATH\r"
expect "password"
send "$PASSWORD\r"
##### (optional) Keep a revision every 7 days for revisions older than 30 d>
# expect "completed"
# spawn duplicacy prune -keep 7:30
# expect "the OneDrive token file"
# send "$TOKEN_FILE_PATH\r"
# expect "password"
# send "$PASSWORD\r"
expect eof
-
/r
指回车 -
从
#!/usr/bin/expect
至EOF
中的内容全部写入指定文件3:#!/usr/bin/expect -f<<-EOF log_file backup.log
-
因为想在expect脚本运行时也能把日期写入4:
set TIME [ clock format [ clock seconds ] -format "%Y%m%d%H%M%S" ] send_user "$TIME\n\r"
给运行权限
chmod +x dup.exp
expect dup.exp
尝试运行,无问题后,在备份脚本中加入运行指令
remote_backup.sh
#!/bin/sh
source /etc/profile
exec >> /opt/remote_backup/backup.log 2>&1
echo "————————————————————————backup to remote———————————————————————"
echo `date +"%Y-%m-%d %H:%M:%S"` "now starting local_backup"
echo 'stop pleroma'
sudo systemctl stop pleroma
echo "1.dump database"
chmod 777 /opt/remote_backup
sudo -Hu postgres pg_dump -d pleroma --format=custom -f /opt/remote_backup/pleroma.pgdump
echo "2. copy upload & static folder"
cp -r /var/lib/pleroma/static /opt/remote_backup/
cp -r /var/lib/pleroma/uploads /opt/remote_backup/
echo "3. copy config file"
cp /etc/pleroma/config.exs /opt/remote_backup/
echo `date +"%Y-%m-%d %H:%M:%S"` "finished local backups and start to remote backups"
/usr/bin/expect /opt/remote_backup/dup.exp
echo "restart pleroma"
sudo systemctl start pleroma
echo `date +"%Y-%m-%d %H:%M:%S"` "DONE"
其中也优化了一下输出重定向:
exec >> /opt/remote_backup/backup.log 2>&1
将标准错误输出、标准输出重定向到指定文件中
Crontab定时命令
在crontab中加入命令,定时跑remote_backup.sh
# 每周四20点
0 20 * * 4 root /etc/profile;/bin/sh /opt/remote_backup/remote_backup.sh
总结
先把pleroma相关文件备份至本地服务器某文件夹内,再用Duplicacy传至异地存储服务中。
论我为什么一身泥
这里踩了一个(后来发现是很多个)巨坑坑啊!
-
怪不得我的定时任务跑不动 · 之一
解决方法就是把exp脚本放进bash脚本中,再通过crontab跑bash脚本……
- 怪不得我的定时任务跑不动 · 之二
脚本手动执行成功,但一用cron就提示找不到duplicacy
couldn't execute "duplicacy": no such file or directory
while executing
解决方法:which duplicacy
,找到路径/usr/local/bin/duplicacy
后,要么在执行duplicacy命令的脚本里,写全路径/usr/local/bin/duplicacy backup -stats -threads 4
; 要么就去搞环境变量。5
- 怪不得我的定时任务跑不动 · 之环境变量
再 也 不 见 !!!
最后更新于: 2023 年 2 月 12 日