温馨提示×

Debian Node.js如何进行备份恢复

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

Debian Node.js 备份与恢复实操指南

一 备份范围与准备

  • 明确范围:备份应覆盖应用代码依赖锁文件环境变量/配置数据文件以及日志/数据库
  • 准备清单:
    • 代码与锁文件:package.jsonpackage-lock.json/yarn.lock
    • 配置与环境:如 .env、/etc 下的配置(按实际存放位置为准)。
    • 数据与日志:应用数据目录(如 /var/lib/yourapp)、日志目录(如 /var/log/nodejs)。
    • 数据库:按所用数据库执行各自的备份工具(如 mongodump 等)。
  • 建议做法:在备份前临时停止写入或使用应用支持的一致性快照方式,避免热备份导致的数据不一致。

二 代码与依赖的备份与恢复

  • 本地/离线归档(tar.gz)
    • 备份:在项目根目录执行
      tar -czvf project-backup_$(date +%F).tar.gz -C /path/to/your/nodejs/project .
      
    • 恢复:
      mkdir -p /opt/yourapp
      tar -xzvf project-backup_2025-12-14.tar.gz -C /opt/yourapp
      cd /opt/yourapp
      npm ci --only=production   # 推荐:严格按 lock 文件重装,速度快且一致
      # 或 npm install
      
  • 本地/远程同步(rsync)
    • 备份:
      sudo mkdir -p /backup/nodejs
      rsync -av --delete /home/username/my-nodejs-project/ /backup/nodejs/
      
    • 恢复:
      rsync -av --delete /backup/nodejs/ /opt/yourapp/
      cd /opt/yourapp
      npm ci --only=production
      
  • 自动化定时备份(crontab)
    • 示例(每日 1 点归档):
      0 1 * * * tar -czvf /backup/nodejs_backup/backup_$(date +\%F).tar.gz -C /path/to/your/nodejs/project .
      
    • 示例(每日 1 点 rsync 同步):
      0 1 * * * rsync -av --delete /home/username/my-nodejs-project/ /backup/nodejs/
      
  • 说明:归档方式便于版本留存异地拷贝;rsync 方式便于增量同步快速回滚

三 数据与日志的备份与恢复

  • 数据库备份(示例)
    • MongoDB:
      mongodump --out /path/to/backup/mongo_$(date +%F)
      
    • 其他数据库:使用各自官方工具(如 mysqldumppg_dump 等)按生产环境参数执行。
  • 日志备份与恢复
    • rsync 方式(适合持续增量)
      • 备份:
        mkdir -p /backup/logs
        rsync -av --delete /var/log/nodejs /backup/logs/
        
      • 恢复:
        rsync -av /backup/logs/nodejs /var/log/nodejs
        
    • logrotate 方式(适合按日轮转归档)
      • 新建配置 /etc/logrotate.d/nodejs-logs
        /var/log/nodejs/*.log {
            daily
            rotate 7
            missingok
            notifempty
            compress
            delaycompress
            sharedscripts
            postrotate
                /usr/sbin/killall -HUP node
            endscript
        }
        
      • 测试与强制执行:
        sudo logrotate -d /etc/logrotate.d/nodejs-logs
        sudo logrotate -f /etc/logrotate.d/nodejs-logs
        
  • 说明:日志建议采用轮转+归档组合;需要长期留存或集中分析时,可结合 rsync 做二次备份。

四 自动化与验证

  • 自动化脚本示例(备份代码+日志,记录结果)
    #!/usr/bin/env bash
    set -e
    BACKUP_ROOT="/backup/nodejs"
    PROJECT_SRC="/home/username/my-nodejs-project"
    LOGS_SRC="/var/log/nodejs"
    DATE=$(date +%F)
    
    mkdir -p "$BACKUP_ROOT/$DATE"
    
    # 备份代码
    tar -czvf "$BACKUP_ROOT/$DATE/project.tar.gz" -C "$PROJECT_SRC" .
    
    # 备份日志
    rsync -av --delete "$LOGS_SRC" "$BACKUP_ROOT/$DATE/"
    
    # 记录
    echo "[$DATE] Backup completed." >> "$BACKUP_ROOT/backup.log"
    
    • 定时执行(每日 2 点):
      0 2 * * * /usr/local/bin/backup_nodejs.sh
      
  • 恢复演练与校验
    • 定期在测试环境执行恢复演练,核对关键文件与目录是否存在、权限是否正确、应用能否启动并连通数据库。
    • 对数据库备份,抽样恢复至临时实例,验证数据一致性与可用性。

五 注意事项与最佳实践

  • 一致性优先:备份窗口内尽量避免写入,或使用数据库/存储的快照功能;必要时短暂停写。
  • 锁文件必带:始终备份 package-lock.json/yarn.lock,恢复时用 npm ci 保证依赖一致性。
  • 环境分离:不要把 .env 和代码一起提交或外传,恢复时按安全流程注入生产密钥。
  • 权限与属主:恢复后确保目录属主与权限正确(如 node:node 或应用运行用户)。
  • 多环境区分:为开发/预发/生产使用独立备份路径与保留策略,避免误覆盖。
  • 异地与离线:关键备份至少保留一份异地/离线副本(如外置盘、对象存储),并定期校验。
  • 监控告警:对备份任务与日志增长设置监控与告警,及时发现失败或异常。

0