Files
Blizzard f610d8d2da feat(kb): 大文档正文存 MinIO(PG 只留元数据+预览+对象键)
超过阈值(8000 字)的正文落对象存储,彻底解决十几万字文件塞 PG 的问题。

- internal/blob:minio-go 封装 Store(Open/Put/Get/Delete + Ready 降级);连不上则降级内联。
- docker-compose:milvus-minio 暴露 9000 端口供网关用作文档对象存储(bucket sundynix-docs)。
- main/router/handler:注入 blob.Store(env MINIO_*,默认 localhost:9000 minioadmin)。
- runIngest:size>8000 且 MinIO 可用 → 正文 Put 到 owner/kb/name,PG content 置空仅存
  object_key+preview+size;否则内联。SaveDoc 改为按全文显式传 preview(offload 后内联为空也有预览)。
- KbDoc:object_key 非空时从 MinIO 取回全文。

验证:入 12182 字笔记 → PG content_len=0、object_key=wt/default/超大文件测试、preview 非空、
size=12182;/kb/doc 取回完整 12182 字(来自 MinIO);6321 字的仍内联(object_key 空)。
列表只读元数据+预览。gateway build 通过。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 17:02:44 +08:00

75 lines
2.2 KiB
YAML

version: "3.9"
# 基础设施 — NATS 零拷贝骨干网 + 业务存储 + 向量/图数据库
services:
nats:
image: nats:2-alpine
command: ["-c", "/etc/nats/nats-server.conf"]
ports: ["4222:4222", "8222:8222"]
volumes:
- ./deploy/nats/nats-server.conf:/etc/nats/nats-server.conf:ro
- nats_data:/data/jetstream # JetStream 持久化,重启不丢任务流
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: sundynix
POSTGRES_PASSWORD: sundynix
POSTGRES_DB: sundynix
ports: ["5432:5432"]
volumes: ["pg_data:/var/lib/postgresql/data"]
redis:
image: redis:7-alpine
ports: ["6379:6379"]
# --- Milvus 向量数据库 (standalone 需 etcd + minio) ---
milvus-etcd:
image: quay.io/coreos/etcd:v3.5.14
environment:
ETCD_AUTO_COMPACTION_MODE: revision
ETCD_AUTO_COMPACTION_RETENTION: "1000"
ETCD_QUOTA_BACKEND_BYTES: "4294967296"
ETCD_SNAPSHOT_COUNT: "50000"
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
volumes: ["milvus_etcd:/etcd"]
milvus-minio:
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
environment:
MINIO_ACCESS_KEY: minioadmin
MINIO_SECRET_KEY: minioadmin
command: minio server /minio_data
ports: ["9000:9000"] # 暴露给网关做文档对象存储(大文件正文)
volumes: ["milvus_minio:/minio_data"]
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
milvus:
image: milvusdb/milvus:v2.4.13
command: ["milvus", "run", "standalone"]
environment:
ETCD_ENDPOINTS: milvus-etcd:2379
MINIO_ADDRESS: milvus-minio:9000
ports: ["19530:19530", "9091:9091"] # 19530=gRPC, 9091=metrics/health
volumes: ["milvus_data:/var/lib/milvus"]
depends_on: [milvus-etcd, milvus-minio]
neo4j:
image: neo4j:5-community
environment:
NEO4J_AUTH: neo4j/sundynix
ports: ["7474:7474", "7687:7687"]
volumes: ["neo4j_data:/data"]
volumes:
nats_data:
pg_data:
milvus_etcd:
milvus_minio:
milvus_data:
neo4j_data: