English | 简体中文

最终站点由发布宿主仓库负责。本仓库只保留可选 Agent Gateway 容器,不再构建或服务一套 重复站点。

启动 Gateway

AGENT_ALLOWED_ORIGIN=https://example.com \
AGENT_GATEWAY_PORT=4319 \
docker compose build --pull

AGENT_ALLOWED_ORIGIN=https://example.com \
AGENT_GATEWAY_PORT=4319 \
docker compose up -d

容器端口只发布到 127.0.0.1:4319。最终博客/站点的反向代理负责公开路由,并转发到 回环服务的 /v1/plan。保留 Origin、覆盖 X-Real-IP、拒绝非 POST 请求、限制 128 KiB 请求体,并在反代层增加连接与速率限制。

Nginx 示例:

location = /infinite-canvas/api/agent {
  client_max_body_size 128k;
  proxy_pass http://127.0.0.1:4319/v1/plan;
  proxy_set_header Origin $http_origin;
  proxy_set_header Sec-Fetch-Site $http_sec_fetch_site;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_connect_timeout 3s;
  proxy_read_timeout 55s;
  proxy_buffering off;
}

安全边界

  • 容器以非 root 运行,使用 read-only filesystem、drop capabilities、有界资源与 no-new-privileges
  • Gateway 只接受配置的浏览器 Origin、JSON POST、有界输入,以及 443 端口的公网 HTTPS Provider 目标。
  • DNS 结果、redirect、响应大小、timeout、单 client/全局速率、client table 与并发都有限制。
  • API Key 只经过一次请求,不持久化、不记录。
  • Docker 只是纵深防御。需持续更新 Docker、Node、基础镜像和宿主反向代理。

教材校验/生成服务与此容器独立。需要时使用 CANVAS_COURSE_CONTENT_DIRlesson:* 脚本直接运行。