Debian系统如何备份Node.js项目数据
导读:Debian系统备份Node.js项目数据的实用方案 一 备份范围与准备 明确需要纳入备份的内容: 代码与依赖:确保有package.json与package-lock.json/yarn.lock;代码建议纳入Git并由CI/CD或远...
Debian系统备份Node.js项目数据的实用方案
一 备份范围与准备
- 明确需要纳入备份的内容:
- 代码与依赖:确保有package.json与package-lock.json/yarn.lock;代码建议纳入Git并由CI/CD或远端仓库托管。
- 数据与配置:包含业务数据(数据库)、.env等敏感配置、用户上传的静态文件/附件。
- 日志:运行日志与错误日志,建议纳入日常备份或按策略保留。
- 准备备份目的地:本地目录(如**/backup/nodejs**)、NFS/外接盘或远程服务器/对象存储。
- 选择一致性策略:对写入频繁的数据,优先考虑在维护窗口短暂停写或使用数据库原生导出工具获取一致性快照;如无法停写,至少确保备份期间应用处于可恢复状态并记录备份时间点。
二 本地备份方法
- 使用 tar 归档项目目录
- 进入项目根目录后打包:
- tar -czvf project-backup_$(date +%F).tar.gz .
- 指定备份目录:
- tar -czvf /backup/nodejs/project_$(date +%F).tar.gz -C /path/to/project .
- 恢复:
- tar -xzvf project-backup_YYYY-MM-DD.tar.gz -C /restore/path
- cd /restore/path & & npm install
- 进入项目根目录后打包:
- 使用 rsync 做本地或远程增量同步
- 本地镜像:
- rsync -av --delete /path/to/project/ /backup/nodejs/project/
- 远程同步:
- rsync -av --delete /path/to/project/ user@remote:/backup/nodejs/project/
- 本地镜像:
- 数据库与依赖的配套备份
- 依赖清单:确保备份中包含package.json与package-lock.json/yarn.lock,便于还原时安装一致版本。
- MongoDB:
- mongodump --out /backup/nodejs/mongo_$(date +%F)
- MySQL:
- mysqldump -u [user] -p[password] [db] > /backup/nodejs/mysql_$(date +%F).sql
- PostgreSQL:
- pg_dump -U [user] -W -F c -b -v -f /backup/nodejs/pg_$(date +%F).dump [db]
- 说明:以上命令为常见用法,生产环境请使用专用备份账号、避免将密码写入命令行历史,并妥善设置**.env**等敏感文件的权限与加密。
三 自动化与远程备份
- 定时任务 cron
- 示例(每日02:00本地打包):
- 0 2 * * * tar -czvf /backup/nodejs/project_$(date +%F).tar.gz -C /path/to/project .
- 示例(每日01:00本地 rsync 镜像):
- 0 1 * * * rsync -av --delete /path/to/project/ /backup/nodejs/project/
- 如需远程备份,可在脚本中使用 rsync over SSH 或将归档文件通过scp/sftp上传至远端存储。
- 示例(每日02:00本地打包):
- 日志轮转与保留
- 使用logrotate管理 Node.js 日志(示例配置路径:/etc/logrotate.d/nodejs-logs):
- /path/to/nodejs/logs/*.log {
- daily
- rotate 7
- missingok
- notifempty
- compress
- delaycompress
- sharedscripts
- postrotate
- /usr/bin/killall -HUP node
- endscript
}
- /path/to/nodejs/logs/*.log {
- 测试与强制执行:
- logrotate -d /etc/logrotate.d/nodejs-logs
- logrotate -f /etc/logrotate.d/nodejs-logs
- 如使用PM2,可配合pm2-logrotate插件进行日志切分与保留。
- 使用logrotate管理 Node.js 日志(示例配置路径:/etc/logrotate.d/nodejs-logs):
四 恢复流程与校验
- 代码与依赖恢复
- 将归档解压至目标目录并安装依赖:
- tar -xzvf project-backup_YYYY-MM-DD.tar.gz -C /opt/myapp
- cd /opt/myapp & & npm install --production
- 将归档解压至目标目录并安装依赖:
- 数据库恢复
- MongoDB:
- mongorestore /backup/nodejs/mongo_YYYY-MM-DD
- MySQL:
- mysql -u [user] -p[password] [db] < /backup/nodejs/mysql_YYYY-MM-DD.sql
- PostgreSQL:
- pg_restore -U [user] -d [db] -v /backup/nodejs/pg_YYYY-MM-DD.dump
- MongoDB:
- 配置与静态资源
- 恢复**.env**、上传目录、证书等;确保文件权限与属主正确。
- 校验与演练
- 核对关键数据行数/集合数量、最近N条日志、静态资源可用性;建议定期演练恢复并记录恢复时间目标(RTO)/恢复点目标(RPO)。
五 实用脚本示例
- 本地全量备份脚本(含项目、数据库与日志归档)
- 示例(以 MongoDB 为例,按需替换数据库与路径):
- #!/usr/bin/env bash
- set -Eeuo pipefail
- BACKUP_BASE=“/backup/nodejs”
- PROJECT_SRC=“/path/to/project”
- DATE=$(date +%F)
- mkdir -p “$BACKUP_BASE/$DATE”
-
1) 项目归档
- tar -czvf “$BACKUP_BASE/$DATE/project_$DATE.tar.gz” -C “$PROJECT_SRC” .
-
2) MongoDB 导出
- mongodump --out “$BACKUP_BASE/$DATE/mongo_$DATE”
-
3) 日志归档(可选)
- tar -czvf “$BACKUP_BASE/$DATE/logs_$DATE.tar.gz” -C /path/to/nodejs/logs .
-
4) 清理旧备份(保留最近7天)
- find “$BACKUP_BASE” -maxdepth 1 -type d -mtime +7 -exec rm -rf { } +
- #!/usr/bin/env bash
- 定时执行(每日02:00):
- 0 2 * * * /usr/bin/bash /opt/backup-node.sh > > /var/log/node-backup.log 2> & 1
- 示例(以 MongoDB 为例,按需替换数据库与路径):
- 远程同步脚本(rsync over SSH)
- #!/usr/bin/env bash
- rsync -av --delete -e ssh /backup/nodejs/ user@remote:/backup/nodejs/
- 定时执行(每日03:00):
- 0 3 * * * /usr/bin/bash /opt/sync-backup.sh > > /var/log/sync-backup.log 2> & 1
- #!/usr/bin/env bash
- 安全建议
- 备份文件集中存放并设置保留周期;对含敏感信息的归档启用加密与最小权限访问;对关键业务在低峰时段执行备份并保留**校验值(如 sha256sum)**以便完整性验证。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian系统如何备份Node.js项目数据
本文地址: https://pptw.com/jishu/749410.html
