温馨提示×

Debian Node.js的备份与恢复策略是什么

小樊
45
2025-12-16 15:45:30
栏目: 编程语言

Debian Node.js 备份与恢复策略

一 备份范围与分层

  • 代码与依赖:优先托管在 Git;在服务器侧保留可部署的发布包(如 tar.gz),并确保有 package.jsonpackage-lock.json/yarn.lock,便于精确还原依赖版本。
  • 数据与配置:备份业务数据目录(如 uploads/data/)、环境变量与敏感配置(如 .env)、以及反向代理/进程管理配置(如 NginxPM2 配置)。
  • 日志:运行时日志建议用 logrotate 做按日轮转与压缩;历史归档与异地留存可用 rsync 或脚本化打包后同步到备份存储。
  • 数据库:按所用数据库类型选择原生工具(如 MySQLmysqldumpPostgreSQLpg_dumpMongoDBmongodump),并与应用备份时间窗口对齐。

二 备份策略与工具

  • 代码与发布包
    • 打包发布:tar -czvf project-$(date +%F).tar.gz -C /path/to/project .;恢复:tar -xzvf project-*.tar.gz -C /opt/app && npm ci --only=production
  • 文件级增量与远程同步
    • 本地/远程镜像:rsync -av --delete /src/ user@backup:/dst/;适合按日/小时做增量同步与快速回滚。
  • 数据库备份
    • MySQL:mysqldump -u[user] -p[pass] --single-transaction --routines --triggers --hex-blob [db] > backup.sql
    • PostgreSQL:pg_dump -U[user] -F c -b -v -f backup.dump [db]
    • MongoDB:mongodump --db [db] --out /backup/mongo/$(date +%F)
  • 日志轮转与归档
    • logrotate 配置示例(/etc/logrotate.d/nodejs):
      /var/log/nodejs/*.log {
        daily
        rotate 7
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
          systemctl reload pm2-<app>.service >/dev/null 2>&1 || true
        endscript
      }
      
      如需归档到备份目录,可配合简单脚本每日打包并同步到远端。
  • 自动化调度
    • 使用 cron 定时执行备份脚本(如每日 02:00 代码与数据库、每小时日志归档),并在脚本中记录执行结果与退出码,便于告警与审计。

三 恢复流程与演练

  • 标准恢复步骤
    1. 准备环境:在新/原服务器安装匹配的 Node.js 运行时与全局依赖;恢复 Nginx/PM2 配置。
    2. 代码与依赖:将发布包解压至目标目录,执行 npm ci --only=production 还原精确依赖。
    3. 数据与配置:恢复 .env 与数据目录;如有权限/密钥,校验一致性。
    4. 数据库:按引擎导入(如 mysql < backup.sqlpg_restore -d [db] backup.dumpmongorestore --db [db] /backup/mongo/...)。
    5. 日志:如需历史日志,先恢复 logrotate 状态,再按需解压归档。
    6. 启动与自检:启动服务(如 pm2 startOrRestart ecosystem.config.js),检查端口、进程、关键业务自检接口。
  • 演练与验证
    • 定期在预备环境做全量恢复演练,核对数据一致性与可用性;为关键步骤编写回滚预案(如保留最近 N 个可回滚版本)。

四 安全与运维要点

  • 机密与合规:备份中避免明文存放密码/密钥;对敏感文件设置 600 权限;必要时加密归档并管控密钥生命周期。
  • 存储与保留:至少保留 7–30 天 的历史;采用“本地快速回滚 + 远端/离线归档”的双地三中心思路;定期清理过期备份。
  • 监控与告警:监控备份任务退出码与备份体积异常;对日志增长设置阈值告警(如单日志超过 100MB 触发预警),便于提前扩容或归档。
  • 进程管理:使用 PM2 的集群/守护能力,在 logrotate 的 postrotate 中通过 systemctl reload pm2-<app>.servicepm2 reload <app> 发送信号,确保日志句柄平滑切换。

0