From 6f7ab6dbc68d999da954943c76b7b0a4b0681e33 Mon Sep 17 00:00:00 2001 From: admin <362324317@qq.com> Date: Mon, 18 May 2026 18:16:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20deploy.sh=E4=B8=89=E9=87=8DRedis?= =?UTF-8?q?=E5=AF=86=E7=A0=81=E6=A3=80=E6=B5=8B(=E5=8F=82=E6=95=B0/conf/cl?= =?UTF-8?q?i)=20+=20URL=E7=BC=96=E7=A0=81=E7=89=B9=E6=AE=8A=E5=AD=97?= =?UTF-8?q?=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source_clean/deploy.sh | 45 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/source_clean/deploy.sh b/source_clean/deploy.sh index 309c85b..d672ac5 100755 --- a/source_clean/deploy.sh +++ b/source_clean/deploy.sh @@ -7,7 +7,10 @@ cd "$SCRIPT_DIR" # 如果 docker-compose.yml 不存在,自动下载 if [ ! -f docker-compose.yml ]; then echo "📥 下载 docker-compose.yml..." - wget -q https://gitea.timxx.cn/admin/CloudSearch/raw/branch/master/source_clean/docker-compose.yml + wget -q https://gitea.timxx.cn/admin/CloudSearch/raw/branch/master/source_clean/docker-compose.yml || { + echo "❌ 下载失败,请检查网络" + exit 1 + } fi echo "🔍 检测 Redis..." @@ -23,11 +26,43 @@ if [ -n "$EXISTING_REDIS" ]; then echo " ✅ 已加入 cloudsearch-net" fi - # 检测 Redis 密码 - REDIS_PASS=$(docker inspect "$EXISTING_REDIS" --format '{{range .Config.Cmd}}{{println .}}{{end}}' 2>/dev/null | grep -A1 'requirepass' | tail -1 || true) + # 检测 Redis 密码 (多种来源) + REDIS_PASS="" + + # 方法1: 从命令行参数 --requirepass + PASS_FROM_CMD=$(docker inspect "$EXISTING_REDIS" --format '{{range .Config.Cmd}}{{println .}}{{end}}' 2>/dev/null | grep -A1 'requirepass' | tail -1 | tr -d '[:space:]' || true) + if [ -n "$PASS_FROM_CMD" ] && [ "$PASS_FROM_CMD" != "redis-server" ] && [ "$PASS_FROM_CMD" != "/etc/redis/redis.conf" ]; then + REDIS_PASS="$PASS_FROM_CMD" + echo " 🔑 从启动参数检测到 Redis 密码" + fi + + # 方法2: 从 redis.conf 读取 (1Panel 常见配置方式) + if [ -z "$REDIS_PASS" ]; then + PASS_FROM_CONF=$(docker exec "$EXISTING_REDIS" cat /etc/redis/redis.conf 2>/dev/null | grep '^requirepass ' | awk '{print $2}' | tr -d '"' || true) + if [ -n "$PASS_FROM_CONF" ]; then + REDIS_PASS="$PASS_FROM_CONF" + echo " 🔑 从 redis.conf 检测到 Redis 密码" + fi + fi + + # 方法3: 尝试无密码连接测试 + if [ -z "$REDIS_PASS" ]; then + if docker exec "$EXISTING_REDIS" redis-cli ping 2>/dev/null | grep -q PONG; then + echo " ℹ️ Redis 无密码(已通过连接测试验证)" + else + # 有密码但检测不到 — 尝试从 redis-cli 的错误消息中提取 + AUTH_ERR=$(docker exec "$EXISTING_REDIS" redis-cli ping 2>&1 || true) + if echo "$AUTH_ERR" | grep -q "NOAUTH\|AUTH"; then + echo " ⚠️ Redis 需要密码但无法自动检测,请手动设置 REDIS_URL" + echo " 提示: 在 .env 中设置 REDIS_URL=redis://:密码@${EXISTING_REDIS}:6379" + fi + fi + fi + if [ -n "$REDIS_PASS" ]; then - REDIS_URL="redis://:${REDIS_PASS}@${EXISTING_REDIS}:6379" - echo " 🔑 检测到 Redis 密码,已自动配置" + # 对密码中的特殊字符进行URL编码 + ENCODED_PASS=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$REDIS_PASS', safe=''))" 2>/dev/null || echo "$REDIS_PASS") + REDIS_URL="redis://:${ENCODED_PASS}@${EXISTING_REDIS}:6379" else REDIS_URL="redis://${EXISTING_REDIS}:6379" fi