自动 GPG 加密后备份 Ghost 博客到百度云
换到了这种不知名服务商,天知道会不会跑路。所以还是每天自动备份到百度云,以备不时之需。所以写了个脚本专门干这事。
虽然百度云坑爹,不过相比业界标杆 Dropbox,高达 2TB 的存储空间不可谓不划算。再加上在国内的高速,用来做备份的确很适合。非对称加密后上传到百度云,在安全方面也没有任何问题。讲真这么大的空间每日备份够我用几年了。
步骤:
安装 bypy
,由于原作者表示目前不支持作为包导入,在 Python 中只能以 os.system
方式执行了。
pip install bypy
配置 API:
bypy info
导入你的 GPG 公钥,设置为信任。具体步骤不再赘述。
写了一个小脚本,用 nohup
运行后自动每天加密后备份到百度云。上代码:
import os
import tarfile
import datetime
import time
def make_tarfile(output_filename, source_dir):
with tarfile.open(output_filename, 'w:gz') as tar:
tar.add(source_dir, arcname=os.path.basename(source_dir))
def backup(from_dir, to_file, gpg):
make_tarfile(to_file, from_dir)
to_file_encrypted = to_file + '.gpg'
os.system('gpg -o %s -e -r %s %s' % (to_file_encrypted, gpg, to_file))
os.system('bypy upload %s' % to_file_encrypted)
ghost_database = r'/var/www/ghost/content/data/ghost.db'
ghost_dir = r'/var/www/ghost/'
backup_dir = os.path.join(os.environ['HOME'], r'.backup/ghost/')
gpg_key='9239C789'
wait_time = 86400
while True:
date = datetime.datetime.now().strftime('%Y-%m-%d')
filename_database = os.path.join(backup_dir, '%s_database.tar.gz' % date)
filename_full = os.path.join(backup_dir, '%s_full.tar.gz' % date)
backup(ghost_database, filename_database, gpg_key)
backup(ghost_dir, filename_full, gpg_key)
time.sleep(wait_time)
os.remove(filename_database)
os.remove(filename_database + '.gpg')
os.remove(filename_full)
os.remove(filename_full + '.gpg')
把变量 ghost_database
, ghost_dir
, backup_dir
, gpg_key
修改为自己的值。wait_time
默认是每隔 24 小时备份一次,有需要可以自行调整。
运行:
nohup python3 autoBackup.py &
It looks like this:
2016 年三月 30 日更新:
原有用 nohup
后台定时还是太落后,换到了计划任务 crontab
。代码做了少许修改:
#!/usr/bin/python3
import os
import tarfile
import datetime
import time
def make_tarfile(output_filename, source_dir):
with tarfile.open(output_filename, 'w:gz') as tar:
tar.add(source_dir, arcname=os.path.basename(source_dir))
def backup(from_dir, to_file):
make_tarfile(to_file, from_dir)
to_file_encrypted = to_file + '.gpg'
os.system('gpg -o %s -e -r 9239C789 %s' % (to_file_encrypted, to_file))
os.system('/usr/local/bin/bypy upload %s' % to_file_encrypted)
ghost_database = r'/var/www/ghost/content/data/ghost.db'
ghost_dir = r'/var/www/ghost/'
backup_dir = os.path.join(os.environ['HOME'], r'.backup/ghost/')
date = datetime.datetime.now().strftime('%Y-%m-%d')
filename_database = os.path.join(backup_dir, '%s_database.tar.gz' % date)
filename_full = os.path.join(backup_dir, '%s_full.tar.gz' % date)
backup(ghost_database, filename_database)
backup(ghost_dir, filename_full)
time.sleep(1800)
os.remove(filename_database)
os.remove(filename_database + '.gpg')
os.remove(filename_full)
os.remove(filename_full + '.gpg')
编辑 crontab
配置文件,我的是这样的:
00 12 * * * /home/xia/autoBackup.py
意思是每天十二点自动执行 autoBackup.py
。运行命令将其添加到 crontab
:
crontab youconfig
如果日后要编辑,运行 crontab -e
即可。