HTTP 网关
将 Minara 作为 HTTP 服务运行
HTTP 网关通过 REST/SSE API 暴露同一个 Agent。适合将 Minara 集成到 Web 应用、Slack 机器人或自定义前端。
启动服务器
minara serve
# listening on http://localhost:8080默认在前台运行。按 Ctrl+C 停止服务器。可用标志:
-p, --port <N>:覆盖监听端口(也可通过GATEWAY_PORT设置)。--auth-token <T>:每次请求/v1/*时需要携带的 Bearer token。也可通过GATEWAY_AUTH_TOKEN读取。留空则禁用鉴权(仅限开发环境)。
环境变量:
GATEWAY_PORT(默认8080)GATEWAY_AUTH_TOKEN:若设置,每次请求须携带Authorization: Bearer <token>。留空则禁用鉴权(仅限开发环境)。
同时启动 Web UI
minara serve --ui 在同一个 shell 中以并行进程方式启动 HTTP 网关和 Web UI。网关端口为 8080;Web UI 运行在 4173(apps/web-ui/dist 的 Vite 预览构建)。
minara serve --ui
# [gateway] listening on http://localhost:8080
# [ui] preview ready at http://localhost:4173/冷启动流程:若 apps/web-ui/dist/ 不存在,或其时间戳早于 apps/web-ui/apps/agent/src/,Minara 会在启动预览服务器前自动构建。apps/web-ui/dist/.build.lock 文件锁可防止两个并发的 serve --ui 进程同时竞争构建。
变体选项:
--ui-dev:运行vite(热重载,端口5173),而非preview。适合迭代 Web UI 代码时使用。--ui-port <N>:覆盖 UI 端口。--no-build:跳过自动构建检查,假设apps/web-ui/dist/已是最新状态。若目录不存在或已过期,会立即失败(非零退出码,并输出明确错误信息)。--daemon:行为与单独的serve --daemon相同。网关和 UI 子进程均通过 PID 文件追踪(server.pid+web-ui.pid)。--stop使用 PID 复用守卫优雅地终止两端,确保指向无关进程的陈旧 UI PID 文件被清除,而不会向其发送信号。
完整的标志列表和守护进程机制,参见 minara serve 子命令参考。
以守护进程运行
--daemon(或 -d)将服务器从终端分离,写入 PID 文件,并将 stdout/stderr 重定向到日志文件。适合在不配置 systemd 的情况下,让网关在重启后持续运行。
minara serve --daemon # 在后台启动
minara serve --status # 是否运行中?PID 是多少?
minara serve --stop # 优雅 SIGTERM,最多等待 10 秒默认路径(可通过 --pid-file / --log-file 覆盖):
- PID 文件:
$MINARA_DATA_DIR/server.pid(通常为~/.minara/server.pid) - 日志文件:
$MINARA_DATA_DIR/logs/server.log
退出码遵循 LSB init-script 规范。--status 在守护进程未运行时返回 3,因此可以链式调用:
minara serve --status || minara serve --daemon如需生产级别的进程管理(崩溃重启、日志集成、开机自启),建议将 minara serve 接入 systemd 或其他进程监控工具。示例 unit 文件参见部署。
健康检查
curl http://localhost:8080/healthz
# {"ok":true}对话
curl -N -X POST http://localhost:8080/v1/chat/stream \
-H "Authorization: Bearer $GATEWAY_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"message": "buy $50 of SOL"}'响应为 Server-Sent Events 流(-N 关闭 curl 缓冲):每个事件都是一段 JSON 数据——LLM 增量输出、工具调用,以及最终的助手回复。
每个路由的完整说明、请求体结构及鉴权流程,参见 HTTP API 参考。