cat > instant-r2-setup.sh << 'EOF' #!/bin/bash # Cloudflare R2 一步到位配置脚本 echo "========================================" echo " Cloudflare R2 一键配置脚本" echo "========================================" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' log() { echo -e "${GREEN}[✓]${NC} $1"; } warn() { echo -e "${YELLOW}[!]${NC} $1"; } error() { echo -e "${RED}[✗]${NC} $1"; } # 使用你提供的固定信息 REMOTE_NAME="r2-storage" ACCOUNT_ID="c5F-lD9CfUvvI5wNsepuS-ghXU_exa0bgiwBgM_h" ACCESS_KEY="1204a46f27d9490d0fa37f928d6680a4" SECRET_KEY="54f24822de0265d98e8c2507d40250ba5254426b4c3b6a6745d5e688c832ac90" ENDPOINT="https://bb6985de87fb012b3c626aa13eda6797.r2.cloudflarestorage.com" # 安装 rclone install_rclone() { if command -v rclone &> /dev/null; then log "rclone 已安装" return 0 fi log "安装 rclone..." curl -s https://rclone.org/install.sh | sudo bash > /dev/null 2>&1 } # 自动配置 R2 configure_r2() { log "配置 Cloudflare R2..." # 删除旧配置 rclone config delete "$REMOTE_NAME" --quiet > /dev/null 2>&1 # 创建新配置 rclone config create "$REMOTE_NAME" s3 \ provider Cloudflare \ access_key_id "$ACCESS_KEY" \ secret_access_key "$SECRET_KEY" \ endpoint "$ENDPOINT" \ region auto \ acl private \ --non-interactive if [ $? -eq 0 ]; then log "R2 配置成功" return 0 else error "R2 配置失败" return 1 fi } # 测试配置 test_configuration() { log "测试连接..." # 先尝试列出存储桶 if rclone lsd "$REMOTE_NAME": &>/dev/null; then log "连接测试成功" return 0 fi warn "基础连接测试失败,尝试创建测试存储桶..." # 创建测试存储桶 TEST_BUCKET="test-bucket-$(date +%s)" if rclone mkdir "$REMOTE_NAME:$TEST_BUCKET" &>/dev/null; then log "测试存储桶创建成功" # 上传测试文件 echo "R2 Test File - $(date)" > /tmp/r2-test.txt if rclone copy /tmp/r2-test.txt "$REMOTE_NAME:$TEST_BUCKET/" &>/dev/null; then log "文件上传测试成功" rm -f /tmp/r2-test.txt # 清理测试存储桶 rclone purge "$REMOTE_NAME:$TEST_BUCKET" &>/dev/null rclone rmdir "$REMOTE_NAME:$TEST_BUCKET" &>/dev/null return 0 fi fi error "配置测试失败" return 1 } # 创建使用脚本 create_scripts() { log "创建管理脚本..." # 备份脚本 cat > r2-backup.sh << 'SCRIPTEOF' #!/bin/bash REMOTE="r2-storage" BUCKET="${1:-default-bucket}" SOURCE="${2:-/opt/1panel}" BACKUP_FILE="/tmp/backup-$(date +%Y%m%d_%H%M%S).tar.gz" echo "备份: $SOURCE → R2:$BUCKET" tar -czf "$BACKUP_FILE" -C "$SOURCE" . && \ rclone copy "$BACKUP_FILE" "$REMOTE:$BUCKET/backups/" && \ echo "备份成功: $(basename $BACKUP_FILE)" && \ rm -f "$BACKUP_FILE" SCRIPTEOF # 管理脚本 cat > r2-manage.sh << 'MANAGEEOF' #!/bin/bash REMOTE="r2-storage" BUCKET="$1" CMD="$2" case "$CMD" in "list") rclone lsd "$REMOTE:$BUCKET" ;; "ls") rclone ls "$REMOTE:$BUCKET" ;; "mkdir") rclone mkdir "$REMOTE:$BUCKET/$3" ;; "upload") rclone copy "$3" "$REMOTE:$BUCKET/" ;; "download") rclone copy "$REMOTE:$BUCKET/$3" "./" ;; *) echo "用法: $0 " ;; esac MANAGEEOF chmod +x r2-backup.sh r2-manage.sh } # 显示完成信息 show_complete() { echo echo "========================================" echo " 配置完成!" echo "========================================" echo echo "远程名称: $REMOTE_NAME" echo "Endpoint: $ENDPOINT" echo echo "常用命令:" echo " rclone lsd $REMOTE_NAME: # 列出存储桶" echo " ./r2-backup.sh my-bucket /opt/1panel # 备份目录" echo " ./r2-manage.sh my-bucket list # 管理文件" echo echo "现在你可以:" echo "1. 在 Cloudflare 控制台创建存储桶" echo "2. 使用上面的命令进行备份" echo } # 主流程 main() { install_rclone if configure_r2 && test_configuration; then create_scripts show_complete else error "自动配置失败" echo "请检查:" echo "1. 网络连接" echo "2. API 密钥权限" echo "3. 存储桶是否已创建" fi } main EOF chmod +x instant-r2-setup.sh && ./instant-r2-setup.sh