94 lines
2.9 KiB
Bash
94 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# ============================================
|
|
# Xray 备份脚本
|
|
# 备份 Xray 配置 / 部署配置 / 网络调优参数
|
|
# 输出目录默认 /var/backups/xray,自动清理 30 天前的旧备份
|
|
# ============================================
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
log() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
|
error() { echo -e "${RED}[ERROR]${NC} $*" >&2; }
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
error "请使用 root 用户运行: sudo bash backup.sh"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f .env ]; then
|
|
sed -i 's/\r$//' .env
|
|
set -a; source .env; set +a
|
|
fi
|
|
|
|
BACKUP_DIR="${BACKUP_DIR:-/var/backups/xray}"
|
|
KEEP_DAYS="${BACKUP_KEEP_DAYS:-30}"
|
|
STAMP="$(date '+%Y%m%d%H%M%S')"
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
chmod 700 "$BACKUP_DIR"
|
|
|
|
backed_up=0
|
|
|
|
# ===== 1. Xray 配置 =====
|
|
# 打包 /usr/local/etc/xray 整个目录,恢复时 tar xzf ... -C /usr/local/etc/
|
|
if [ -d /usr/local/etc/xray ]; then
|
|
tar czf "${BACKUP_DIR}/xray_config_${STAMP}.tar.gz" -C /usr/local/etc xray
|
|
log "Xray 配置已备份: ${BACKUP_DIR}/xray_config_${STAMP}.tar.gz"
|
|
backed_up=$((backed_up + 1))
|
|
else
|
|
warn "/usr/local/etc/xray 不存在,跳过"
|
|
fi
|
|
|
|
# ===== 2. 部署配置(.env + 脚本)=====
|
|
# .env 含私钥,打包后权限收紧到 600
|
|
deploy_files=()
|
|
for f in .env deploy.sh uninstall.sh backup.sh upload.sh .env.example; do
|
|
[ -f "$f" ] && deploy_files+=("$f")
|
|
done
|
|
if [ "${#deploy_files[@]}" -gt 0 ]; then
|
|
tar czf "${BACKUP_DIR}/deploy_${STAMP}.tar.gz" -C "$SCRIPT_DIR" "${deploy_files[@]}"
|
|
chmod 600 "${BACKUP_DIR}/deploy_${STAMP}.tar.gz"
|
|
log "部署配置已备份: ${BACKUP_DIR}/deploy_${STAMP}.tar.gz(权限 600,含私钥)"
|
|
backed_up=$((backed_up + 1))
|
|
else
|
|
warn "未找到可备份的部署文件,跳过"
|
|
fi
|
|
|
|
# ===== 3. 网络调优参数 =====
|
|
if [ -f /etc/sysctl.d/99-xray-turbo.conf ]; then
|
|
cp /etc/sysctl.d/99-xray-turbo.conf "${BACKUP_DIR}/sysctl_${STAMP}.conf"
|
|
log "网络调优参数已备份: ${BACKUP_DIR}/sysctl_${STAMP}.conf"
|
|
backed_up=$((backed_up + 1))
|
|
else
|
|
warn "/etc/sysctl.d/99-xray-turbo.conf 不存在,跳过"
|
|
fi
|
|
|
|
if [ "$backed_up" -eq 0 ]; then
|
|
error "没有任何内容被备份,请确认 Xray 是否已部署"
|
|
exit 1
|
|
fi
|
|
|
|
# ===== 4. 清理过期备份 =====
|
|
old_count=$(find "$BACKUP_DIR" -maxdepth 1 -type f \
|
|
\( -name 'xray_config_*.tar.gz' -o -name 'deploy_*.tar.gz' -o -name 'sysctl_*.conf' \) \
|
|
-mtime "+${KEEP_DAYS}" | wc -l)
|
|
if [ "$old_count" -gt 0 ]; then
|
|
find "$BACKUP_DIR" -maxdepth 1 -type f \
|
|
\( -name 'xray_config_*.tar.gz' -o -name 'deploy_*.tar.gz' -o -name 'sysctl_*.conf' \) \
|
|
-mtime "+${KEEP_DAYS}" -delete
|
|
log "已清理 ${old_count} 个超过 ${KEEP_DAYS} 天的旧备份"
|
|
fi
|
|
|
|
echo ""
|
|
log "备份完成,目录: ${BACKUP_DIR}"
|
|
ls -lh "$BACKUP_DIR" | tail -n +2 | tail -10
|