facc04aa65
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交 (5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。 一、docs 结构整改(整改 #14) 根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入, 随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录 树并存于 docs/,共 791 文件、双分类体系冲突。 修复动作: - b2 同名异主题文件改名迁移保全 9 个 - C 类 39 个孤立文件按主题正确归类 - A/B1 类 222 个重复文件删除(新结构已有内容副本) - 9 个旧独有空目录删除 - 270 处内部引用按 verified 映射改写 - 整改记录 #14 登记于 04-运维文档/部署运维 结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。 残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。 二、compose 双目录对齐(消除踩坑 A) - docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist 改为 src/frontend-*/dist(h5 / agent / admin / terminal) - docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/ - 效果:本地 docker compose up 不再把根目录 stale dist 挂回, 与线上一致,分叉隐患消除(已 docker compose config 校验通过) 防复发铁律: - 重构须提交;仓库修复须 git stash -u 或先 commit - 新结构须 git add 并提交,避免再次 untracked 复活 - H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
132 lines
6.1 KiB
Python
132 lines
6.1 KiB
Python
# =============================================================================
|
||
# 企微智能IT支持服务台 — 配置管理模块
|
||
# =============================================================================
|
||
# 说明:使用 pydantic-settings 从环境变量读取所有配置项
|
||
# 优先级:环境变量 > .env 文件 > 默认值
|
||
# 所有配置项集中管理,避免散落在代码各处
|
||
# =============================================================================
|
||
|
||
from typing import List
|
||
|
||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
"""应用配置类。
|
||
|
||
使用 pydantic-settings 自动从环境变量读取配置值。
|
||
支持 .env 文件自动加载(开发环境便利)。
|
||
|
||
Attributes:
|
||
wecom_corp_id: 企业微信企业ID
|
||
wecom_agent_id: 企业微信应用AgentId
|
||
wecom_secret: 企业微信应用Secret
|
||
wecom_token: 企业微信回调Token
|
||
wecom_encoding_aes_key: 企业微信回调EncodingAESKey(43位)
|
||
database_url: PostgreSQL 数据库连接地址
|
||
redis_url: Redis 连接地址
|
||
backend_host: 后端监听地址
|
||
backend_port: 后端监听端口
|
||
cors_origins: CORS 允许的源地址(逗号分隔)
|
||
"""
|
||
|
||
# ----------------------------------------------------------------------
|
||
# 企微自建应用配置
|
||
# ----------------------------------------------------------------------
|
||
# 企业ID(在企微管理后台 > 我的企业 > 企业信息 中查看)
|
||
wecom_corp_id: str = "ww1234567890abcdef"
|
||
# 应用AgentId(在企微管理后台 > 应用管理 > 自建应用 中查看)
|
||
wecom_agent_id: str = "1000002"
|
||
# 应用Secret(在企微管理后台 > 应用管理 > 自建应用 中查看)
|
||
wecom_secret: str = "your-agent-secret"
|
||
# 回调Token(在企微管理后台 > 应用管理 > 接收消息 中设置)
|
||
wecom_token: str = "your-callback-token"
|
||
# 回调EncodingAESKey(43位字符串,用于消息加解密)
|
||
wecom_encoding_aes_key: str = "your-aes-key-43-characters-long-encoding-key"
|
||
|
||
# ----------------------------------------------------------------------
|
||
# 数据库配置
|
||
# ----------------------------------------------------------------------
|
||
# PostgreSQL 连接地址
|
||
# Docker 环境使用容器名 postgres,本地开发使用 localhost
|
||
database_url: str = "postgresql://wecom:wecom_secret@localhost:5432/wecom_it_desk"
|
||
|
||
# ----------------------------------------------------------------------
|
||
# Redis 配置
|
||
# ----------------------------------------------------------------------
|
||
# Redis 连接地址
|
||
# Docker 环境使用容器名 redis,本地开发使用 localhost
|
||
redis_url: str = "redis://localhost:6379/0"
|
||
|
||
# ----------------------------------------------------------------------
|
||
# 服务配置
|
||
# ----------------------------------------------------------------------
|
||
# 后端监听地址(0.0.0.0 表示监听所有网卡)
|
||
backend_host: str = "0.0.0.0"
|
||
# 后端监听端口
|
||
backend_port: int = 8000
|
||
# CORS 允许的源地址(逗号分隔的字符串)
|
||
cors_origins: str = "http://localhost:5173,http://localhost:5174"
|
||
|
||
# ----------------------------------------------------------------------
|
||
# AI 服务配置(Dify)
|
||
# ----------------------------------------------------------------------
|
||
# Dify API 端点(兼容 OpenAI Chat Completions 格式)
|
||
# 预生产:http://yw-dify.dc.servyou-it.com/dify2openai/v1/chat/completions
|
||
dify_api_url: str = "http://yw-dify.dc.servyou-it.com/dify2openai/v1/chat/completions"
|
||
# Dify API Key(格式:base_url|app_id|app_name)
|
||
dify_api_key: str = "http://yw-dify.dc.servyou-it.com/v1|app-UaTWYdBSwN6VktKQlbh5YN5H|Chat"
|
||
# Dify API 请求超时(秒),在网络慢时可调大
|
||
dify_timeout: int = 30
|
||
|
||
# ----------------------------------------------------------------------
|
||
# AI Wingman 服务配置(Dify Agent 2 — 坐席端辅助)
|
||
# ----------------------------------------------------------------------
|
||
# 坐席端 Wingman 专用 Dify API 端点(与员工端 Agent 分开)
|
||
# 留空则禁用 Wingman 功能(不影响主流程)
|
||
dify_wingman_api_url: str = "http://yw-dify.dc.servyou-it.com/dify2openai/v1/chat/completions"
|
||
# 坐席端 Wingman Dify API Key(需要新建 Agent 后填入,留空则禁用)
|
||
# 格式:base_url|app_id|app_name(与 dify_api_key 相同格式)
|
||
dify_wingman_api_key: str = ""
|
||
# Wingman API 请求超时(秒)
|
||
dify_wingman_timeout: int = 30
|
||
|
||
# ----------------------------------------------------------------------
|
||
# Mock 登录配置(测试阶段使用,跳过企微 OAuth2)
|
||
# ----------------------------------------------------------------------
|
||
# 是否启用 Mock 登录(默认 false,生产环境必须关闭)
|
||
mock_login_enabled: bool = False
|
||
|
||
# ----------------------------------------------------------------------
|
||
# Pydantic-settings 配置
|
||
# ----------------------------------------------------------------------
|
||
model_config = SettingsConfigDict(
|
||
# 自动从 .env 文件加载环境变量
|
||
env_file=".env",
|
||
# .env 文件编码
|
||
env_file_encoding="utf-8",
|
||
# 环境变量名大小写不敏感
|
||
case_sensitive=False,
|
||
# 额外字段不允许(防止拼写错误的配置被忽略)
|
||
extra="ignore",
|
||
)
|
||
|
||
@property
|
||
def cors_origins_list(self) -> List[str]:
|
||
"""将 CORS 源地址字符串解析为列表。
|
||
|
||
将逗号分隔的字符串(如 "http://a,http://b")
|
||
转换为列表(如 ["http://a", "http://b"]),
|
||
方便 FastAPI 的 CORSMiddleware 使用。
|
||
|
||
Returns:
|
||
List[str]: CORS 允许的源地址列表
|
||
"""
|
||
# 去除每项的前后空格,过滤空字符串
|
||
return [origin.strip() for origin in self.cors_origins.split(",") if origin.strip()]
|
||
|
||
|
||
# 创建全局配置实例
|
||
# 整个应用通过 from app.config import settings 使用同一个实例
|
||
settings = Settings()
|