django项目备份到阿里云oss及docker内的相关配置

本文介绍如何在Django项目中使用django-crontab和django-dbbackup包实现数据库定时备份,并将备份文件上传至阿里云OSS。文章详细描述了设置定时任务、配置备份参数及Docker部署过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求描述

因为一直在做的项目都是通过docker部署的,最近有个需求就是将数据库定时备份到阿里云oss上。

用的相关包

因为是需要定时和备份这两个功能,所以使用了:django-crontab,和django-dbbackup这两个django的包,由于是在docker内启动的项目,所以在requirement.txt加入这两个包的相关版本号即可

settings配置

INSTALLED_APPS = [
   				 'dbbackup',
  				 'django_crontab'
]
DBBACKUP_STORAGE = 'django.core.files.storage.FileSystemStorage'
DBBACKUP_STORAGE_OPTIONS = {'location': 'xx'}	   	#存储的路径
DBBACKUP_FILENAME_TEMPLATE = 'xxx'     #备份文件的文件名
DBBACKUP_CONNECTORS = DATABASES   #数据库连接
CRONJOBS = [
    ('* * * * *', '模块名.文件名.函数名', '>>/home/backup.log')
]
CRONTAB_COMMAND_PREFIX = 'xxx'       #由于django_crontab运行时无法拿到相关的环境变量,所以在这里配上相应的环境变量(数据库的DATABASE_URL)

backup函数

if settings.DEBUG:
    print('this is debug')         #print的东西都会输出在settings配置的log文件中
else:
    try:
        management.call_command('dbbackup')   #数据库备份的命令
    except Exception as e:
        print(e)
    auth = oss2.Auth(youraccesskey,youraccesssecret)
    bucket = oss2.Bucket(auth, 'http://oss-cn-beijing.aliyuncs.com', 'yourbucketname')
    try:
        while True:
            bucket.put_object_from_file('备份到阿里云的文件名', '本地的备份文件文件名')
            exist = bucket.object_exists('备份到阿里云的文件名')     #检测文件在阿里云oss是否存在
            if exist:
                print('%s object save' % time)
                break
            else:
                print('%s object not save' % time)
    except Exception as e:
        print(e)
    bucket.put_object_from_file('备份到阿里云的文件名' , '/home/backup.log')

Dockerfile

apt-get install -y cron;                  #记得安装定时器

docker执行的sh脚本中加入

cd '项目路径' python3 manage.py crontab add     #将settings配置的定时任务加入到定时器中
/etc/init.d/cron start     #开启定时器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值