From 9f770d2934c29a832c3f6aa5c87cbe52c470a68a Mon Sep 17 00:00:00 2001 From: chenqiang Date: Mon, 10 Nov 2025 09:36:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4REDIS=5FPORT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 4 +++- redis-cli | 15 ++++++++++++--- service | 26 +++++++++++++++++--------- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ab54f80..e3991bf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,9 @@ services: restart: always volumes: - ./data:/data - command: redis-server --port ${REDIS_PORT:-6379} --requirepass ${REDIS_PASSWORD} --bind ${REDIS_BIND:-0.0.0.0} --tcp-backlog ${REDIS_TCP_BACKLOG:-511} --protected-mode ${REDIS_PROTECTED_MODE:-yes} + ports: + - ${REDIS_PORT:-6379}:6379 + command: redis-server --requirepass ${REDIS_PASSWORD} --bind ${REDIS_BIND:-0.0.0.0} --tcp-backlog ${REDIS_TCP_BACKLOG:-511} --protected-mode ${REDIS_PROTECTED_MODE:-yes} healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"] interval: 10s diff --git a/redis-cli b/redis-cli index c3ce487..4d57b18 100755 --- a/redis-cli +++ b/redis-cli @@ -12,10 +12,19 @@ load_env_variables() { # 使用direnv加载环境变量 if command -v direnv &> /dev/null; then eval "$(direnv export bash)" - # 检查REDIS_PASSWORD是否已设置 + + # 检查REDIS_PASSWORD是否已设置,如果未设置则执行direnv allow if [ -z "$REDIS_PASSWORD" ]; then - echo "错误: 密码验证失败,无法继续操作" - return 1 + echo "⚠️ 检测到需要执行direnv allow来授权环境变量文件" + direnv allow + echo "🔄 重新加载环境变量..." + eval "$(direnv export bash)" + + # 再次检查REDIS_PASSWORD是否设置 + if [ -z "$REDIS_PASSWORD" ]; then + echo "错误: 密码验证失败,无法继续操作" + return 1 + fi fi else echo "错误: 未安装direnv,请先安装direnv" diff --git a/service b/service index f2a7244..afb1294 100755 --- a/service +++ b/service @@ -26,7 +26,15 @@ load_environment() { echo "📋 正在通过direnv加载环境变量..." # 捕获direnv输出到临时文件以便检查错误 eval "$(direnv export zsh)" 2>$temp_env - + + # 检查REDIS_PASSWORD是否成功设置,如果未设置且.envrc存在,则执行direnv allow + if [ -z "$REDIS_PASSWORD" ] && [ -f ".envrc" ]; then + echo "⚠️ 检测到需要执行direnv allow来授权环境变量文件" + direnv allow + echo "🔄 重新加载环境变量..." + eval "$(direnv export zsh)" 2>$temp_env + fi + # 检查是否有错误输出 if grep -q "error" "$temp_env" || grep -q "Error" "$temp_env"; then echo "❌ 错误: 环境变量加载失败,请检查主密钥是否正确" @@ -34,29 +42,29 @@ load_environment() { rm "$temp_env" return 1 fi - + # 检查REDIS_PASSWORD是否成功设置 if [ -z "$REDIS_PASSWORD" ]; then echo "❌ 错误: Redis密码解密失败,请检查主密钥是否正确" rm "$temp_env" return 1 fi - + success=0 fi # 如果direnv加载失败或未安装,尝试直接加载.envrc if [ $success -ne 0 ]; then echo "📋 正在直接加载环境变量..." - + # 逐个处理环境变量,特别是需要特别处理REDIS_PASSWORD解密 local other_vars=$(grep -E '^export REDIS_' .envrc | grep -v 'REDIS_PASSWORD' | sed 's/^export //') - + # 导出除REDIS_PASSWORD外的其他变量 if [ ! -z "$other_vars" ]; then export $other_vars fi - + # 单独处理REDIS_PASSWORD的解密,捕获错误 local openssl_cmd=$(grep -E '^export REDIS_PASSWORD=' .envrc | sed 's/^export REDIS_PASSWORD=//') if [ ! -z "$openssl_cmd" ]; then @@ -64,7 +72,7 @@ load_environment() { # 执行解密命令并捕获错误 local decrypted_pwd=$(eval "$openssl_cmd" 2>$temp_env) local decrypted_success=$? - + # 检查解密是否成功 if [ $decrypted_success -ne 0 ] || grep -q "error" "$temp_env"; then echo "❌ 错误: 主密钥错误,解密失败!" @@ -72,13 +80,13 @@ load_environment() { rm "$temp_env" return 1 fi - + # 设置解密后的密码 export REDIS_PASSWORD="$decrypted_pwd" echo "✅ 密码解密成功" fi fi - + # 清理临时文件 rm -f "$temp_env" return 0