debian

Debian Nginx自动备份策略

小樊
35
2025-12-27 16:36:46
栏目: 智能运维

Debian 上可落地的 Nginx 自动备份策略


一 备份范围与频率建议


二 自动化备份脚本与定时任务

#!/usr/bin/env bash
set -Eeuo pipefail

# 配置
BACKUP_DIR="/var/backups/nginx"
DATE=$(date +"%Y%m%d%H%M%S")
KEEP_DAYS=7

# 创建目录
mkdir -p "$BACKUP_DIR"

# 备份 Nginx 配置
tar -czf "$BACKUP_DIR/nginx_conf_$DATE.tar.gz" -C / etc/nginx

# 备份网站文件(按实际 root 调整)
tar -czf "$BACKUP_DIR/www_$DATE.tar.gz" -C / var/www

# 备份证书(两种常见路径,按实际启用其一)
if [[ -d /etc/letsencrypt ]]; then
  tar -czf "$BACKUP_DIR/letsencrypt_$DATE.tar.gz" -C / etc/letsencrypt
elif [[ -d /etc/ssl ]]; then
  tar -czf "$BACKUP_DIR/ssl_$DATE.tar.gz" -C / etc/ssl
fi

# 可选:备份数据库(示例为 MySQL,按需启用)
# mysqldump -u root -p"$DB_PASS" --single-transaction --routines --triggers --databases your_db > "$BACKUP_DIR/db_$DATE.sql"
# gzip "$BACKUP_DIR/db_$DATE.sql"

# 清理旧备份
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +$KEEP_DAYS -delete

# 可选:上传到远程存储(示例 rsync)
# rsync -avz --delete "$BACKUP_DIR/" backup@backup.example.com:/backups/nginx/
chmod +x /usr/local/bin/nginx_backup.sh
sudo crontab -e
# 添加:
0 2 * * * /usr/local/bin/nginx_backup.sh >> /var/log/nginx_backup.log 2>&1

三 日志轮转与清理

#!/usr/bin/env bash
LOG_DIR="/var/log/nginx"
DAYS_TO_KEEP=30
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

# 切割
[[ -f "$LOG_DIR/access.log" ]] && mv "$LOG_DIR/access.log" "$LOG_DIR/access_$YESTERDAY.log"
[[ -f "$LOG_DIR/error.log" ]]  && mv "$LOG_DIR/error.log"  "$LOG_DIR/error_$YESTERDAY.log"

# 通知 Nginx 重新打开日志文件
if [[ -f /var/run/nginx.pid ]]; then
  kill -USR1 "$(cat /var/run/nginx.pid)"
fi

# 压缩
gzip -f "$LOG_DIR/access_$YESTERDAY.log"
gzip -f "$LOG_DIR/error_$YESTERDAY.log"

# 清理
find "$LOG_DIR" -type f -name "access_*.log.gz" -mtime +$DAYS_TO_KEEP -delete
find "$LOG_DIR" -type f -name "error_*.log.gz"  -mtime +$DAYS_TO_KEEP -delete

echo "$(date '+%F %T') 日志切割、压缩与清理完成。" >> "$LOG_DIR/nginx_log_cleanup.log"
sudo chmod +x /usr/local/bin/rotate_compress_clean_nginx_logs.sh
sudo crontab -e
# 添加:
0 0 * * * /usr/local/bin/rotate_compress_clean_nginx_logs.sh

四 恢复流程与验证

sudo systemctl stop nginx
# 示例:恢复配置
sudo tar -xzvf /var/backups/nginx/nginx_conf_YYYYMMDDHHMMSS.tar.gz -C /
# 语法检查
sudo nginx -t
sudo systemctl start nginx
sudo tar -xzvf /var/backups/nginx/www_YYYYMMDDHHMMSS.tar.gz -C /
sudo tar -xzvf /var/backups/nginx/letsencrypt_YYYYMMDDHHMMSS.tar.gz -C /  # 或 ssl_*.tar.gz
gunzip < /var/backups/nginx/db_YYYYMMDDHHMMSS.sql.gz | mysql -u root -p
# 或 psql -U postgres < db_YYYYMMDDHHMMSS.sql

五 安全与运维要点

0
看了该问题的人还看了