cat > auto-config-r2.sh << 'EOF' #!/bin/bash # R2 自动配置脚本 echo "========================================" echo " Cloudflare R2 自动配置脚本" echo "========================================" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 检查 rclone 是否安装 check_rclone() { if ! command -v rclone &> /dev/null; then echo -e "${RED}错误: rclone 未安装${NC}" echo "正在安装 rclone..." curl https://rclone.org/install.sh | sudo bash if [ $? -ne 0 ]; then echo -e "${RED}rclone 安装失败${NC}" exit 1 fi fi echo -e "${GREEN}✓ rclone 已安装${NC}" } # 获取用户输入 get_user_input() { echo echo -e "${YELLOW}请输入 Cloudflare R2 配置信息:${NC}" read -p "请输入远程配置名称 [默认: cf-r2]: " REMOTE_NAME REMOTE_NAME=${REMOTE_NAME:-cf-r2} read -p "请输入 Access Key ID: " ACCESS_KEY while [ -z "$ACCESS_KEY" ]; do echo -e "${RED}Access Key ID 不能为空${NC}" read -p "请输入 Access Key ID: " ACCESS_KEY done read -p "请输入 Secret Access Key: " SECRET_KEY while [ -z "$SECRET_KEY" ]; do echo -e "${RED}Secret Access Key 不能为空${NC}" read -p "请输入 Secret Access Key: " SECRET_KEY done read -p "请输入存储桶名称: " BUCKET_NAME while [ -z "$BUCKET_NAME" ]; do echo -e "${RED}存储桶名称不能为空${NC}" read -p "请输入存储桶名称: " BUCKET_NAME done # 固定的 endpoint(根据你之前提供的) ENDPOINT="https://bb6985de87fb012b3c626aa13eda6797.r2.cloudflarestorage.com" } # 自动配置 rclone configure_rclone() { echo echo -e "${YELLOW}正在配置 rclone...${NC}" # 删除已存在的配置(如果存在) rclone config delete "$REMOTE_NAME" --quiet > /dev/null 2>&1 # 创建配置 rclone config create "$REMOTE_NAME" s3 \ provider "Other" \ access_key_id "$ACCESS_KEY" \ secret_access_key "$SECRET_KEY" \ endpoint "$ENDPOINT" \ region "auto" \ acl "private" \ --non-interactive if [ $? -eq 0 ]; then echo -e "${GREEN}✓ rclone 配置成功${NC}" else echo -e "${RED}✗ rclone 配置失败${NC}" exit 1 fi } # 测试配置 test_configuration() { echo echo -e "${YELLOW}正在测试配置...${NC}" # 测试列出存储桶 echo "测试连接性..." if rclone lsd "$REMOTE_NAME": 2>/dev/null; then echo -e "${GREEN}✓ 连接测试成功${NC}" else echo -e "${YELLOW}⚠ 无法列出存储桶,尝试直接访问指定存储桶...${NC}" fi # 测试访问指定存储桶 echo "测试存储桶访问..." if rclone lsd "$REMOTE_NAME":"$BUCKET_NAME" 2>/dev/null; then echo -e "${GREEN}✓ 存储桶访问测试成功${NC}" return 0 else # 尝试创建测试文件 echo "创建测试文件..." echo "R2 Connection Test - $(date)" > r2_test.txt if rclone copy r2_test.txt "$REMOTE_NAME":"$BUCKET_NAME"/ 2>/dev/null; then echo -e "${GREEN}✓ 写入测试成功${NC}" rm -f r2_test.txt return 0 else echo -e "${RED}✗ 配置测试失败${NC}" echo -e "${YELLOW}请检查:${NC}" echo "1. API 密钥是否正确" echo "2. 存储桶名称是否正确" echo "3. API 令牌权限是否足够" return 1 fi fi } # 创建备份脚本 create_backup_script() { cat > backup-to-r2.sh << SCRIPTEOF #!/bin/bash # 自动备份脚本到 Cloudflare R2 REMOTE="$REMOTE_NAME" BUCKET="$BUCKET_NAME" BACKUP_SOURCE="\${1:-/opt/1panel}" # 默认备份 /opt/1panel,可传入参数 BACKUP_PREFIX="1panel-backup" DATE=\$(date +%Y%m%d_%H%M%S) BACKUP_FILE="/tmp/\${BACKUP_PREFIX}_\${DATE}.tar.gz" echo "[\$(date)] 开始备份到 Cloudflare R2" # 创建备份 tar -czf "\$BACKUP_FILE" -C "\$BACKUP_SOURCE" . 2>/dev/null if [ \$? -ne 0 ]; then echo "错误: 备份文件创建失败" exit 1 fi # 上传到 R2 rclone copy "\$BACKUP_FILE" "\$REMOTE:\$BUCKET/backups/" if [ \$? -eq 0 ]; then echo "✓ 备份成功: \${BACKUP_PREFIX}_\${DATE}.tar.gz" # 清理本地备份文件(可选) rm -f "\$BACKUP_FILE" # 显示备份信息 echo "备份位置: \$REMOTE:\$BUCKET/backups/\${BACKUP_PREFIX}_\${DATE}.tar.gz" else echo "错误: 上传到 R2 失败" exit 1 fi echo "[\$(date)] 备份完成" SCRIPTEOF chmod +x backup-to-r2.sh echo -e "${GREEN}✓ 备份脚本已创建: backup-to-r2.sh${NC}" } # 显示使用说明 show_usage() { echo echo -e "${GREEN}========================================" echo " 配置完成!" echo "========================================" echo echo -e "远程配置名称: ${YELLOW}$REMOTE_NAME${NC}" echo -e "存储桶名称: ${YELLOW}$BUCKET_NAME${NC}" echo -e "Endpoint: ${YELLOW}$ENDPOINT${NC}" echo echo -e "${GREEN}使用方法:${NC}" echo "1. 测试连接: ${YELLOW}rclone lsd $REMOTE_NAME:$BUCKET_NAME${NC}" echo "2. 列出文件: ${YELLOW}rclone ls $REMOTE_NAME:$BUCKET_NAME${NC}" echo "3. 上传文件: ${YELLOW}rclone copy 文件.txt $REMOTE_NAME:$BUCKET_NAME/${NC}" echo "4. 自动备份: ${YELLOW}./backup-to-r2.sh${NC}" echo "5. 备份指定目录: ${YELLOW}./backup-to-r2.sh /path/to/backup${NC}" echo echo -e "${YELLOW}安全提醒: 请妥善保管你的 API 密钥!${NC}" echo "========================================" } # 主函数 main() { check_rclone get_user_input configure_rclone if test_configuration; then create_backup_script show_usage else echo -e "${RED}配置测试失败,请检查输入的信息${NC}" fi } # 运行主函数 main EOF # 给脚本执行权限 chmod +x auto-config-r2.sh echo "自动配置脚本已创建: auto-config-r2.sh" echo "运行命令开始配置: ./auto-config-r2.sh"