MINARA
使用 Minara进阶

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 运行在 4173apps/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 参考

本页目录