Files
KatelyaTV/KVROCKS_FIX_REPORT.md
T
katelya 82485d1939 feat: Add Docker Compose configurations for Kvrocks and Redis deployments
- Implemented `docker-compose.kvrocks.auth.yml` for Kvrocks with password authentication.
- Created `docker-compose.redis.yml` for Redis deployment.
- Added Kvrocks configuration file `kvrocks.auth.conf` with necessary settings.
- Updated documentation with deployment guidelines for Kvrocks.
- Introduced ESLint configuration for code quality.
- Developed deployment configuration check script `check-deployment-configs.js`.
- Added D1 database initialization script `d1-init.sql` for KatelyaTV.
- Created test script `test-kvrocks-deployment.js` to validate Kvrocks deployment.
- Implemented fix verification script `verify-kvrocks-fix.js` for password handling.
- Updated `wrangler.toml` for Cloudflare deployment configuration.
2025-09-04 17:55:23 +08:00

3.6 KiB
Raw Blame History

🐛 Kvrocks 部署问题修复报告

📋 问题描述

用户反馈在使用 Docker + Kvrocks 部署方案时遇到以下错误:

❌ Kvrocks Client Error: [Error]: ERR Client sent AUTH, but no password is set

🔍 问题分析

根本原因

当环境变量 KVROCKS_PASSWORD 被设置为空字符串时,Redis 客户端仍然会尝试进行密码认证,但 Kvrocks 服务端没有配置密码,导致认证失败。

问题场景

  1. 用户配置KVROCKS_PASSWORD=KVROCKS_PASSWORD=""
  2. Docker Compose${KVROCKS_PASSWORD:-} 解析为空字符串
  3. Kvrocks 服务:没有设置 requirepass,不需要密码认证
  4. 客户端行为:检测到 password: "" 参数,尝试发送 AUTH 命令
  5. 服务端响应ERR Client sent AUTH, but no password is set

🔧 修复方案

1. 客户端密码处理优化

修改 src/lib/kvrocks.db.ts 中的客户端创建逻辑:

// 修复前(有问题)
kvrocksClient = createClient({
  url: kvrocksUrl,
  password: kvrocksPassword, // 即使为空字符串也会尝试认证
  database: kvrocksDatabase,
  // ...
});

// 修复后(正确)
const clientConfig = {
  url: kvrocksUrl,
  database: kvrocksDatabase,
  // ...
};

// 只有当密码存在且不为空时才添加密码配置
if (kvrocksPassword && kvrocksPassword.trim() !== '') {
  clientConfig.password = kvrocksPassword;
  console.log('🔐 Using password authentication');
} else {
  console.log('🔓 No password authentication (connecting without password)');
}

kvrocksClient = createClient(clientConfig);

2. Docker Compose 配置分离

创建两个独立的部署配置:

  • 无密码部署docker-compose.kvrocks.yml(开发环境推荐)
  • 密码认证部署docker-compose.kvrocks.auth.yml(生产环境推荐)

3. 环境变量示例更新

更新 .env.kvrocks.example 提供清晰的配置指导:

# 选项1:不使用密码(推荐用于开发环境)
# KVROCKS_PASSWORD=

# 选项2:使用密码(推荐用于生产环境)
# KVROCKS_PASSWORD=your_secure_password_here

修复验证

测试场景覆盖

修复已通过以下场景验证:

  1. 空字符串密码KVROCKS_PASSWORD=""
  2. 未设置密码KVROCKS_PASSWORD 未定义
  3. 有效密码KVROCKS_PASSWORD="validpassword"
  4. 空格密码KVROCKS_PASSWORD=" "

验证工具

提供验证脚本 scripts/verify-kvrocks-fix.js 用于测试修复效果。

📚 部署指南

快速修复(现有部署)

如果您已经遇到此问题:

  1. 停止服务
docker-compose down
  1. 更新代码
git pull origin main
  1. 清理环境变量
# 编辑 .env 文件,确保 KVROCKS_PASSWORD 设置正确
# 选择以下之一:
# KVROCKS_PASSWORD=                    # 无密码
# KVROCKS_PASSWORD=your_password       # 有密码
  1. 重新启动
# 无密码部署
docker-compose -f docker-compose.kvrocks.yml up -d

# 或密码认证部署
docker-compose -f docker-compose.kvrocks.auth.yml up -d

新部署

请参考 docs/KVROCKS_DEPLOYMENT.md 获取完整部署指南。

🚀 改进效果

修复后的部署将:

  • 消除密码认证错误
  • 支持灵活的密码配置
  • 提供清晰的部署选项
  • 增强错误日志可读性

📞 技术支持

如果仍有问题,请:

  1. 运行测试脚本:node scripts/test-kvrocks-deployment.js
  2. 检查日志:docker-compose logs -f
  3. 参考部署文档:docs/KVROCKS_DEPLOYMENT.md