2025-04-09 23:58:17 +08:00
|
|
|
|
import os
|
2025-06-10 00:20:44 +08:00
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
import mysql.connector
|
2025-05-29 23:45:39 +08:00
|
|
|
|
import redis
|
2025-04-12 16:40:35 +08:00
|
|
|
|
from dotenv import load_dotenv
|
2025-05-17 15:55:37 +08:00
|
|
|
|
from elasticsearch import Elasticsearch
|
2025-06-10 00:20:44 +08:00
|
|
|
|
from minio import Minio
|
|
|
|
|
|
|
|
|
|
from .root_path import get_root_folder
|
2025-04-12 16:40:35 +08:00
|
|
|
|
|
|
|
|
|
# 加载环境变量
|
2025-06-10 00:20:44 +08:00
|
|
|
|
env_path = Path(get_root_folder()) / "docker" / ".env"
|
2025-06-01 20:46:29 +08:00
|
|
|
|
load_dotenv(env_path)
|
2025-03-28 22:45:42 +08:00
|
|
|
|
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 检测是否在Docker容器中运行
|
|
|
|
|
def is_running_in_docker():
|
|
|
|
|
# 检查是否存在/.dockerenv文件
|
2025-05-17 15:55:37 +08:00
|
|
|
|
docker_env = os.path.exists("/.dockerenv")
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 或者检查cgroup中是否包含docker字符串
|
|
|
|
|
try:
|
2025-05-17 15:55:37 +08:00
|
|
|
|
with open("/proc/self/cgroup", "r") as f:
|
|
|
|
|
return docker_env or "docker" in f.read()
|
|
|
|
|
except: # noqa: E722
|
2025-04-09 23:58:17 +08:00
|
|
|
|
return docker_env
|
|
|
|
|
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
|
|
|
|
# 根据运行环境选择合适的主机地址和端口
|
|
|
|
|
if is_running_in_docker():
|
|
|
|
|
MYSQL_HOST = "mysql"
|
|
|
|
|
MYSQL_PORT = 3306
|
2025-06-07 23:17:33 +08:00
|
|
|
|
MINIO_HOST = "minio"
|
2025-05-17 15:55:37 +08:00
|
|
|
|
MINIO_PORT = 9000
|
|
|
|
|
ES_HOST = "es01"
|
|
|
|
|
ES_PORT = 9200
|
2025-06-07 23:17:33 +08:00
|
|
|
|
REDIS_HOST = "redis"
|
|
|
|
|
REDIS_PORT = 6379
|
2025-05-17 15:55:37 +08:00
|
|
|
|
else:
|
2025-05-27 11:53:38 +08:00
|
|
|
|
MYSQL_HOST = "localhost"
|
2025-05-17 15:55:37 +08:00
|
|
|
|
MYSQL_PORT = int(os.getenv("MYSQL_PORT", "5455"))
|
2025-05-27 11:53:38 +08:00
|
|
|
|
MINIO_HOST = "localhost"
|
2025-05-17 15:55:37 +08:00
|
|
|
|
MINIO_PORT = int(os.getenv("MINIO_PORT", "9000"))
|
2025-05-27 11:53:38 +08:00
|
|
|
|
ES_HOST = "localhost"
|
2025-05-17 15:55:37 +08:00
|
|
|
|
ES_PORT = int(os.getenv("ES_PORT", "9200"))
|
2025-05-29 23:45:39 +08:00
|
|
|
|
REDIS_HOST = "localhost"
|
|
|
|
|
REDIS_PORT = int(os.getenv("REDIS_PORT", "6379"))
|
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
|
2025-03-28 22:45:42 +08:00
|
|
|
|
# 数据库连接配置
|
2025-04-12 16:40:35 +08:00
|
|
|
|
DB_CONFIG = {
|
2025-05-17 15:55:37 +08:00
|
|
|
|
"host": MYSQL_HOST,
|
|
|
|
|
"port": MYSQL_PORT,
|
2025-03-28 22:45:42 +08:00
|
|
|
|
"user": "root",
|
2025-04-12 16:40:35 +08:00
|
|
|
|
"password": os.getenv("MYSQL_PASSWORD", "infini_rag_flow"),
|
2025-03-28 22:45:42 +08:00
|
|
|
|
"database": "rag_flow",
|
2025-04-12 16:40:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# MinIO连接配置
|
|
|
|
|
MINIO_CONFIG = {
|
2025-05-17 15:55:37 +08:00
|
|
|
|
"endpoint": f"{MINIO_HOST}:{MINIO_PORT}",
|
2025-04-12 16:40:35 +08:00
|
|
|
|
"access_key": os.getenv("MINIO_USER", "rag_flow"),
|
|
|
|
|
"secret_key": os.getenv("MINIO_PASSWORD", "infini_rag_flow"),
|
2025-05-17 15:55:37 +08:00
|
|
|
|
"secure": False,
|
2025-04-12 16:40:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-04-15 00:35:33 +08:00
|
|
|
|
# Elasticsearch连接配置
|
|
|
|
|
ES_CONFIG = {
|
2025-05-17 15:55:37 +08:00
|
|
|
|
"host": f"http://{ES_HOST}:{ES_PORT}",
|
2025-04-15 00:35:33 +08:00
|
|
|
|
"user": os.getenv("ELASTIC_USER", "elastic"),
|
|
|
|
|
"password": os.getenv("ELASTIC_PASSWORD", "infini_rag_flow"),
|
2025-05-17 15:55:37 +08:00
|
|
|
|
"use_ssl": os.getenv("ES_USE_SSL", "false").lower() == "true",
|
2025-04-15 00:35:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-05-29 23:45:39 +08:00
|
|
|
|
# Redis连接配置
|
|
|
|
|
REDIS_CONFIG = {
|
|
|
|
|
"host": REDIS_HOST,
|
|
|
|
|
"port": REDIS_PORT,
|
|
|
|
|
"password": os.getenv("REDIS_PASSWORD", "infini_rag_flow"),
|
|
|
|
|
"decode_responses": False,
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-12 16:40:35 +08:00
|
|
|
|
def get_db_connection():
|
|
|
|
|
"""创建MySQL数据库连接"""
|
|
|
|
|
try:
|
|
|
|
|
conn = mysql.connector.connect(**DB_CONFIG)
|
|
|
|
|
return conn
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"MySQL连接失败: {str(e)}")
|
|
|
|
|
raise e
|
|
|
|
|
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-12 16:40:35 +08:00
|
|
|
|
def get_minio_client():
|
|
|
|
|
"""创建MinIO客户端连接"""
|
|
|
|
|
try:
|
2025-05-17 15:55:37 +08:00
|
|
|
|
minio_client = Minio(endpoint=MINIO_CONFIG["endpoint"], access_key=MINIO_CONFIG["access_key"], secret_key=MINIO_CONFIG["secret_key"], secure=MINIO_CONFIG["secure"])
|
2025-04-12 16:40:35 +08:00
|
|
|
|
return minio_client
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"MinIO连接失败: {str(e)}")
|
|
|
|
|
raise e
|
|
|
|
|
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-15 00:35:33 +08:00
|
|
|
|
def get_es_client():
|
|
|
|
|
"""创建Elasticsearch客户端连接"""
|
|
|
|
|
try:
|
|
|
|
|
# 构建连接参数
|
2025-05-17 15:55:37 +08:00
|
|
|
|
es_params = {"hosts": [ES_CONFIG["host"]]}
|
|
|
|
|
|
2025-05-29 23:45:39 +08:00
|
|
|
|
# 添加认证信息
|
2025-04-15 00:35:33 +08:00
|
|
|
|
if ES_CONFIG["user"] and ES_CONFIG["password"]:
|
|
|
|
|
es_params["basic_auth"] = (ES_CONFIG["user"], ES_CONFIG["password"])
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-05-29 23:45:39 +08:00
|
|
|
|
# 添加SSL配置
|
2025-04-15 00:35:33 +08:00
|
|
|
|
if ES_CONFIG["use_ssl"]:
|
|
|
|
|
es_params["use_ssl"] = True
|
|
|
|
|
es_params["verify_certs"] = False # 在开发环境中可以设置为False,生产环境应该设置为True
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-15 00:35:33 +08:00
|
|
|
|
es_client = Elasticsearch(**es_params)
|
|
|
|
|
return es_client
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Elasticsearch连接失败: {str(e)}")
|
|
|
|
|
raise e
|
|
|
|
|
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-05-29 23:45:39 +08:00
|
|
|
|
def get_redis_connection():
|
|
|
|
|
"""创建Redis连接"""
|
|
|
|
|
try:
|
|
|
|
|
# 使用配置创建Redis连接
|
|
|
|
|
r = redis.Redis(**REDIS_CONFIG)
|
|
|
|
|
# 测试连接
|
|
|
|
|
r.ping()
|
|
|
|
|
return r
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Redis连接失败: {str(e)}")
|
|
|
|
|
raise e
|
|
|
|
|
|
|
|
|
|
|
2025-04-12 16:40:35 +08:00
|
|
|
|
def test_connections():
|
|
|
|
|
"""测试数据库和MinIO连接"""
|
|
|
|
|
try:
|
|
|
|
|
# 测试MySQL连接
|
|
|
|
|
db_conn = get_db_connection()
|
|
|
|
|
cursor = db_conn.cursor()
|
|
|
|
|
cursor.execute("SELECT 1")
|
|
|
|
|
cursor.fetchone()
|
|
|
|
|
cursor.close()
|
|
|
|
|
db_conn.close()
|
|
|
|
|
print("MySQL连接测试成功")
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-12 16:40:35 +08:00
|
|
|
|
# 测试MinIO连接
|
|
|
|
|
minio_client = get_minio_client()
|
|
|
|
|
buckets = minio_client.list_buckets()
|
|
|
|
|
print(f"MinIO连接测试成功,共有 {len(buckets)} 个存储桶")
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-15 00:35:33 +08:00
|
|
|
|
# 测试Elasticsearch连接
|
|
|
|
|
try:
|
|
|
|
|
es_client = get_es_client()
|
|
|
|
|
es_info = es_client.info()
|
|
|
|
|
print(f"Elasticsearch连接测试成功,版本: {es_info.get('version', {}).get('number', '未知')}")
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Elasticsearch连接测试失败: {str(e)}")
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-12 16:40:35 +08:00
|
|
|
|
return True
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"连接测试失败: {str(e)}")
|
|
|
|
|
return False
|
|
|
|
|
|
2025-05-17 15:55:37 +08:00
|
|
|
|
|
2025-04-12 16:40:35 +08:00
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
# 如果直接运行此文件,则测试连接
|
2025-05-17 15:55:37 +08:00
|
|
|
|
test_connections()
|