前言OpenFoundry 是一个开源的数据操作系统Data Operating System灵感来源于 Palantir Foundry 的能力模型。它将数据集成、本体论建模、权限治理、工作流自动化等能力整合到一个可审计、可扩展的软件系统中。本文将带你从源码层面深入理解 OpenFoundry涵盖项目目标、模块详解、安装部署、运行测试全流程。项目地址https://github.com/DioCrafts/OpenFoundry开源协议AGPL-3.0一、项目目标1.1 解决什么问题在企业数据平台领域常见痛点包括数据孤岛各种数据源MySQL、Kafka、S3、Cassandra无法统一访问权限混乱谁能看什么数据、谁能做什么操作缺乏统一治理SQL 拼接困难业务人员无法自主查询数据依赖工程师写 SQL扩展性差平台能力被封闭 API 限制无法自定义1.2 OpenFoundry 的定位先讲一下本体论Ontology的概念——将业务实体用户、订单、商品和它们之间的关系抽象成统一的模型。用户不需要写 SQL只需要理解对象和关系即可完成复杂查询。本体论示例 ┌─────────────┐ placed_order ┌─────────────┐ │ User │ ───────────────────────▶│ Order │ │ (用户) │ │ (订单) │ └─────────────┘◀───────────────────────│ │ │ └─────────────┘ │ contains_product │ │ ◀──────────────────────────────┘ ▼ │ ┌─────────────┐ ▼ │ Product │◀─────────────────────────────────┘ │ (商品) │ └─────────────┘1.3 核心特性特性说明本体论为核心对象类型、属性、动作、关系统一的业务抽象层契约驱动Protobuf → OpenAPI → 多语言 SDK客户端与服务端同步50 个微服务每个服务独立部署、独立扩展GitOps 原生Helm ArgoCD Terraform声明式基础设施全链路可观测OpenTelemetry Prometheus Grafana二、源码模块详解2.1 顶级目录结构OpenFoundry/ ├── apps/web/ # React 19 前端Vite TypeScript ├── services/ # 50 个 Go 微服务 ├── libs/ # 36 个共享 Go 库 ├── proto/ # Protobuf 源定义生成 libs/proto-gen/ ├── sdks/ # 生成的 TypeScript/Python/Java SDK ├── infra/ # Helm、ArgoCD、Terraform ├── docs/ # VitePress 文档 ├── tools/ # CLI 工具 ├── Makefile # 权威构建入口 └── go.mod # 单一 Go 模块2.2 服务层services/OpenFoundry 将功能划分为50 个微服务按能力域分组身份与安全域服务功能identity-federation-service用户注册、登录、JWT 签发、MFA、WebAuthn、OIDC、SAMLauthorization-policy-serviceCedar 引擎ABAC/RBAC 策略评估edge-gateway-service反向代理、JWT 验证、限流、路由数据与本体论域服务功能ontology-definition-service定义对象类型、属性、动作ontology-query-service图遍历查询核心查询引擎ontology-actions-service本体论动作执行dataset-versioning-service数据集版本控制、分支、事务connector-management-service数据源连接器管理AI 与机器学习域服务功能model-catalog-serviceML 模型目录和版本管理model-deployment-service模型部署agent-runtime-serviceAI Agent 运行时llm-catalog-serviceLLM 模型管理2.3 共享库层libs/36 个共享库被所有服务依赖按功能分为核心存储抽象库功能storage-abstraction统一的 ObjectStore、LinkStore、SchemaStore 接口cassandra-kernelCassandra 后端实现Ontology 数据实际存储在这里search-abstraction搜索抽象层支持 Vespa、OpenSearch、内存后端安全与认证库功能auth-middlewareJWT 验证链、Claims 提取authz-cedar-goCedar 策略引擎 Go 实现capabilities能力探测、依赖健康检查可观测性库功能observabilityslog 日志 OpenTelemetry Prometheus2.4 标准服务结构每个微服务遵循统一的目录布局services/svc/ ├── cmd/svc/main.go # 程序入口 └── internal/ ├── server/ # chi 路由配置/healthz、/metrics、/api ├── handlers/ # HTTP 处理器业务逻辑入口 ├── domain/ # 纯业务逻辑 ├── repo/ # 数据访问层sqlc 生成 │ └── migrations/ # goose 风格 SQL 迁移 ├── models/ # Wire 类型 └── config/ # koanf 配置读取这种统一结构让团队只需学习一次就能理解所有服务。三、Ontology Query Service 详解3.1 什么是本体论查询本体论查询是 OpenFoundry 的核心查询能力。它不同于传统 SQL而是基于图遍历的方式工作用户问所有下单超过 1000 元的用户 本体论查询流程 1. 从所有 User 对象开始 2. 沿着 placed_order 边找到 Order 3. 过滤 amount 1000 的订单 4. 返回符合条件的用户3.2 核心代码结构services/ontology-query-service/ ├── cmd/ontology-query-service/main.go # 启动入口配置 Cassandra 连接 └── internal/ ├── handlers/handlers.go # GetObject、ListObjectsByType 等 ├── handlers/traversal.go # Traverse图遍历、Histogram、LinkSummary ├── handlers/search.go # 全文搜索 ├── handlers/mask.go # 字段级别脱敏 └── models/models.go # 请求/响应结构体3.3 图遍历查询核心逻辑以Traverse为例traversal.go:207-291// TraverseRequest 定义了遍历请求typeTraverseRequeststruct{Tenantstring// 租户 IDStartingSet[]ObjectRef// 起始对象集合Steps[]SearchAroundStep// 遍历步骤ParameterValuesmap[string]any// 参数值}// 单步遍历的定义typeSearchAroundStepstruct{Ordinalint// 顺序RelationIDstring// 关系 ID如 placed_orderDirectionstring// 方向outgoing / incomingFilters[]SearchAroundFilter// 属性过滤器}遍历执行流程// 1. 从起始点开始current:dedupeRefs(body.StartingSet)// 2. 逐跳遍历for_,step:rangebody.Steps{for_,ref:rangecurrent{// 3. 查询 Links Store Cassandra 中的边res,_h.state.Links.ListOutgoing(ctx,tenant,step.RelationID,ref.ObjectID,page,consistency)for_,link:rangeres.Items{// 4. 获取目标对象obj,_h.state.Objects.Get(ctx,tenant,link.To,consistency)// 5. 应用属性过滤if!applyFilters(step.Filters,body.ParameterValues,obj){continue}nextappend(next,ObjectRef{...})}}currentnext}3.4 与 Text-to-SQL 的对比维度本体论图遍历大模型 Text-to-SQL原理预设关系路径按路径遍历理解自然语言生成 SQL确定性✅ 可审计、无幻觉⚠️ 可能生成错误 SQL灵活性只能走预定义路径可跨表自由 JOIN性能稳定可预测复杂查询延迟高适用场景结构固定的企业平台临时 ad-hoc 查询四、安装部署4.1 环境要求Go 1.25用于编译Docker / Docker Compose本地开发pnpm前端开发Kubernetes / ArgoCD生产部署可选4.2 克隆项目gitclone https://github.com/DioCrafts/OpenFoundry.gitcdOpenFoundry4.3 安装工具链maketools这会安装buf— Protobuf 管理golangci-lint— Go lintsqlc— 数据库代码生成gofumpt— 代码格式化4.4 本地开发Docker Compose一键启动本地基础设施dockercompose-finfra/compose/docker-compose.yml up-d这将启动PostgreSQL事务存储Cassandra本体论数据存储Kafka消息队列NATS轻量消息Prometheus Grafana可观测性4.5 编译服务# 编译所有服务makebuild-services# 或编译单个服务go build-obin/ontology-query-service ./services/ontology-query-service/cmd/ontology-query-service4.6 前端运行pnpminstallpnpm--filteropen-foundry/web dev访问http://localhost:5173即可看到前端界面。五、测试流程5.1 单元测试# 运行所有单元测试maketest# 或指定包GOPROXYhttps://goproxy.cn,direct gotest-v./services/ontology-query-service/internal/handlers/...关键如果网络无法访问proxy.golang.org需要配置国内镜像exportGOPROXYhttps://goproxy.cn,direct5.2 运行 Ontology Query Service 测试我们以ontology-query-service为例测试覆盖了以下能力✅ GetObject # 单对象读取 ✅ ListObjectsByType # 按类型分页查询 ✅ ListOutgoingLinks # 出边查询 ✅ Traverse # 图遍历 ✅ Histogram # 属性聚合 ✅ Search # 全文搜索 ✅ ApplyPropertyMask # 字段脱敏实际运行结果 RUN TestTraverseExecutesSingleHopWithFilters --- PASS: TestTraverseExecutesSingleHopWithFilters (0.00s) RUN TestTraverseFiltersOutMismatch --- PASS: TestTraverseFiltersOutMismatch (0.00s) PASS ok github.com/DioCrafts/OpenFoundry/services/ontology-query-service/internal/handlers 0.594s5.3 集成测试需要 Docker 环境maketest-integration这会启动 testcontainers运行需要真实数据库的测试用例。5.4 CI 完整检查makeci等价于maketidy# go mod tidy 检查makevet# go vet 检查makelint# golangci-lintmakecontracts-check# OpenAPI SDK drift 检查maketest# 单元测试六、完整本地运行指南实战以下步骤在 macOS OrbStack 环境下验证通过网络需要访问goproxy.cnGo 模块镜像。6.1 环境说明Docker/OrbStack提供容器运行时跑 PostgreSQL、Redis、NATS、Cassandra 等基础设施Go 1.25编译服务二进制前端 Vitepnpm dev代理 API 请求到 gateway6.2 启动基础设施Dockercdinfra/compose# 启动核心基础设施服务不跑完整 compose避免 gcr.io 访问超时dockercompose up-dpostgres valkey nats minio cassandra cassandra-init验证服务健康dockerps--formattable {{.Names}}\t{{.Status}}预期输出NAMES STATUS openfoundry-postgres-1 Up ... (healthy) 0.0.0.0:5432-5432/tcp openfoundry-valkey-1 Up ... (healthy) 0.0.0.0:6379-6379/tcp openfoundry-nats-1 Up ... (healthy) 0.0.0.0:4222-4222/tcp openfoundry-minio-1 Up ... (healthy) 0.0.0.0:9000-9001-9000-9001/tcp openfoundry-cassandra-1 Up ... (healthy) 0.0.0.0:9042-9042/tcp6.3 编译 Go 服务# 配置 Go 国内镜像访问 proxy.golang.org 超时时必须exportGOPROXYhttps://goproxy.cn,direct# 编译 identity-federation-service用户认证服务go build-obin/identity-federation-service\./services/identity-federation-service/cmd/identity-federation-service# 编译 edge-gateway-serviceAPI 网关go build-obin/edge-gateway-service\./services/edge-gateway-service/cmd/edge-gateway-service编译产物在bin/目录下约 35MB 一个。6.4 启动后端服务终端 1 — 启动 identity-federation-serviceexportDATABASE_URLpostgres://openfoundry:openfoundrylocalhost:5432/openfoundry_auth_serviceexportJWT_SECRETopenfoundry-dev-secretexportREDIS_URLredis://localhost:6379exportNATS_URLnats://localhost:4222exportPORT50112exportPUBLIC_WEB_ORIGINhttp://localhost:5173exportOPENFOUNDRY_ENVdevelopment ./bin/identity-federation-service日志输出levelINFO msgobservability initialized serviceidentity-federation-service levelINFO msglistening serviceidentity-federation-service addr0.0.0.0:50112终端 2 — 启动 edge-gateway-service# 先清理占用了 50088 端口的进程lsof-ti:50088|xargskill-92/dev/null# 启动网关所有外部请求的入口监听 50088 端口exportOF_JWT__SECRETopenfoundry-dev-secretexportOF_REDIS__URLredis://localhost:6379exportOF_UPSTREAM__IDENTITY_FEDERATION_SERVICE_URLhttp://localhost:50112exportOF_UPSTREAM__OAUTH_INTEGRATION_SERVICE_URLhttp://localhost:50112exportOF_UPSTREAM__SESSION_GOVERNANCE_SERVICE_URLhttp://localhost:50112exportOF_SERVER__PORT50088./bin/edge-gateway-service日志输出levelINFO msgobservability initialized serviceedge-gateway-service levelINFO msgrate-limit using in-memory store levelINFO msglistening serviceedge-gateway-service addr0.0.0.0:500886.5 启动前端Vitecdapps/webpnpminstallpnpm--filteropen-foundry/web dev前端监听http://localhost:5173代理/api请求到localhost:50088。6.6 API 测试注册账号curl-XPOST http://localhost:50088/api/v1/auth/register\-HContent-Type: application/json\-d{email:testexample.com,password:Test123456!,name:Test User}响应{id:019e68b8-d76d-781e-ada1-51ae403c587c,email:testexample.com,name:Test User}登录获取 Tokencurl-XPOST http://localhost:50088/api/v1/auth/login\-HContent-Type: application/json\-d{email:testexample.com,password:Test123456!}响应{status:authenticated,access_token:eyJhbGci...,refresh_token:bbZkL2XBy0...,token_type:Bearer,expires_in:3600}验证 Token 获取用户信息curlhttp://localhost:50088/api/v1/users/me\-HAuthorization: Bearer access_token响应{id:019e68b8-d76d-781e-ada1-51ae403c587c,email:testexample.com,name:Test User,roles:[admin],is_active:true,mfa_enabled:false}6.7 访问前端cdapps/webpnpminstallpnpm--filteropen-foundry/web dev访问http://localhost:5173使用刚才注册的账号登录即可。{email:testexample.com,password:Test123456!,name:Test User}七、总结9.1 项目价值代码质量高统一的服务结构、自动化的代码生成、完善的测试覆盖架构现代微服务 图遍历查询 契约驱动开发可扩展性强新增服务只需复制模板Helm ArgoCD 一键部署治理完善JWT Cedar 策略 审计日志 字段级脱敏9.2 适用场景企业内部数据平台需要统一治理数据访问权限多租户 SaaS需要 tenant 级别的数据隔离图数据查询对象关系复杂需要本体论抽象AI 数据底座为 LLM/Agent 提供可信的结构化数据
OpenFoundry 开源数据操作系统:架构解析与实战指南
前言OpenFoundry 是一个开源的数据操作系统Data Operating System灵感来源于 Palantir Foundry 的能力模型。它将数据集成、本体论建模、权限治理、工作流自动化等能力整合到一个可审计、可扩展的软件系统中。本文将带你从源码层面深入理解 OpenFoundry涵盖项目目标、模块详解、安装部署、运行测试全流程。项目地址https://github.com/DioCrafts/OpenFoundry开源协议AGPL-3.0一、项目目标1.1 解决什么问题在企业数据平台领域常见痛点包括数据孤岛各种数据源MySQL、Kafka、S3、Cassandra无法统一访问权限混乱谁能看什么数据、谁能做什么操作缺乏统一治理SQL 拼接困难业务人员无法自主查询数据依赖工程师写 SQL扩展性差平台能力被封闭 API 限制无法自定义1.2 OpenFoundry 的定位先讲一下本体论Ontology的概念——将业务实体用户、订单、商品和它们之间的关系抽象成统一的模型。用户不需要写 SQL只需要理解对象和关系即可完成复杂查询。本体论示例 ┌─────────────┐ placed_order ┌─────────────┐ │ User │ ───────────────────────▶│ Order │ │ (用户) │ │ (订单) │ └─────────────┘◀───────────────────────│ │ │ └─────────────┘ │ contains_product │ │ ◀──────────────────────────────┘ ▼ │ ┌─────────────┐ ▼ │ Product │◀─────────────────────────────────┘ │ (商品) │ └─────────────┘1.3 核心特性特性说明本体论为核心对象类型、属性、动作、关系统一的业务抽象层契约驱动Protobuf → OpenAPI → 多语言 SDK客户端与服务端同步50 个微服务每个服务独立部署、独立扩展GitOps 原生Helm ArgoCD Terraform声明式基础设施全链路可观测OpenTelemetry Prometheus Grafana二、源码模块详解2.1 顶级目录结构OpenFoundry/ ├── apps/web/ # React 19 前端Vite TypeScript ├── services/ # 50 个 Go 微服务 ├── libs/ # 36 个共享 Go 库 ├── proto/ # Protobuf 源定义生成 libs/proto-gen/ ├── sdks/ # 生成的 TypeScript/Python/Java SDK ├── infra/ # Helm、ArgoCD、Terraform ├── docs/ # VitePress 文档 ├── tools/ # CLI 工具 ├── Makefile # 权威构建入口 └── go.mod # 单一 Go 模块2.2 服务层services/OpenFoundry 将功能划分为50 个微服务按能力域分组身份与安全域服务功能identity-federation-service用户注册、登录、JWT 签发、MFA、WebAuthn、OIDC、SAMLauthorization-policy-serviceCedar 引擎ABAC/RBAC 策略评估edge-gateway-service反向代理、JWT 验证、限流、路由数据与本体论域服务功能ontology-definition-service定义对象类型、属性、动作ontology-query-service图遍历查询核心查询引擎ontology-actions-service本体论动作执行dataset-versioning-service数据集版本控制、分支、事务connector-management-service数据源连接器管理AI 与机器学习域服务功能model-catalog-serviceML 模型目录和版本管理model-deployment-service模型部署agent-runtime-serviceAI Agent 运行时llm-catalog-serviceLLM 模型管理2.3 共享库层libs/36 个共享库被所有服务依赖按功能分为核心存储抽象库功能storage-abstraction统一的 ObjectStore、LinkStore、SchemaStore 接口cassandra-kernelCassandra 后端实现Ontology 数据实际存储在这里search-abstraction搜索抽象层支持 Vespa、OpenSearch、内存后端安全与认证库功能auth-middlewareJWT 验证链、Claims 提取authz-cedar-goCedar 策略引擎 Go 实现capabilities能力探测、依赖健康检查可观测性库功能observabilityslog 日志 OpenTelemetry Prometheus2.4 标准服务结构每个微服务遵循统一的目录布局services/svc/ ├── cmd/svc/main.go # 程序入口 └── internal/ ├── server/ # chi 路由配置/healthz、/metrics、/api ├── handlers/ # HTTP 处理器业务逻辑入口 ├── domain/ # 纯业务逻辑 ├── repo/ # 数据访问层sqlc 生成 │ └── migrations/ # goose 风格 SQL 迁移 ├── models/ # Wire 类型 └── config/ # koanf 配置读取这种统一结构让团队只需学习一次就能理解所有服务。三、Ontology Query Service 详解3.1 什么是本体论查询本体论查询是 OpenFoundry 的核心查询能力。它不同于传统 SQL而是基于图遍历的方式工作用户问所有下单超过 1000 元的用户 本体论查询流程 1. 从所有 User 对象开始 2. 沿着 placed_order 边找到 Order 3. 过滤 amount 1000 的订单 4. 返回符合条件的用户3.2 核心代码结构services/ontology-query-service/ ├── cmd/ontology-query-service/main.go # 启动入口配置 Cassandra 连接 └── internal/ ├── handlers/handlers.go # GetObject、ListObjectsByType 等 ├── handlers/traversal.go # Traverse图遍历、Histogram、LinkSummary ├── handlers/search.go # 全文搜索 ├── handlers/mask.go # 字段级别脱敏 └── models/models.go # 请求/响应结构体3.3 图遍历查询核心逻辑以Traverse为例traversal.go:207-291// TraverseRequest 定义了遍历请求typeTraverseRequeststruct{Tenantstring// 租户 IDStartingSet[]ObjectRef// 起始对象集合Steps[]SearchAroundStep// 遍历步骤ParameterValuesmap[string]any// 参数值}// 单步遍历的定义typeSearchAroundStepstruct{Ordinalint// 顺序RelationIDstring// 关系 ID如 placed_orderDirectionstring// 方向outgoing / incomingFilters[]SearchAroundFilter// 属性过滤器}遍历执行流程// 1. 从起始点开始current:dedupeRefs(body.StartingSet)// 2. 逐跳遍历for_,step:rangebody.Steps{for_,ref:rangecurrent{// 3. 查询 Links Store Cassandra 中的边res,_h.state.Links.ListOutgoing(ctx,tenant,step.RelationID,ref.ObjectID,page,consistency)for_,link:rangeres.Items{// 4. 获取目标对象obj,_h.state.Objects.Get(ctx,tenant,link.To,consistency)// 5. 应用属性过滤if!applyFilters(step.Filters,body.ParameterValues,obj){continue}nextappend(next,ObjectRef{...})}}currentnext}3.4 与 Text-to-SQL 的对比维度本体论图遍历大模型 Text-to-SQL原理预设关系路径按路径遍历理解自然语言生成 SQL确定性✅ 可审计、无幻觉⚠️ 可能生成错误 SQL灵活性只能走预定义路径可跨表自由 JOIN性能稳定可预测复杂查询延迟高适用场景结构固定的企业平台临时 ad-hoc 查询四、安装部署4.1 环境要求Go 1.25用于编译Docker / Docker Compose本地开发pnpm前端开发Kubernetes / ArgoCD生产部署可选4.2 克隆项目gitclone https://github.com/DioCrafts/OpenFoundry.gitcdOpenFoundry4.3 安装工具链maketools这会安装buf— Protobuf 管理golangci-lint— Go lintsqlc— 数据库代码生成gofumpt— 代码格式化4.4 本地开发Docker Compose一键启动本地基础设施dockercompose-finfra/compose/docker-compose.yml up-d这将启动PostgreSQL事务存储Cassandra本体论数据存储Kafka消息队列NATS轻量消息Prometheus Grafana可观测性4.5 编译服务# 编译所有服务makebuild-services# 或编译单个服务go build-obin/ontology-query-service ./services/ontology-query-service/cmd/ontology-query-service4.6 前端运行pnpminstallpnpm--filteropen-foundry/web dev访问http://localhost:5173即可看到前端界面。五、测试流程5.1 单元测试# 运行所有单元测试maketest# 或指定包GOPROXYhttps://goproxy.cn,direct gotest-v./services/ontology-query-service/internal/handlers/...关键如果网络无法访问proxy.golang.org需要配置国内镜像exportGOPROXYhttps://goproxy.cn,direct5.2 运行 Ontology Query Service 测试我们以ontology-query-service为例测试覆盖了以下能力✅ GetObject # 单对象读取 ✅ ListObjectsByType # 按类型分页查询 ✅ ListOutgoingLinks # 出边查询 ✅ Traverse # 图遍历 ✅ Histogram # 属性聚合 ✅ Search # 全文搜索 ✅ ApplyPropertyMask # 字段脱敏实际运行结果 RUN TestTraverseExecutesSingleHopWithFilters --- PASS: TestTraverseExecutesSingleHopWithFilters (0.00s) RUN TestTraverseFiltersOutMismatch --- PASS: TestTraverseFiltersOutMismatch (0.00s) PASS ok github.com/DioCrafts/OpenFoundry/services/ontology-query-service/internal/handlers 0.594s5.3 集成测试需要 Docker 环境maketest-integration这会启动 testcontainers运行需要真实数据库的测试用例。5.4 CI 完整检查makeci等价于maketidy# go mod tidy 检查makevet# go vet 检查makelint# golangci-lintmakecontracts-check# OpenAPI SDK drift 检查maketest# 单元测试六、完整本地运行指南实战以下步骤在 macOS OrbStack 环境下验证通过网络需要访问goproxy.cnGo 模块镜像。6.1 环境说明Docker/OrbStack提供容器运行时跑 PostgreSQL、Redis、NATS、Cassandra 等基础设施Go 1.25编译服务二进制前端 Vitepnpm dev代理 API 请求到 gateway6.2 启动基础设施Dockercdinfra/compose# 启动核心基础设施服务不跑完整 compose避免 gcr.io 访问超时dockercompose up-dpostgres valkey nats minio cassandra cassandra-init验证服务健康dockerps--formattable {{.Names}}\t{{.Status}}预期输出NAMES STATUS openfoundry-postgres-1 Up ... (healthy) 0.0.0.0:5432-5432/tcp openfoundry-valkey-1 Up ... (healthy) 0.0.0.0:6379-6379/tcp openfoundry-nats-1 Up ... (healthy) 0.0.0.0:4222-4222/tcp openfoundry-minio-1 Up ... (healthy) 0.0.0.0:9000-9001-9000-9001/tcp openfoundry-cassandra-1 Up ... (healthy) 0.0.0.0:9042-9042/tcp6.3 编译 Go 服务# 配置 Go 国内镜像访问 proxy.golang.org 超时时必须exportGOPROXYhttps://goproxy.cn,direct# 编译 identity-federation-service用户认证服务go build-obin/identity-federation-service\./services/identity-federation-service/cmd/identity-federation-service# 编译 edge-gateway-serviceAPI 网关go build-obin/edge-gateway-service\./services/edge-gateway-service/cmd/edge-gateway-service编译产物在bin/目录下约 35MB 一个。6.4 启动后端服务终端 1 — 启动 identity-federation-serviceexportDATABASE_URLpostgres://openfoundry:openfoundrylocalhost:5432/openfoundry_auth_serviceexportJWT_SECRETopenfoundry-dev-secretexportREDIS_URLredis://localhost:6379exportNATS_URLnats://localhost:4222exportPORT50112exportPUBLIC_WEB_ORIGINhttp://localhost:5173exportOPENFOUNDRY_ENVdevelopment ./bin/identity-federation-service日志输出levelINFO msgobservability initialized serviceidentity-federation-service levelINFO msglistening serviceidentity-federation-service addr0.0.0.0:50112终端 2 — 启动 edge-gateway-service# 先清理占用了 50088 端口的进程lsof-ti:50088|xargskill-92/dev/null# 启动网关所有外部请求的入口监听 50088 端口exportOF_JWT__SECRETopenfoundry-dev-secretexportOF_REDIS__URLredis://localhost:6379exportOF_UPSTREAM__IDENTITY_FEDERATION_SERVICE_URLhttp://localhost:50112exportOF_UPSTREAM__OAUTH_INTEGRATION_SERVICE_URLhttp://localhost:50112exportOF_UPSTREAM__SESSION_GOVERNANCE_SERVICE_URLhttp://localhost:50112exportOF_SERVER__PORT50088./bin/edge-gateway-service日志输出levelINFO msgobservability initialized serviceedge-gateway-service levelINFO msgrate-limit using in-memory store levelINFO msglistening serviceedge-gateway-service addr0.0.0.0:500886.5 启动前端Vitecdapps/webpnpminstallpnpm--filteropen-foundry/web dev前端监听http://localhost:5173代理/api请求到localhost:50088。6.6 API 测试注册账号curl-XPOST http://localhost:50088/api/v1/auth/register\-HContent-Type: application/json\-d{email:testexample.com,password:Test123456!,name:Test User}响应{id:019e68b8-d76d-781e-ada1-51ae403c587c,email:testexample.com,name:Test User}登录获取 Tokencurl-XPOST http://localhost:50088/api/v1/auth/login\-HContent-Type: application/json\-d{email:testexample.com,password:Test123456!}响应{status:authenticated,access_token:eyJhbGci...,refresh_token:bbZkL2XBy0...,token_type:Bearer,expires_in:3600}验证 Token 获取用户信息curlhttp://localhost:50088/api/v1/users/me\-HAuthorization: Bearer access_token响应{id:019e68b8-d76d-781e-ada1-51ae403c587c,email:testexample.com,name:Test User,roles:[admin],is_active:true,mfa_enabled:false}6.7 访问前端cdapps/webpnpminstallpnpm--filteropen-foundry/web dev访问http://localhost:5173使用刚才注册的账号登录即可。{email:testexample.com,password:Test123456!,name:Test User}七、总结9.1 项目价值代码质量高统一的服务结构、自动化的代码生成、完善的测试覆盖架构现代微服务 图遍历查询 契约驱动开发可扩展性强新增服务只需复制模板Helm ArgoCD 一键部署治理完善JWT Cedar 策略 审计日志 字段级脱敏9.2 适用场景企业内部数据平台需要统一治理数据访问权限多租户 SaaS需要 tenant 级别的数据隔离图数据查询对象关系复杂需要本体论抽象AI 数据底座为 LLM/Agent 提供可信的结构化数据