温馨提示×

Laravel项目在Ubuntu上如何备份与恢复

小樊
46
2025-11-15 00:11:34
栏目: 智能运维

在 Ubuntu 上备份与恢复 Laravel 项目的实用方案


一 备份范围与准备

  • 备份范围建议包含:
    • 项目代码(不含本地开发缓存与日志,便于迁移)
    • .env 配置(数据库连接等敏感信息)
    • 数据库(结构与数据)
    • 存储目录(如 storage/app/public,若使用本地驱动)
    • 证书/密钥(如第三方 API 证书、队列/邮件加密密钥等)
  • 准备与检查:
    • 确认已安装 PHP、Composer、MySQL 客户端 等依赖
    • 确认磁盘空间充足,备份目录可写
    • 建议准备远程存储/离线介质用于异地保存(提高可靠性)

二 手动备份步骤

    1. 备份项目文件(进入项目根目录后打包)
    • 示例:
      cd /var/www/html/laravel_project
      tar -czvf /home/ubuntu/backups/laravel_project_$(date +%Y%m%d%H%M%S).tar.gz .
      
    1. 备份数据库(使用 mysqldump)
    • 示例(交互输入密码):
      mysqldump -u DB_USER -p DB_NAME > /home/ubuntu/backups/db_$(date +%Y%m%d%H%M%S).sql
      
    • 或压缩导出(节省空间):
      mysqldump -u DB_USER -p DB_NAME | gzip > /home/ubuntu/backups/db_$(date +%Y%m%d%H%M%S).sql.gz
      
    1. 备份关键配置与存储(按需选择)
    • 示例:
      tar -czvf /home/ubuntu/backups/laravel_config_$(date +%Y%m%d%H%M%S).tar.gz \
        .env config bootstrap/cache storage/app/public certificates/
      
    1. 将备份传至远程位置(可选)
    • 示例:
      scp /home/ubuntu/backups/*.tar.gz user@remote:/path/to/remote/backup/
      scp /home/ubuntu/backups/*.sql* user@remote:/path/to/remote/backup/
      
  • 说明:
    • 上述命令中的 DB_USER、DB_NAME 请替换为实际值;文件名含时间戳便于管理
    • 若使用 SQLite,直接复制数据库文件(如 database/database.sqlite)即可

三 手动恢复步骤

    1. 恢复前准备
    • 在新环境安装依赖并创建空数据库(如 CREATE DATABASE),记录连接信息
    • 建议先备份当前环境与数据库,便于回滚
    1. 恢复项目文件
    • 示例:
      tar -xzvf /path/to/laravel_project_YYYYMMDDHHMMSS.tar.gz -C /var/www/html/laravel_project
      
    1. 恢复数据库
    • SQL 文件:
      mysql -u DB_USER -p DB_NAME < /path/to/db_YYYYMMDDHHMMSS.sql
      
    • 压缩 SQL 文件:
      gunzip < /path/to/db_YYYYMMDDHHMMSS.sql.gz | mysql -u DB_USER -p DB_NAME
      
    1. 恢复配置与存储(按需)
    • 示例:
      tar -xzvf /path/to/laravel_config_YYYYMMDDHHMMSS.tar.gz -C /var/www/html/laravel_project
      
    1. 安装依赖与优化
    • 示例:
      cd /var/www/html/laravel_project
      composer install --optimize-autoloader --no-dev
      php artisan config:cache
      php artisan route:cache     # 如使用路由缓存
      php artisan view:cache       # 如使用视图缓存
      
    1. 调整 .env 与权限
    • 核对 .env 中的 DB_HOST/DB_PORT/DB_DATABASE/DB_USERNAME/DB_PASSWORD
    • 设置目录权限(示例):
      chown -R www-data:www-data /var/www/html/laravel_project
      chmod -R 755 /var/www/html/laravel_project/storage /var/www/html/laravel_project/bootstrap/cache
      
    1. 可选的数据与结构操作
    • 仅结构/迁移:
      php artisan migrate --force
      
    • 迁移并填充(谨慎,避免重复数据):
      php artisan migrate --force
      php artisan db:seed --force
      
    1. 验证
    • 访问站点与健康检查接口,查看 Laravel 日志应用日志 是否正常

四 自动化备份与远程同步

    1. 备份脚本示例(含保留策略)
    • 保存为 /usr/local/bin/backup_laravel.sh
      #!/bin/bash
      set -e
      
      BACKUP_DIR="/home/ubuntu/backups"
      DATE=$(date +"%Y%m%d%H%M%S")
      PROJECT_ROOT="/var/www/html/laravel_project"
      DB_HOST="localhost"
      DB_USER="DB_USER"
      DB_PASS="DB_PASS"
      DB_NAME="DB_NAME"
      
      mkdir -p "$BACKUP_DIR"
      
      # 项目文件
      tar -czvf "$BACKUP_DIR/laravel_project_$DATE.tar.gz" -C "$PROJECT_ROOT" .
      
      # 数据库(压缩导出)
      mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" \
        | gzip > "$BACKUP_DIR/db_$DATE.sql.gz"
      
      # 仅保留最近 30 天
      find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +30 -delete
      find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +30 -delete
      
      echo "Backup completed at $DATE"
      
    • 赋权:
      chmod +x /usr/local/bin/backup_laravel.sh
      
    1. 定时任务(cron)
    • 每天 01:00 执行:
      sudo crontab -e
      # 添加
      0 1 * * * /usr/local/bin/backup_laravel.sh >> /var/log/backup.log 2>&1
      
    1. 远程同步(可选)
    • 使用 scp/rsync 定期将备份目录同步到远程主机或对象存储挂载点
    • 示例(每日同步前一天的压缩包):
      0 2 * * * rsync -avz --include='*/' --include='*.tar.gz' --include='*.sql.gz' --exclude='*' \
        /home/ubuntu/backups/ user@remote:/path/to/remote/backup/
      
  • 说明:
    • 为安全起见,建议将 DB_PASS 写入配置文件并由 root 用户执行脚本,或使用 ~/.my.cnf 免密配置(权限设为 600

五 常见问题与最佳实践

  • 安全性
    • .env 与备份文件包含敏感信息,设置严格权限并加密存储;远程传输使用 SCP/RSYNC over SSH
    • 备份完成后及时验证可用性与完整性(抽样解压/导入测试)
  • 一致性
    • 备份时尽量避免写入高峰;数据库导出期间避免执行会改写数据的任务
  • 版本与迁移
    • 跨版本恢复时,先核对 PHP、Laravel、扩展 版本;必要时按依赖顺序执行迁移
  • 存储与保留
    • 采用时间戳定期清理策略(如保留 30 天),避免磁盘被占满
  • 故障恢复演练
    • 定期在预备环境演练恢复流程,记录恢复耗时与问题清单,优化脚本与流程

0