config.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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. # n8n 工作流引擎配置
  74. N8N_API_URL = os.environ.get("N8N_API_URL", "https://n8n.citupro.com")
  75. N8N_API_KEY = os.environ.get(
  76. "N8N_API_KEY",
  77. "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI4MTcyNzlmMC1jNTQwLTQyMTEtYjczYy1mNjU4OTI5NTZhMmUiLCJpc3MiOiJuOG4iLCJhdWQiOiJwdWJsaWMtYXBpIiwiaWF0IjoxNzY2NTcyMDg0fQ.QgiUa5tEM1IGZSxhqFaWtdKvwk1SvoRmqdRovTT254M",
  78. )
  79. N8N_API_TIMEOUT = int(os.environ.get("N8N_API_TIMEOUT", "30"))
  80. class DevelopmentConfig(BaseConfig):
  81. """Windows 开发环境配置"""
  82. FLASK_ENV = "development"
  83. DEBUG = True
  84. PORT = 5500
  85. # 开发环境 MinIO 配置
  86. MINIO_HOST = "localhost:9000"
  87. MINIO_USER = "citu-test"
  88. MINIO_PASSWORD = "citu-test"
  89. MINIO_SECURE = False
  90. MINIO_BUCKET = "dataops-bucket"
  91. PREFIX = ""
  92. # 开发环境 PostgreSQL 配置
  93. SQLALCHEMY_DATABASE_URI = "postgresql://postgres:postgres@localhost:5432/dataops"
  94. # 开发环境 Neo4j 配置
  95. NEO4J_URI = "bolt://localhost:7687"
  96. NEO4J_HTTP_URI = "http://localhost:7474"
  97. NEO4J_USER = "neo4j"
  98. NEO4J_PASSWORD = "Passw0rd"
  99. NEO4J_ENCRYPTED = False
  100. # 开发环境文件路径配置
  101. UPLOAD_BASE_PATH = "C:\\tmp\\upload"
  102. ARCHIVE_BASE_PATH = "C:\\tmp\\archive"
  103. # 开发环境日志配置
  104. LOG_LEVEL = "DEBUG"
  105. LOG_FILE = "flask_development.log"
  106. LOG_TO_CONSOLE = True
  107. # 开发环境 Airflow 配置
  108. AIRFLOW_BASE_URL = "http://localhost:8080"
  109. AIRFLOW_AUTH_USER = "admin"
  110. AIRFLOW_AUTH_PASSWORD = "admin"
  111. class ProductionConfig(BaseConfig):
  112. """Linux 生产环境配置"""
  113. FLASK_ENV = "production"
  114. DEBUG = False
  115. PORT = 80
  116. # 生产环境 MinIO 配置
  117. MINIO_HOST = "192.168.3.143:9000"
  118. MINIO_USER = "citu-dataops-acc-key"
  119. MINIO_PASSWORD = "citu-dataops-secret-key"
  120. MINIO_SECURE = False
  121. MINIO_BUCKET = "dataops-bucket"
  122. PREFIX = ""
  123. # 生产环境 PostgreSQL 配置
  124. SQLALCHEMY_DATABASE_URI = os.environ.get(
  125. "DATABASE_URL", "postgresql://postgres:dataOps@192.168.3.143:5432/dataops"
  126. )
  127. # 生产环境 Neo4j 配置
  128. NEO4J_URI = os.environ.get("NEO4J_URI", "bolt://192.168.3.143:7687")
  129. NEO4J_HTTP_URI = os.environ.get("NEO4J_HTTP_URI", "http://192.168.3.143:7474")
  130. NEO4J_USER = os.environ.get("NEO4J_USER", "neo4j")
  131. NEO4J_PASSWORD = os.environ.get("NEO4J_PASSWORD", "cituneo4j")
  132. NEO4J_ENCRYPTED = False
  133. # 生产环境文件路径配置
  134. UPLOAD_BASE_PATH = "/data/upload"
  135. ARCHIVE_BASE_PATH = "/data/archive"
  136. # 生产环境日志配置
  137. LOG_LEVEL = "INFO"
  138. LOG_FILE = "flask_production.log"
  139. LOG_TO_CONSOLE = False
  140. # 生产环境 Airflow 配置
  141. AIRFLOW_BASE_URL = os.environ.get("AIRFLOW_BASE_URL", "http://192.168.3.143:8080")
  142. AIRFLOW_AUTH_USER = os.environ.get("AIRFLOW_AUTH_USER", "admin")
  143. AIRFLOW_AUTH_PASSWORD = os.environ.get("AIRFLOW_AUTH_PASSWORD", "admin")
  144. # 配置字典
  145. config = {
  146. "development": DevelopmentConfig,
  147. "production": ProductionConfig,
  148. "default": DevelopmentConfig,
  149. }
  150. # 获取当前环境
  151. current_env = get_environment()