Compare commits

..

10 commits
1.0.0 ... main

Author SHA1 Message Date
SevicheCC
1ef2e32aaa
Refactor backup order 2023-05-29 10:00:21 +08:00
sevichecc
d65793fbc2
Add gitignore 2023-04-18 01:25:59 +08:00
sevichecc
a84c7cd6d4
Merge branch 'main' of https://github.com/Sevichecc/pleroma-backup-script 2023-04-18 01:10:48 +08:00
sevichecc
9a8e8cb036
Add space between = 2023-04-18 01:10:15 +08:00
sevichecc
3b1c7a4a8d
Refactor code struture 2023-04-18 01:09:37 +08:00
sevichecc
f72209fc63
fix: tar command can result in nested folder 2023-04-18 01:08:55 +08:00
SevicheCC
0a703e5ed3
Update bot.py 2023-02-01 15:48:10 +08:00
SevicheCC
f5412f4aae
Rename backup-bot.py to bot.py 2023-02-01 15:47:52 +08:00
sevichecc
2722e40496
Fix unexpect EOF 2023-02-01 15:20:20 +08:00
sevichecc
0b89fc9c5c
Feat add reminder bot 2023-02-01 15:04:26 +08:00
5 changed files with 76 additions and 41 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.DS_Store

View file

@ -1,3 +1,6 @@
- Use [duplicacy](https://duplicacy.com/) to upload to remote storage - Use [duplicacy](https://duplicacy.com/) to upload to remote storage
- `expect` to deal with user input - `expect` to deal with user input
- Keep a revision every 7 days for revisions older than 30 days - Keep a revision every 7 days for revisions older than 30 days
- Backup reminder bot
Detail(in Chinese): [用 duplicacy 备份 Pleroma](https://seviche.cc/2023-01-22-backup/)

View file

@ -1,26 +1,31 @@
#!/bin/bash #!/bin/bash
set -e
source /etc/profile source /etc/profile
source ./.env source ./.env
echo `date +"%Y-%m-%d %H:%M:%S"` " now starting backup" TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
echo "(${TIMESTAMP}) now starting backup"
echo "1.stop pleroma" echo "1.Stopping pleroma"
sudo systemctl stop pleroma sudo systemctl stop pleroma
echo "2.dump database" echo "2.Dumping database"
sudo -Hu postgres pg_dump -d $PLEROMA_DB --format=custom -f ${BACKUP_PATH}/pleroma.pgdump sudo -Hu postgres pg_dump -d $PLEROMA_DB --format=custom -f ${BACKUP_PATH}/pleroma_${TIMESTAMP}.pgdump
echo "3.pack uploads & static folder" echo "3.Packing uploads & static folder"
tar -czf static.tar.gz --absolute-names ${PLEROMA_PATH}/static tar -czf ${BACKUP_PATH}/static_${TIMESTAMP}.tar.gz -C ${PLEROMA_PATH} static
tar -czf uploads.tar.gz --absolute-names ${PLEROMA_PATH}/uploads tar -czf ${BACKUP_PATH}/uploads_${TIMESTAMP}.tar.gz -C ${PLEROMA_PATH} uploads
echo "4.copy config file" echo "4.Restarting pleroma"
cp ${PLEROMA_CONFIG_PATH} ${BACKUP_PATH}
echo "5.backup to remote"
./duplicacy.sh
echo "6.restart pleroma"
sudo systemctl start pleroma sudo systemctl start pleroma
echo `date +"%Y-%m-%d %H:%M:%S"` " done!" echo "5.Copying config file"
cp ${PLEROMA_CONFIG_PATH} ${BACKUP_PATH}
echo "6.Backuping to remote"
./duplicacy.sh
echo "7.Deleting backups older than 7 days"
find ${BACKUP_PATH} -type f -name '*.pgdump' -mtime +7 -exec rm {} \;
echo "(${TIMESTAMP}) done!"

27
bot.py Normal file
View file

@ -0,0 +1,27 @@
#!/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('your_post_content')

View file

@ -4,7 +4,10 @@ set SECRET_ACCESS_KEY "YOUR_SECRET_ACCESS_KEY"
set PASSWORD "YOUR_PASSWORD" set PASSWORD "YOUR_PASSWORD"
set timeout -1 set timeout -1
spawn duplicacy backup -threads 4
# Function to handle authentication
proc authenticate {} {
global ACCESS_KEY_ID SECRET_ACCESS_KEY PASSWORD
expect "ID" expect "ID"
send "$ACCESS_KEY_ID\r" send "$ACCESS_KEY_ID\r"
@ -14,20 +17,16 @@ send "$SECRET_ACCESS_KEY\r"
expect "password" expect "password"
send "$PASSWORD\r" send "$PASSWORD\r"
}
##### (optional) Keep a revision every 7 days for revisions older than 30 days # Run duplicacy backup command
# expect "completed" spawn duplicacy backup -threads 4
# spawn duplicacy prune -keep 7:30 authenticate
expect "completed"
# expect "ID" # Run duplicacy prune command (optional)
# send "$ACCESS_KEY_ID\r" spawn duplicacy prune -keep 7:30
authenticate
# expect "Secret" # Allow user interaction after script completion
# send "$SECRET_ACCESS_KEY\r" interact
# expect "password"
# send "$PASSWORD\r"
expect eof
EOF