本站的部署方案与数据库备份方案

发布时间:2020-03-29

借助npm的scripts功能,添加了npm run deploy脚本命令,而不是在每次发布前先敲git pull 然后npm install,等到install完然后在build,或者npm run serve等等。现在只需要npm run deploy便可自动运行发布的命令流程。

shell脚本代码

#!/bin/bash echo "拉取代码..." git reset --hard origin/master git clean -f git pull git checkout master echo "开始安装依赖..." npm install echo "依赖安装结束..." echo "开始构建..." npm run build echo "构建结束 开始启动服务" pm2 restart blog-static echo "服务重启完毕."

当然这段shell脚本是针对各自的项目的有一定的局限性,不是真正的devops。这样就减少了很多手敲命令的工作量,自己也很开心,只要等待屏幕输出服务发布成功就可以了。

npm scripts

"deploy": "sh .deploy/deploy.sh"

定时备份数据库并邮件通知备份结果

数据库的备份功能这次也一并加上了,我采取了一个并不可行的可行方案,把数据库备份到项目的data文件夹下然后自动git提交到项目仓库。说实话这种方案并不好,没有回滚机制,也没有独立的服务空间储存。因为是个人的独立项目所以就不需要考虑这么多了,图个方便和管用~

备份代码

使用shelljs来完成shell命令

const shell = require('shelljs') exports.dbBackup = cb => { const backupPath = './data' let backupCommand = `mongodump -h 127.0.0.1 -d blog -o ${backupPath}` if (shell.exec(backupCommand).code !== 0) { shell.echo('Error: 备份数据失败') cb({ msg: '备份失败!' }) shell.exit(1) } shell.exec('git add .') shell.exec(`git commit -m '数据库自动备份: ${new Date()}'`) shell.exec('git push') cb(null) }

定时任务

const schedule = require('node-schedule') const { dbBackup } = require('../helper/dbHelper') const { sendMail } = require('../helper/email') function dbBackupSchedule() { // 0 0 0 * * 1 schedule.scheduleJob('0 0 23 * * *', function() { dbBackup(function(err) { if (!err) { let infoHtml = `<p>数据库备份成功:${new Date()}</p>` sendMail(infoHtml) } else { let infoHtml = `<p>数据库备份失败:${new Date()}</p>` sendMail(infoHtml,'数据库备份失败') } }) }) } dbBackupSchedule()

邮件发送

const nodemailer = require('nodemailer') const { emailConfig } = require('../config/config') let transporter = nodemailer.createTransport({ host: 'smtp.qq.com', port: 465, // SMTP 端口 secureConnection: true, // 使用了 SSL auth: { user: emailConfig.user, pass: emailConfig.pass } }) exports.sendMail = (html='hi',subject='数据库备份成功')=>{ let mailOptions = { from: 'helti@qq.com', // sender address to: '2991271712@qq.com', // list of receivers subject: subject, // Subject line html: html // html body } transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log(error) } }) }

以上就是本站简单的部署方案与数据备份方案。