Files
dock/试验用脚本
2025-11-02 22:53:00 +08:00

210 lines
6.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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"