后端运行与本地环境
四个后端项目组成一个进程,Aspire 编排本地环境,NGINX 提供同源入口
背景
后端需要让模型规则独立于 HTTP 和数据库。本地开发需要同时运行 API、文档站、Web 控制台、PostgreSQL 和反向代理,并支持断点调试和热更新。
决定
项目分工
Orisumi.Core负责实体、契约和模型规则。Orisumi.Application负责实体操作和应用规则。Orisumi.Infrastructure负责 PostgreSQL 映射、事务和迁移。Orisumi.Api负责 HTTP 请求校验、响应映射和启动组装。- 四个项目组成一个后端进程。
- Core 和 Application 不依赖 HTTP 或数据库。
- 迁移由独立的步骤执行。
本地环境
- Aspire AppHost 是本地资源、依赖关系和启动顺序的唯一来源,只用于本地开发。
- 需要调试的应用进程在本机运行,PostgreSQL 和 NGINX 在容器中运行。
HTTP 入口
- NGINX 为 API、文档站和 Web 控制台提供只绑定本机的同源入口。
遥测
- API 默认输出控制台日志,配置 OTLP 地址后导出遥测。遥测不采集请求体和数据库参数值。
理由
Core 和 Application 不依赖 HTTP 和数据库,模型规则不启动数据库就能测试。目前没有需要独立部署的部分,所以四个项目放在一个进程中。
迁移独立执行,多个 API 实例启动或 API 重启时就不会重复建表。
应用进程在本机运行,可以直接调试和热更新。通过 NGINX 同源访问 API,浏览器端无需配置跨域。遥测默认关闭,API 可以脱离 Aspire 独立运行。
放弃的方案:
- 按层拆成多个服务。 目前没有需要独立扩展或部署的部分,拆分只增加网络调用。
- 全部在容器中运行。 断点调试和热更新会变得麻烦。
代价
- 本地验证只覆盖本地环境。
- Aspire 不用于部署,部署需要另外的配置。
规则位置
- 运行说明:
src/Backend/Orisumi.Api/README.md、tools/Orisumi.AppHost/README.md - 入口和转发:
docker/nginx/default.conf;请求体上限和公共代理设置:docker/nginx/common.conf;服务的上游:同目录的*-enabled.conf和*-disabled.conf - API · 服务地址
- Storage · PostgreSQL