Caiwen的博客

使用七牛云备份网站

2022-08-12 10:51:00

由于想要在服务器上登录qq,所以把服务器的系统换成了windows系统。宝塔面板似乎不想支持windows系统(在windows系统上从来没有安装成功过),所以使用了php_study来搭建网站。而在之前使用宝塔面板的时候由于担心服务器跑路,所以使用了宝塔的七牛云备份插件,每天定时备份到七牛云储存。现在换到了windows系统上,需要自己实现一个七牛云备份的功能。

代码

使用node.js进行编写的脚本,执行后可以将数据库导出,并将网站文件夹打包压缩,上传到七牛云,执行完毕后还会进行邮件通知。以下为具体代码,需要手动安装模块,伸手党或使用方法直接看下面

javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
var accessKey = ''; var secretKey = ''; var bucket=''; var sitePath=""; var DBname=""; var DBpwd=""; var mailHost=""; var mailPort=; var mailUser=""; var mailPwd=""; var mailTo=""; var log=''; const sd = require('silly-datetime'); function addLog(str){ const time=sd.format(new Date(), 'YYYY-MM-DD HH:mm'); log+='['+time+"]"+str+'<br>'; console.log('['+time+"]"+str+'\n'); } var fs = require('fs'); var path = require('path'); var archiver = require('archiver'); const { toNamespacedPath } = require('path'); function zipFolder(sourceFolder, destZip, subdir) { // init var output = fs.createWriteStream(destZip); var archive = archiver('zip', { zlib: { level: 9 } }); // on output.on('close', function () { fs.stat("site.zip", function (error, stats) { addLog("网站文件压缩完毕,压缩文件大小:"+stats.size/1024/1024+'MB'); upLoadSite(); }) }); archive.on('error', function (err) { addLog("网站文件压缩失败:"+err); toEnd(); }); // zip archive.pipe(output); archive.directory(sourceFolder, subdir ? sourceFolder.substr(path.dirname(sourceFolder).length + 1) : false); archive.finalize(); } addLog("备份任务开始执行"); addLog("正在导出数据库"); const childProcess=require('child_process'); let cmd="mysqldump -uroot -p"+DBpwd+" "+DBname+">"+sitePath+"\\database.sql"; addLog("执行命令:"+cmd); childProcess.exec(cmd,(error, stdout, stderr)=>{ fs.stat(sitePath+"\\database.sql", function (error, stats) { addLog("数据库大小:"+stats.size/1024+'KB'); addLog("正在打包站点数据"); zipFolder(sitePath,"site.zip",true); }) }); var qiniu = require('qiniu'); function upLoadSite(){ addLog("准备上传"); var mac = new qiniu.auth.digest.Mac(accessKey, secretKey); var options = { scope: bucket+":site.zip", expires: 18000 }; var putPolicy = new qiniu.rs.PutPolicy(options); var uploadToken=putPolicy.uploadToken(mac); var config = new qiniu.conf.Config(); var formUploader = new qiniu.form_up.FormUploader(config); var putExtra = new qiniu.form_up.PutExtra(); addLog("开始上传"); //toEnd(); //return; formUploader.putFile(uploadToken, 'site.zip', 'site.zip', putExtra, function (respErr, respBody, respInfo) { if (respErr) { addLog("遇到未知错误"); toEnd(); } if (respInfo.statusCode == 200) { addLog("上传完成!"); toEnd(); }else{ addLog("遇到未知错误"+respInfo.statusCode); toEnd(); } }); } const nodemailer = require('nodemailer'); function toEnd(){ let transporter = nodemailer.createTransport({ host: mailHost, port: mailPort, // SMTP 端口 auth: { //发送者的账户和授权码 user: mailUser, //账户 pass: mailPwd, //smtp授权码,到邮箱设置下获取 } }); let mailOptions = { from: '"Gcteamo" <admin@gcteamo.com>', // 发送者昵称和地址 to: mailTo, // 接收者的邮箱地址 subject: '备份任务执行报告', // 邮件主题 html: "<html><body>网站备份任务执行完毕,下面为执行日志<br><br>"+log+"</body></html>" }; //发送邮件 transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error); } console.log('邮件发送成功 ID:', info.messageId); }); //console.log(log); } //var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);

配置与使用

下载

你可以直接下载已经把所有依赖的模块安装好的脚本,下载链接:
https://www.aliyundrive.com/s/QqAsBAGfXgv (由于特殊原因,下载到的文件是图片,你需要把后缀改成.rar,然后将其视为正常的压缩文件解压)

配置

打开解压后文件夹中的 main.js 文件,填写前11行信息,变量名与说明如下:

  1. accessKey:你的七牛云公钥
  2. secretKey:你的七牛云私钥
  3. bucket:你要上传到的七牛云储存的空间名称
  4. sitePath:你网站的目录,注意目录的最后不要带 \\
  5. DBname:你要备份的数据库的名称
  6. DBpwd:mysql数据库root的密码
  7. mailHost:发件邮箱的SMTP服务器地址
  8. mailPor:SMTP服务器的端口
  9. mailUser:发件邮箱地址
  10. mailPwd:发件邮箱密码
  11. mailTo:要通知的邮箱地址

填写完毕后大概长这样

设置定时任务

你的服务器需要安装node.js才能运行脚本。你可以在命令行中输入 node -v 如果出现类似于下面的输出信息,说明你正常安装了node.js

将脚本文件打包上传到服务器后,进入 控制面板/管理工具/计划任务。

在右边选择 创建任务

在最下面勾选这个

设置触发器,在里面填写好任务执行频率

设置操作,按照下面填写
(添加参数中填写脚本的路径)

成功添加

点击旁边的运行,测试一下

如果一切顺利,就可以在大约5分钟后收到任务执行成功的通知邮件

最后更新于:2025-01-24 09:48:25

Caiwen
本文作者
一只蒟蒻,爱好编程和算法