config.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. import os
  2. import platform
  3. def get_environment():
  4. """
  5. 获取当前运行环境
  6. 优先级:
  7. 1. 环境变量 FLASK_ENV
  8. 2. 根据操作系统自动判断(Windows -> development, Linux -> production)
  9. """
  10. # 首先检查环境变量
  11. env = os.environ.get("FLASK_ENV")
  12. if env:
  13. return env.lower()
  14. # 根据操作系统判断
  15. system = platform.system().lower()
  16. if system == "windows":
  17. return "development"
  18. elif system == "linux":
  19. return "production"
  20. else:
  21. return "development" # 其他系统默认使用开发环境
  22. class BaseConfig:
  23. """基础配置类,包含所有环境共享的配置"""
  24. SECRET_KEY = os.environ.get("SECRET_KEY") or "you-will-never-guess"
  25. JSON_AS_ASCII = False
  26. JSONIFY_PRETTYPRINT_REGULAR = True
  27. JSON_SORT_KEYS = False
  28. # 平台特定配置
  29. PLATFORM = platform.system().lower()
  30. # 文件上传配置
  31. ALLOWED_EXTENSIONS = {
  32. "txt",
  33. "pdf",
  34. "png",
  35. "jpg",
  36. "jpeg",
  37. "gif",
  38. "xlsx",
  39. "xls",
  40. "csv",
  41. "sql",
  42. "dll",
  43. "docx",
  44. "doc",
  45. }
  46. # 数据抽取配置
  47. DATA_EXTRACT_BATCH_SIZE = 1000 # 每批处理的记录数
  48. # PostgreSQL 基础配置
  49. SQLALCHEMY_ENGINE_OPTIONS = {
  50. "pool_pre_ping": True,
  51. "pool_recycle": 300,
  52. "pool_size": 10,
  53. "max_overflow": 20,
  54. }
  55. # LLM基础配置
  56. LLM_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
  57. LLM_MODEL_NAME = "qwen-turbo"
  58. # LLM_API_KEY = os.environ.get('LLM_API_KEY', "sk-86d4622141d74e9a8d7c38ee873c4d91")
  59. LLM_API_KEY = os.environ.get("LLM_API_KEY", "sk-db68e37f00974031935395315bfe07f0")
  60. # Qwen VL模型配置 - 用于图片解析
  61. QWEN_API_KEY = os.environ.get("QWEN_API_KEY", "sk-db68e37f00974031935395315bfe07f0")
  62. QWEN_API_URL = "https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"
  63. # Qwen API配置 - 用于文本生成(替代Deepseek)
  64. QWEN_TEXT_API_KEY = os.environ.get(
  65. "QWEN_TEXT_API_KEY", "sk-db68e37f00974031935395315bfe07f0"
  66. )
  67. QWEN_TEXT_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
  68. QWEN_TEXT_MODEL = "qwen-turbo"
  69. # 日志基础配置
  70. LOG_FORMAT = "%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s"
  71. LOG_ENCODING = "UTF-8"
  72. LOG_ENABLED = True
  73. # DataFlow 配置
  74. DATAFLOW_SCHEMA = os.environ.get("DATAFLOW_SCHEMA", "dags")
  75. # n8n 工作流引擎配置
  76. N8N_API_URL = os.environ.get("N8N_API_URL", "https://n8n.citupro.com")
  77. N8N_API_KEY = os.environ.get(
  78. "N8N_API_KEY",
  79. "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4MTcyNzlmMC1jNTQwLTQyMTEtYjczYy1mNjU4OTI5NTZhMmUiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwiaWF0IjoxNzY2NTcyMDg0fQ.QgiUa5tEM1IGZSxhqFaWtdKvwk1SvoRmqdRovTT254M",
  80. )
  81. N8N_API_TIMEOUT = int(os.environ.get("N8N_API_TIMEOUT", "30"))
  82. # DataOps 平台 API 基础 URL(用于 n8n 工作流回调等)
  83. API_BASE_URL = os.environ.get(
  84. "API_BASE_URL", "https://company.citupro.com:18183/api"
  85. )
  86. class DevelopmentConfig(BaseConfig):
  87. """Windows 开发环境配置"""
  88. FLASK_ENV = "development"
  89. DEBUG = True
  90. PORT = 5500
  91. # 开发环境 MinIO 配置
  92. MINIO_HOST = "localhost:9000"
  93. MINIO_USER = "citu-test"
  94. MINIO_PASSWORD = "citu-test"
  95. MINIO_SECURE = False
  96. MINIO_BUCKET = "dataops-bucket"
  97. PREFIX = ""
  98. # 开发环境 PostgreSQL 配置
  99. SQLALCHEMY_DATABASE_URI = "postgresql://postgres:postgres@localhost:5432/dataops"
  100. # 开发环境 Neo4j 配置
  101. NEO4J_URI = "bolt://localhost:7687"
  102. NEO4J_HTTP_URI = "http://localhost:7474"
  103. NEO4J_USER = "neo4j"
  104. NEO4J_PASSWORD = "Passw0rd"
  105. NEO4J_ENCRYPTED = False
  106. # 开发环境文件路径配置
  107. UPLOAD_BASE_PATH = "C:\\tmp\\upload"
  108. ARCHIVE_BASE_PATH = "C:\\tmp\\archive"
  109. # 开发环境日志配置
  110. LOG_LEVEL = "DEBUG"
  111. LOG_FILE = "flask_development.log"
  112. LOG_TO_CONSOLE = True
  113. # 开发环境 Airflow 配置
  114. AIRFLOW_BASE_URL = "http://localhost:8080"
  115. AIRFLOW_AUTH_USER = "admin"
  116. AIRFLOW_AUTH_PASSWORD = "admin"
  117. class ProductionConfig(BaseConfig):
  118. """Linux 生产环境配置"""
  119. FLASK_ENV = "production"
  120. DEBUG = False
  121. PORT = 80
  122. # 生产环境 MinIO 配置
  123. MINIO_HOST = "192.168.3.143:9000"
  124. MINIO_USER = "citu-dataops-acc-key"
  125. MINIO_PASSWORD = "citu-dataops-secret-key"
  126. MINIO_SECURE = False
  127. MINIO_BUCKET = "dataops-bucket"
  128. PREFIX = ""
  129. # 生产环境 PostgreSQL 配置
  130. SQLALCHEMY_DATABASE_URI = os.environ.get(
  131. "DATABASE_URL", "postgresql://postgres:dataOps@192.168.3.143:5432/dataops"
  132. )
  133. # 生产环境 Neo4j 配置
  134. NEO4J_URI = os.environ.get("NEO4J_URI", "bolt://192.168.3.143:7687")
  135. NEO4J_HTTP_URI = os.environ.get("NEO4J_HTTP_URI", "http://192.168.3.143:7474")
  136. NEO4J_USER = os.environ.get("NEO4J_USER", "neo4j")
  137. NEO4J_PASSWORD = os.environ.get("NEO4J_PASSWORD", "cituneo4j")
  138. NEO4J_ENCRYPTED = False
  139. # 生产环境文件路径配置
  140. UPLOAD_BASE_PATH = "/data/upload"
  141. ARCHIVE_BASE_PATH = "/data/archive"
  142. # 生产环境日志配置
  143. LOG_LEVEL = "INFO"
  144. LOG_FILE = "flask_production.log"
  145. LOG_TO_CONSOLE = False
  146. # 生产环境 Airflow 配置
  147. AIRFLOW_BASE_URL = os.environ.get("AIRFLOW_BASE_URL", "http://192.168.3.143:8080")
  148. AIRFLOW_AUTH_USER = os.environ.get("AIRFLOW_AUTH_USER", "admin")
  149. AIRFLOW_AUTH_PASSWORD = os.environ.get("AIRFLOW_AUTH_PASSWORD", "admin")
  150. # 配置字典
  151. config = {
  152. "development": DevelopmentConfig,
  153. "production": ProductionConfig,
  154. "default": DevelopmentConfig,
  155. }
  156. # 获取当前环境
  157. current_env = get_environment()