xinliu 发表于 2022-11-12 09:44

使用Aligo定时备份服务器文件

本帖最后由 xinliu 于 2022-11-12 09:45 编辑

## 简介

在现在的互联网时代,数据显得尤为重要,我们的服务器中也有一些重要数据,如果服务器被攻击或者过期忘记取回数据,那造成的后果难以想象,所以要做好定时备份的习惯,但是人又懒怎么办呢,今天给出一个Aligo定时备份文件的解决方案。

## 源码

使用python3.8压缩备份文件,使用第三方库`aligo`来上传到阿里云盘

```python
from aligo import Aligo
import time
import datetime
import gzip
import os
import zipfile

# 备份目录路径数组
backup_dir_list = [
    '/www/lskypro/storage/app/uploads',
    '/www/shinie.top',
    '/www/bot',
    '/www/bimg.cc'
]
# 压缩包路径
compress_dir = '/www/aligo/backup'
# 压缩包文件名数组,可添加文件夹
compress_name_list = [
    'lskypro.zip',
    'shinie.top.zip',
    'bot.zip',
    'bimg.cc.zip'
]
# 阿里云盘上传路径
upload_dir = '服务器数据备份'
# 压缩包保存多少天
day=7
# 接收登录二维码邮件
email='xxxx@qq.com'
# 防伪字符串
security_str='backup-server-file'

t=time.strftime("%Y-%m-%d",time.localtime())

if __name__ == '__main__':
    ali = Aligo(email=(email, security_str))
    # 遍历备份目录
    for i in range(0,len(backup_dir_list)):
      remote_folder = ali.get_folder_by_path(upload_dir)

      # 遍历压缩目录
      for zip_file in os.listdir(compress_dir):
            t_be=zip_file
            start = datetime.datetime.strptime(t_be, "%Y-%m-%d")
            end = datetime.datetime.strptime(t, "%Y-%m-%d")
            days = (end-start).days #计算天数差
            old_zip_file=compress_dir+'/'+t_be+"/"+compress_name_list
            # 删除过期文件
            if days>day:
                print("旧文件:"+old_zip_file+"已过期")
                print("即将删除本地压缩文件:"+old_zip_file)
                if os.path.exists(old_zip_file):
                  os.remove(old_zip_file)
      
      # 创建压缩包完整目录 /www/backup/2022-11-11/
      compress_pull_dir=compress_dir+'/'+t+"/"
      if os.path.exists(compress_pull_dir)==False:
            os.makedirs(compress_pull_dir)
      # 压缩
      zip_file=compress_pull_dir+compress_name_list
      zip = zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED)
      for root,dirs,files in os.walk(backup_dir_list):    #遍历统计
            for each in files:
                if os.path.exists(root+"/"+each):
                  zip.write(root+"/"+each)
      zip.close()
      # 同步文件夹(以本地文件为主)
      ali.sync_folder(local_folder=compress_dir, remote_folder=remote_folder.file_id,flag=True,follow_delete=True)

```

参数解释:

|      参数      |                           解释                           |                         参考值                         |
| :----------------: | :----------------------------------------------------------: | :----------------------------------------------------: |
|backup_dir_list   |   备份目录路径数组,可选择备份服务器的文件路径(必要)   | ['/www/lskypro/storage/app/uploads','/www/shinie.top'] |
|    compress_dir    |         压缩包存放的目录,可与备份路径不一样(必要)         |                  '/www/aligo/backup'                   |
| compress_name_list | 压缩包文件名数组,需和backup_dir_list长度一致,且一一对应(必要) |      [    'lskypro.zip',    'shinie.top.zip']      |
|   upload_dir   |                   阿里云盘上传路径(必要)                   |               'AList/服务器数据备份'               |
|      day         |                  压缩包保存天数(必要)                  |                           7                            |
|       email      |                  接收登录二维码邮件(必要)                  |                  '1982989137@qq.com'                   |
|    security_str    |                        防伪字符串                        |                  'backup-server-file'                  |

先运行一遍(记得改邮箱)登录阿里云盘,获取token

编辑`/etc/crontab`:

```shell
2 0 * * * root /www/python3.8.6/bin/python3.8 /www/aligo/upload.py
```

不是root用户运行程序的话需要先修改.py文件权限:

```shell
chmod 777 /www/aligo/upload.py
```

python需要自行安装:(https://blog.panghai.top/posts/d5f4/)

## 效果

![阿里云盘保存服务器数据](https://cdn.panghai.top/b/cbb5481/636dc94bc0db2.png)

ab123 发表于 2022-11-12 19:19

很好的工具,也可以用于个人文件备份啊

xinliu 发表于 2022-11-12 23:59

alan3258 发表于 2022-11-12 11:10
搞一个可执行程序最好了,要不服务器还的部署py环境,挺实用的

服务器如果是windows可以尝试用pyinstaller打包成.exe执行
linux的话那只能安装python环境了

alan3258 发表于 2022-11-12 11:10

搞一个可执行程序最好了,要不服务器还的部署py环境,挺实用的

DreamCN 发表于 2022-11-12 12:00

那些OSS备份太费钱了 这个确实不错

yyb1813 发表于 2022-11-12 13:31

hanbing360 发表于 2022-11-12 14:00

我一直备份在Googledrive上,有现成的插件,有时间试一试大佬的这个。

xinliu 发表于 2022-11-13 00:00

hanbing360 发表于 2022-11-12 14:00
我一直备份在Googledrive上,有现成的插件,有时间试一试大佬的这个。

没有魔法{:1_908:}

Guaishou123 发表于 2022-12-2 15:27

有点麻烦,希望楼主可以优化使用方法

xinliu 发表于 2022-12-3 09:28

Guaishou123 发表于 2022-12-2 15:27
有点麻烦,希望楼主可以优化使用方法

简单的无法应对复杂场景
页: [1] 2
查看完整版本: 使用Aligo定时备份服务器文件