Metadata-Version: 2.5
Name: chongming-gateway
Version: 0.1.0
Summary: chongming 网关：FastAPI + Zenoh 的配置驱动微服务网关（插件路由动态挂载、Worker 服务发现与负载均衡）
Requires-Python: >=3.12
Requires-Dist: amqtt
Requires-Dist: chongming-auth
Requires-Dist: chongming-cache
Requires-Dist: chongming-config
Requires-Dist: chongming-jwt
Requires-Dist: chongming-worker
Requires-Dist: eclipse-zenoh
Requires-Dist: fastapi
Requires-Dist: granian[reload,uvloop]>=2.8.4
Requires-Dist: gunicorn
Requires-Dist: httptools
Requires-Dist: orjson
Requires-Dist: pwdlib
Requires-Dist: pydantic
Requires-Dist: sqlite-vfs
Requires-Dist: starlette
Requires-Dist: uvicorn
Requires-Dist: uvloop
Description-Content-Type: text/markdown

# chongming-gateway

chongming 网关本体：基于 FastAPI + Zenoh 的配置驱动微服务网关。负责把宿主项目里的
插件（inline 进程内 / external 独立进程）发布的路由统一挂载为 HTTP 端点，并提供
Worker 服务发现、负载均衡、超时重试、MQTT Bridge 与内置登录鉴权。

网关只提供**代码**，配置、插件与打包骨架由宿主项目提供（见「运行时约定」）。

---

## 安装

```bash
uv add chongming-gateway
# 或开发期可编辑安装（在 chongming-core 仓库内）
uv pip install -e gateway
```

## 快速开始

宿主项目（cwd）下需要 `config.toml` 与 `config/workers/<type>/config.toml`，插件包
（`plugins.<type>`）需可导入。之后任选一种启动方式：

```bash
# 按 config.toml [<env>.server] 启动（三个入口等价，仅默认服务器不同）
uv run serve            # uvicorn
uv run granian          # granian
uv run gunicorn         # gunicorn + uvicorn worker

# 或直接把 ASGI 应用交给任意服务器
uvicorn chongming.app:app --host 0.0.0.0 --port 8000
```

网关在 `config/workers/<name>/config.toml` 的 `[workers]` 节按插件粒度读取加载方式
（`load_mode = "inline" | "external"`）与副本数，启动时自动发现并挂载路由。

## 运行时约定

- **配置**：cwd 下 `config.toml`（环境、服务器、安全、MQTT、缓存等）与
  `config/workers/**`（插件注册与路由定义），全部为运行期读取，随宿主项目部署。
- **插件**：网关按 `plugins.<type>` 约定导入插件包。宿主项目可通过 `.mbank`
  模块银行、源码目录或任意可导入方式提供，网关不关心来源。
- **工作目录**：日志、上传、数据等相对路径均以 cwd 为基准。

## 目录结构

```
src/chongming/
├── __init__.py        # 启动入口（serve / granian / gunicorn）与服务器参数转换
└── app/
    ├── __init__.py    # FastAPI 应用装配（lifespan、中间件、异常处理）
    ├── core/          # WorkerManager / RouteGenerator / MQTT Bridge / 日志 / 鉴权
    └── routes/        # 内置管理端点（stats / worker_admin / auth）
```

## 发布

```bash
cd gateway
uv build                       # 产出 dist/chongming_gateway-<version>-py3-none-any.whl
uv run twine upload --repository <私有源> dist/*
```

发版后，依赖方（含本仓）执行 `uv lock --upgrade-package chongming-gateway` 刷新 pin。
本仓 `pyproject.toml` 通过 path source 直接使用本地源码，不需要等发布。
