Ver Fonte

dev:配置minio

ZengChao há 1 mês atrás
pai
commit
ceaaf1042e

+ 4 - 1
requirements/base.txt

@@ -48,4 +48,7 @@ pymilvus==2.6.6
 
 # LangChain相关
 langchain-openai==1.1.7
-langchain-milvus==0.3.3
+langchain-milvus==0.3.3
+
+# minio客户端
+minio>=7.2.2

+ 0 - 3
requirements/requirements.txt

@@ -69,6 +69,3 @@ ipdb==0.13.13
 mkdocs==1.5.3
 mkdocs-material==9.4.8
 
-# langchain
-langchain_openai==
-langchain_milvus==

+ 107 - 0
src/app/base/minio_connection.py

@@ -0,0 +1,107 @@
+"""
+Minio对象存储连接管理
+"""
+import logging
+from typing import Optional
+from minio import Minio
+
+# 导入配置
+from app.core.config import config_handler
+
+logger = logging.getLogger(__name__)
+
+_minio_manager = None
+
+
+class MinioManager:
+    """Minio管理器"""
+    
+    def __init__(self):
+        self.endpoint: str = config_handler.get("admin_app", "MINIO_ENDPOINT", "192.168.91.15:19000")
+        self.access_key: str = config_handler.get("admin_app", "MINIO_ACCESS_KEY", "HVFOa38zUDg3X6c14hpH")
+        self.secret_key: str = config_handler.get("admin_app", "MINIO_SECRET_KEY", "ilVITuWEmjG0YDBAWspSG6UniHpEoMDECSuCo0f1")
+        self.secure: bool = config_handler.get_bool("admin_app", "MINIO_USE_SSL", False)
+        self.bucket_name: str = config_handler.get("admin_app", "MINIO_BUCKET_NAME", "aidata")
+        self.base_path: str = config_handler.get("admin_app", "MINIO_BASE_PATH", "sampledata")
+        
+        logger.info(f"初始化 MinioClient: endpoint={self.endpoint}, bucket={self.bucket_name}")
+        
+        # 延迟初始化 client
+        self._client = None
+    
+    @property
+    def client(self) -> Minio:
+        """获取 Minio 客户端(延迟初始化)"""
+        if self._client is None:
+            try:
+                self._client = Minio(
+                    self.endpoint,
+                    access_key=self.access_key,
+                    secret_key=self.secret_key,
+                    secure=self.secure
+                )
+                logger.info("Minio客户端初始化成功")
+                
+                # 确保 bucket 存在
+                if not self._client.bucket_exists(self.bucket_name):
+                    self._client.make_bucket(self.bucket_name)
+                    logger.info(f"创建Minio bucket: {self.bucket_name}")
+                else:
+                    logger.info(f"Minio bucket已存在: {self.bucket_name}")
+                    
+            except Exception as e:
+                logger.error(f"Minio客户端初始化失败: {e}")
+                raise
+        return self._client
+    
+    def close(self) -> None:
+        """关闭 Minio 连接(Minio SDK 不需要显式关闭)"""
+        if self._client:
+            logger.info("Minio连接已关闭")
+            self._client = None
+
+
+def get_minio_manager() -> MinioManager:
+    """
+    获取全局唯一的 MinioManager 实例(单例模式)
+    
+    Returns:
+        MinioManager: Minio管理器实例
+    """
+    global _minio_manager
+    if _minio_manager is None:
+        _minio_manager = MinioManager()
+    return _minio_manager
+
+
+def get_minio_client() -> Minio:
+    """
+    获取 Minio 客户端
+    
+    Returns:
+        Minio: Minio客户端实例
+    """
+    manager = get_minio_manager()
+    return manager.client
+
+
+def get_bucket_name() -> str:
+    """
+    获取默认的 Bucket 名称
+    
+    Returns:
+        str: Bucket名称
+    """
+    manager = get_minio_manager()
+    return manager.bucket_name
+
+
+def get_base_path() -> str:
+    """
+    获取默认的基础路径
+    
+    Returns:
+        str: 基础路径
+    """
+    manager = get_minio_manager()
+    return manager.base_path

+ 18 - 0
src/app/config/settings.py

@@ -85,6 +85,24 @@ class Settings(BaseSettings):
     MILVUS_USER: Optional[str] = "lq"
     MILVUS_PASSWORD: Optional[str] = "lq123456!"
     
+    # MinIO配置
+    MINIO_ENDPOINT: str = "192.168.91.15:19000"
+    MINIO_ACCESS_KEY: str = "HVFOa38zUDg3X6c14hpH"
+    MINIO_SECRET_KEY: str = "ilVITuWEmjG0YDBAWspSG6UniHpEoMDECSuCo0f1"
+    MINIO_BUCKET_NAME: str = "aidata"
+    MINIO_USE_SSL: bool = False
+    MINIO_BASE_PATH: str = "sampledata"
+    
+    # MinERU配置
+    MINERU_TOKEN: str = "eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiI1MzgwMDYyNSIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc2Nzg1OTg5NywiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiMTgwMzA5ODIxNTQiLCJvcGVuSWQiOm51bGwsInV1aWQiOiI0NTYyZTUyNi1iZjE3LTRhMmItODExMi04YmM5ZjNjYzMwZGMiLCJlbWFpbCI6IiIsImV4cCI6MTc2OTA2OTQ5N30.mNH7afPPANNQq_BRsBOlbk-2P7e_ewdfzPQXO4woeoT15mDEbPKc45Auk_BuRuNaAS-Gm2GK3qKGjQ2VDtepvA"
+    MINERU_API_APPLY: str = "https://mineru.net/api/v4/file-urls/batch"
+    MINERU_API_BATCH_RESULT: str = "https://mineru.net/api/v4/extract-results/batch/{}"
+    
+    # embedding模型配置
+    EMBEDDING_BASE_URL: str = "http://192.168.91.253:9003/v1"
+    EMBEDDING_MODEL: str = "Qwen3-Embedding-8B"
+    EMBEDDING_API_KEY: str = "dummy"
+    
     @field_validator("ALLOWED_EXTENSIONS", mode="before")
     @classmethod
     def parse_allowed_extensions(cls, v):