登录
已读 0%
计算机IDEAS & NOTES

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

借助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) } }) }

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

读到这里,感谢你的时间。

把这篇文章,分享给同样好奇的人。

由 helti 发布 · 本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

KEEP EXPLORING
全部文章

计算机

一文带你了解 TPU 和 GPU:为什么 AI 时代离不开它们?

2026.04.12911 次阅读

转载

解谜计算机科学-王垠

2019.03.1815,335 次阅读

文章

把服务器迁移到阿里云了

16,685 次阅读