base.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import os
  2. from pathlib import Path
  3. from typing import Optional
  4. from pydantic import BaseSettings, Field, AnyUrl, validator
  5. from dotenv import load_dotenv
  6. import os
  7. # 在 Settings 类之前加载 .env 文件
  8. load_dotenv(os.path.join(os.path.dirname(__file__), '../.env'))
  9. class Settings(BaseSettings):
  10. # 环境标识
  11. ENV: str = "prod" # prod/dev
  12. ENABLE_ALIYUN_LOG: bool = True
  13. # 路径配置
  14. PROJECT_ROOT: Path = Path(__file__).parent.parent.resolve()
  15. LOG_DIR: Path = PROJECT_ROOT / "logs"
  16. # 日志配置
  17. LOG_LEVEL: str = "INFO"
  18. # 阿里云数据库配置 (RDS)
  19. DB_HOST: str = Field(..., env="DB_HOST")
  20. DB_PORT: int = Field(3306, env="DB_PORT")
  21. DB_USER: str = Field(..., env="DB_USER")
  22. DB_PASSWORD: str = Field(..., env="DB_PASSWORD")
  23. DB_NAME: str = Field(..., env="DB_NAME")
  24. DB_CHARSET: str = Field(..., env="DB_CHARSET")
  25. DB_POOL_SIZE: int = 20
  26. DB_POOL_RECYCLE: int = 3600
  27. # 阿里云RocketMQ配置
  28. ROCKETMQ_ENDPOINT: AnyUrl = Field(..., env="ROCKETMQ_ENDPOINT")
  29. ROCKETMQ_ACCESS_KEY_ID: str = Field(..., env="ROCKETMQ_ACCESS_KEY_ID")
  30. ROCKETMQ_ACCESS_KEY_SECRET: str = Field(..., env="ROCKETMQ_ACCESS_KEY_SECRET")
  31. ROCKETMQ_INSTANCE_ID: str = Field(..., env="ROCKETMQ_INSTANCE_ID")
  32. ROCKETMQ_WAIT_SECONDS: int = 10
  33. ROCKETMQ_BATCH: int = 1
  34. # 连接池配置
  35. CONNECTION_TIMEOUT: int = 10
  36. REQUEST_TIMEOUT: int = 30
  37. # 阿里云日志
  38. ALIYUN_ACCESS_KEY_ID: str = Field(..., env="ALIYUN_ACCESS_KEY_ID")
  39. ALIYUN_ACCESS_KEY_SECRET: str = Field(..., env="ALIYUN_ACCESS_KEY_SECRET")
  40. class Config:
  41. env_file = ".env"
  42. env_file_encoding = 'utf-8'
  43. case_sensitive = False
  44. # @property
  45. # def database_url(self) -> str:
  46. # """生成安全的数据库连接字符串"""
  47. # return f"mysql+asyncmy://{self.DB_USER}:{self.DB_PASSWORD}@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}?charset={self.DB_CHARSET}"
  48. settings = Settings()
  49. # 自动创建日志目录
  50. os.makedirs(settings.LOG_DIR, exist_ok=True)