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_DIR 和 lesson:* 脚本直接运行。