Debian上Laravel的备份与恢复策略是什么
导读:Debian上Laravel的备份与恢复策略 一 备份范围与原则 备份范围应覆盖:数据库(如 MySQL/MariaDB 或 PostgreSQL)、代码与配置(含 .env)、用户上传与日志等存储目录(如 storage、public/...
Debian上Laravel的备份与恢复策略
一 备份范围与原则
- 备份范围应覆盖:数据库(如 MySQL/MariaDB 或 PostgreSQL)、代码与配置(含 .env)、用户上传与日志等存储目录(如 storage、public/uploads)、以及Web/SSL 配置(如 Nginx/Apache 虚拟主机与证书)。
- 原则:保持一致性(避免备份过程中写入导致的不一致)、自动化与定期(脚本 + cron)、异地与加密(至少一份异地/云存储)、可验证(定期做恢复演练)。
二 手动备份步骤
- 数据库备份
- MySQL/MariaDB:
mysqldump -u [用户名] -p[密码] [数据库名] > backup.sql - PostgreSQL:
pg_dump -U [用户名] [数据库名] > backup.sql
- MySQL/MariaDB:
- 项目文件与配置
- 打包整个项目(含 .env):
cd /var/www/your-laravel-app tar -czvf laravel_backup_$(date +%F_%H-%M-%S).tar.gz . - 单独备份关键配置与证书:
cp .env /path/to/backup/ cp /etc/nginx/sites-available/your-site.conf /path/to/backup/ cp -r /etc/ssl/certs/your-project /path/to/backup/
- 打包整个项目(含 .env):
- 存储与缓存目录
- 用户上传与日志等:
tar -czvf storage_backup_$(date +%F).tar.gz storage/ - 可选:清理并备份缓存(减少无效数据):
php artisan cache:clear php artisan config:cache tar -czvf bootstrap_cache_$(date +%F).tar.gz bootstrap/cache
- 用户上传与日志等:
- 传输到安全位置(示例为 SCP 到远程主机):
scp laravel_backup_*.tar.gz user@remote:/backup/ scp backup.sql user@remote:/backup/
三 自动化与保留策略
- 备份脚本示例(含按日分目录、清理 30 天前备份):
#!/usr/bin/env bash set -Eeuo pipefail BACKUP_DIR="/backup/laravel" PROJECT_DIR="/var/www/your-laravel-app" DB_NAME="laravel" DB_USER="laravel" DB_PASS="your_db_password" DATE=$(date +%F_%H-%M-%S) mkdir -p "$BACKUP_DIR/$DATE" # 数据库 mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_DIR/$DATE/db.sql" # 代码与配置(含 .env) tar -czf "$BACKUP_DIR/$DATE/app.tar.gz" -C "$PROJECT_DIR" . # 存储目录 tar -czf "$BACKUP_DIR/$DATE/storage.tar.gz" -C "$PROJECT_DIR" storage # 可选:清理并备份缓存 php "$PROJECT_DIR/artisan" cache:clear php "$PROJECT_DIR/artisan" config:cache tar -czf "$BACKUP_DIR/$DATE/bootstrap_cache.tar.gz" -C "$PROJECT_DIR" bootstrap/cache # 保留策略:删除 30 天前的备份 find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -mtime +30 -exec rm -rf { } + # 可选:同步到远程 # rsync -avz --delete "$BACKUP_DIR/" user@remote:/backup/laravel/ - 定时任务(每天 01:00 执行):
0 1 * * * /usr/bin/bash /opt/scripts/backup_laravel.sh > > /var/log/backup.log 2> & 1 - 建议:为脚本与备份目录设置最小权限;如用密码直写在命令中,请确保仅 root 可读;生产环境优先使用凭据文件或专用备份用户。
四 恢复流程
- 准备:确认 Web 服务与队列已停止或处于维护模式,避免恢复时写入冲突。
- 数据库恢复
- MySQL/MariaDB:
mysql -u [用户名] -p[密码] [数据库名] < backup.sql - PostgreSQL:
psql -U [用户名] [数据库名] < backup.sql
- MySQL/MariaDB:
- 代码与配置
- 解压覆盖项目:
tar -xzvf app_backup_*.tar.gz -C /var/www/your-laravel-app - 恢复 .env 与证书:
cp /backup/.env /var/www/your-laravel-app/.env cp /backup/your-site.conf /etc/nginx/sites-available/your-site.conf # 如有证书 cp -r /backup/your-project /etc/ssl/certs/your-project
- 解压覆盖项目:
- 存储与缓存
tar -xzvf storage_backup_*.tar.gz -C /var/www/your-laravel-app tar -xzvf bootstrap_cache_*.tar.gz -C /var/www/your-laravel-app - 收尾:校正权限(如 www-data 属主/属组)、重启服务、退出维护模式,并访问健康检查端点验证。
chown -R www-data:www-data /var/www/your-laravel-app/storage /var/www/your-laravel-app/bootstrap/cache systemctl reload nginx # 如有队列/调度 # systemctl restart php*-fpm
五 进阶方案与最佳实践
- 使用 spatie/laravel-backup 管理应用级备份(数据库 + 文件、通知、清理策略等):
composer require spatie/laravel-backup php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider" php artisan backup:run - 系统级与增量方案:
- rsync 增量同步:
rsync -avz --delete /var/www/your-laravel-app/ user@remote:/backup/laravel-app/ - duplicity 加密增量(适合异地/云):
duplicity --full-if-older-than 7D /var/www/your-laravel-app file:///backup/laravel-encrypted/ - BackupNinja 统一编排系统备份任务。
- rsync 增量同步:
- 安全与合规:对备份启用加密与访问控制;为 .env 与备份文件设置最小权限;定期做恢复演练并验证校验和/一致性;将备份至少一份异地/离线保存。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian上Laravel的备份与恢复策略是什么
本文地址: https://pptw.com/jishu/773851.html
