From 7642d2bd8462c328e4f320ab405d719b1df51186 Mon Sep 17 00:00:00 2001 From: Zhenyu Zheng Date: Wed, 25 Feb 2026 19:03:00 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=8E=A5=E5=85=A5=20MinIO=20?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E5=AD=98=E5=82=A8=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=20StorageService=20=E6=8A=BD=E8=B1=A1=E5=B1=82=E4=B8=8E?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=20Schema=20=E7=AB=AF=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 存储层重构: - 新增 StorageService 抽象基类,支持 LocalStorage(本地,开发默认) 和 S3Storage(MinIO / AWS S3 / 华为 OBS 等,生产推荐)双后端 - upload.py 改用 StorageService,移除直接文件写入;markdown 内存解码, docx 使用 tempfile 临时解析后存入 StorageService - main.py 改为条件挂载 StaticFiles(仅本地模式下生效) 基础设施: - docker-compose.yml 新增 minio 服务(minio_data volume 持久化, 9001 端口为控制台,backend 依赖 MinIO 健康检查) - nginx.conf 将 /uploads/ 代理改为直连 minio:9000/opengecko/ (开发时由 FastAPI StaticFiles 接管,无需 nginx) 配置管理: - config.py 所有字段加 Field(description=...),配置说明写入代码本身 - 新增 GET /api/admin/config-schema 端点(仅 superuser 可访问), 返回 Pydantic 自动生成的 JSON Schema 及当前生效值(密钥脱敏) - 补充 .env.example 和 .env.prod.example 的 S3/MinIO 配置块 迁移工具: - 新增 backend/scripts/migrate_to_minio.py,一键将本地 uploads/ 目录 文件批量迁移至 MinIO,支持环境变量覆盖参数 --- backend/app/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/app/config.py b/backend/app/config.py index e39d67a..01829aa 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -1,5 +1,6 @@ import os from pathlib import Path +from typing import Annotated from pydantic import Field from pydantic_settings import BaseSettings From bb21967154cd8dbb2be7116d057213ac992c41e3 Mon Sep 17 00:00:00 2001 From: Zhenyu Zheng Date: Wed, 25 Feb 2026 19:08:54 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=20config.py=20?= =?UTF-8?q?=E4=B8=AD=E6=9C=AA=E4=BD=BF=E7=94=A8=E7=9A=84=20Annotated=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=EF=BC=8C=E4=BF=AE=E6=AD=A3=20import=20?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/config.py | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/app/config.py b/backend/app/config.py index 01829aa..e39d67a 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -1,6 +1,5 @@ import os from pathlib import Path -from typing import Annotated from pydantic import Field from pydantic_settings import BaseSettings