This commit is contained in:
吕新雨
2026-01-28 20:50:17 +08:00
commit 049995692d
27 changed files with 1661 additions and 0 deletions

71
server/app/core/config.py Normal file
View File

@@ -0,0 +1,71 @@
from __future__ import annotations
from functools import lru_cache
from pathlib import Path
from typing import Literal, Optional
from pydantic_settings import BaseSettings, SettingsConfigDict
def _guess_env_file(app_env: str) -> Optional[str]:
"""
根据 APP_ENV 选择 env 文件。
说明:
- `.env.dev` / `.env.prod` 不进入仓库,通常由运维在部署时放到 `server/` 目录
- 如果文件不存在,则返回 None让系统从“真实环境变量”读取
"""
base_dir = Path(__file__).resolve().parents[2] # .../server/app -> .../server
candidates = {
"dev": base_dir / ".env.dev",
"prod": base_dir / ".env.prod",
}
p = candidates.get(app_env)
if p and p.exists():
return str(p)
return None
class Settings(BaseSettings):
"""
应用配置(统一从环境变量读取)。
注意:请不要把真实账号密码写入仓库;使用 `.env.dev/.env.prod` 或部署系统注入。
"""
app_env: Literal["dev", "prod"] = "dev"
app_name: str = "mindfulness-server"
app_host: str = "0.0.0.0"
app_port: int = 8000
database_url: str
redis_url: str
celery_broker_url: str
celery_result_backend: Optional[str] = None
model_config = SettingsConfigDict(
env_prefix="",
case_sensitive=False,
extra="ignore",
)
@lru_cache
def get_settings() -> Settings:
"""
获取配置(带缓存)。
加载顺序:
- 优先使用 `.env.dev/.env.prod`(若存在)
- 否则使用系统环境变量
"""
import os
env = os.getenv("APP_ENV", "dev").strip() or "dev"
env_file = _guess_env_file(env)
return Settings(_env_file=env_file)