diff --git a/试验用脚本 b/试验用脚本 index 65b84c8..2746719 100644 --- a/试验用脚本 +++ b/试验用脚本 @@ -1,173 +1,86 @@ -cat > instant-r2-setup.sh << 'EOF' +cat > fix-r2-setup.sh << 'EOF' #!/bin/bash -# Cloudflare R2 一步到位配置脚本 echo "========================================" -echo " Cloudflare R2 一键配置脚本" +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 -} +echo "使用以下配置:" +echo "Endpoint: $ENDPOINT" +echo "Access Key: ${ACCESS_KEY:0:8}..." +echo "Secret Key: ${SECRET_KEY:0:8}..." -# 自动配置 R2 -configure_r2() { - log "配置 Cloudflare R2..." +# 删除旧配置 +echo "删除旧配置..." +rclone config delete "$REMOTE_NAME" --quiet > /dev/null 2>&1 + +# 方法1: 使用 Cloudflare provider (推荐) +echo "方法1: 使用 Cloudflare provider..." +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 + echo "✓ 方法1配置成功" +else + echo "方法1失败,尝试方法2..." - # 删除旧配置 - rclone config delete "$REMOTE_NAME" --quiet > /dev/null 2>&1 - - # 创建新配置 + # 方法2: 使用 Other provider rclone config create "$REMOTE_NAME" s3 \ - provider Cloudflare \ + provider Other \ access_key_id "$ACCESS_KEY" \ secret_access_key "$SECRET_KEY" \ endpoint "$ENDPOINT" \ - region auto \ + region "" \ acl private \ --non-interactive - - if [ $? -eq 0 ]; then - log "R2 配置成功" - return 0 - else - error "R2 配置失败" - return 1 - fi -} +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 -} +echo "测试配置..." +echo "1. 测试基本连接..." +if rclone lsd "$REMOTE_NAME": --config /root/.config/rclone/rclone.conf 2>/dev/null; then + echo "✓ 基本连接成功" +else + echo "基本连接失败,但配置可能仍然有效" + echo "请手动创建存储桶后测试" +fi -# 创建使用脚本 -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 +# 显示使用说明 +echo "" +echo "========================================" +echo " 配置完成!下一步操作" +echo "========================================" +echo "" +echo "1. 在 Cloudflare 控制台创建存储桶:" +echo " - 登录 https://dash.cloudflare.com" +echo " - 进入 R2 → 创建存储桶" +echo " - 输入存储桶名称(如: my-backups)" +echo "" +echo "2. 测试配置(创建存储桶后):" +echo " rclone lsd $REMOTE_NAME:" +echo " rclone mkdir $REMOTE_NAME:你的存储桶名称" +echo " rclone ls $REMOTE_NAME:你的存储桶名称" +echo "" +echo "3. 如果仍有问题,检查:" +echo " - API 令牌是否有足够权限" +echo " - 存储桶是否已创建" +echo " - 网络连接是否正常" +echo "" +echo "配置文件名: $REMOTE_NAME" +echo "Endpoint: $ENDPOINT" EOF -chmod +x instant-r2-setup.sh && ./instant-r2-setup.sh +chmod +x fix-r2-setup.sh +./fix-r2-setup.sh