feat: 开发阶段开放局域网访问,移除网络隔离与访问约束
- compose: 去掉 control 网络的 internal 标记(internal 网络上 Docker 会静默丢弃端口发布,导致局域网无法访问) - docker-gateway: 浏览器网络改为普通 bridge,移除 internal+禁 ICC - AGENTS.md: 新增开发阶段原则(仅业务功能、不做访问限制、安全自管),删除输入信任/风控/敏感日志约束 - docs/README: 同步移除 localhost-only 与网络隔离声明 - 端口改为 8082(8080 被 multica-backend-1 占用)
This commit is contained in:
@@ -27,10 +27,10 @@ React ──> control-plane ── /api/browsers ──> docker-gateway ──>
|
||||
- 镜像、命令、网络、挂载和资源限制均由网关固定,外部输入只有受校验的名称和数字 seed;
|
||||
- 启停和删除前必须同时匹配固定名称前缀及 `io.creatorhub.managed`、`io.creatorhub.runtime-id` 标签;
|
||||
- 动态容器使用只读根文件系统、非 root 镜像、全部 capability drop、`no-new-privileges`、CPU/内存/PID 限制,且无宿主机端口和目录挂载;
|
||||
- 控制面只绑定 `127.0.0.1`,控制网络为固定名称的 Compose internal 网络;浏览器 bridge 关闭 ICC,阻止运行时直接互访,并按 ownership、role、driver、Internal 和完整 options 失败关闭校验,且拒绝复用 control 网络;
|
||||
- 控制面发布到宿主机所有网卡;控制网络为固定名称的 Compose 网络;浏览器 bridge 按 ownership、role、driver、Internal 失败关闭校验,且拒绝复用 control 网络;
|
||||
- 浏览器镜像固定为审核过的 immutable digest;运行时创建请求同时固定非 root `1000:1000` 与镜像入口,构建阶段和最终基础镜像也均锁定 digest。
|
||||
|
||||
网关自身一旦被攻破,socket 仍允许接管宿主机;应用内校验不能消除这个平台级风险。当前控制面没有认证或 CSRF 防护,只支持可信单用户从 localhost 访问。进入共享或生产环境前,必须先补认证与 CSRF 边界,并把浏览器调度迁到独立 Docker daemon/VM,或使用宿主机 Docker authorization plugin 做第二层强制授权,不应把 socket 暴露给公网服务。
|
||||
网关自身一旦被攻破,socket 仍允许接管宿主机;应用内校验不能消除这个平台级风险。开发阶段控制面不做认证或访问限制,安全由部署者自行把控。
|
||||
|
||||
## 运行
|
||||
|
||||
@@ -41,9 +41,9 @@ docker pull git.ipao.vip/rogee/fingerprint-chromium@sha256:b9f23b8e3ac640174db0d
|
||||
DOCKER_GID=$(stat -c %g /var/run/docker.sock) docker compose up --build
|
||||
```
|
||||
|
||||
打开 <http://127.0.0.1:8080>。浏览器镜像固定为 `git.ipao.vip/rogee/fingerprint-chromium@sha256:b9f23b8e3ac640174db0dfa49e9095fe7eb06f5db55a4e7550d979b35ff3a1b7`。阶段 A 网络默认失败关闭且不能访问外网;后续授权沙箱必须先设计受管出口,再调整 `browser` 网络。
|
||||
打开 <http://127.0.0.1:8080>,局域网内用宿主机 IP 访问同一端口。浏览器镜像固定为 `git.ipao.vip/rogee/fingerprint-chromium@sha256:b9f23b8e3ac640174db0dfa49e9095fe7eb06f5db55a4e7550d979b35ff3a1b7`。浏览器容器可访问外网。
|
||||
|
||||
创建成功但启动失败时,网关会立即删除失败容器并保留命名 Profile 卷,允许同名请求安全重试。跨容器隔离回归可用 `CREATORHUB_DOCKER_INTEGRATION=1 go test -run TestDockerIntegrationBlocksCrossContainerTraffic ./cmd/docker-gateway` 运行。
|
||||
创建成功但启动失败时,网关会立即删除失败容器并保留命名 Profile 卷,允许同名请求安全重试。
|
||||
|
||||
## 阶段 A 离线闭环
|
||||
|
||||
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
# CreatorHub 部署
|
||||
|
||||
本文档适用于当前阶段 A:在一台可信 Linux 主机上通过 Docker Compose 部署,且仅允许本机单用户访问。当前控制面没有认证或 CSRF 防护,PostgreSQL 使用仅限内部网络的 `trust` 认证;不要将服务反向代理到公网或共享网络。
|
||||
本文档适用于当前阶段 A:在一台 Linux 主机上通过 Docker Compose 部署。开发阶段不设访问限制,安全由部署者自行把控。
|
||||
|
||||
## 部署内容
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
- `postgres`:PostgreSQL 17,数据保存在 `creatorhub_postgres` 命名卷;
|
||||
- 浏览器容器:由网关按需创建,使用固定摘要的指纹浏览器镜像,Profile 保存在 `creatorhub-profile-<运行时名称>` 命名卷。
|
||||
|
||||
控制面只发布到 `127.0.0.1`。Compose 的 `creatorhub_control` 网络和网关创建的 `creatorhub_browser` 网络均为内部网络;阶段 A 的浏览器容器默认不能访问外网,也不能互相通信。
|
||||
控制面发布到宿主机所有网卡,局域网内可直接访问;浏览器容器可访问外网。
|
||||
`creator-hub` 会等待 `docker-gateway` 健康检查通过后再启动。
|
||||
|
||||
## 前置条件
|
||||
@@ -34,7 +34,7 @@ docker compose config --quiet
|
||||
|
||||
## 首次部署
|
||||
|
||||
以下命令应在同一个 shell、仓库根目录执行。`DOCKER_GID` 必须与宿主机 Docker socket 的组一致;`CREATORHUB_PORT` 仅控制本机监听端口。
|
||||
以下命令应在同一个 shell、仓库根目录执行。`DOCKER_GID` 必须与宿主机 Docker socket 的组一致;`CREATORHUB_PORT` 控制控制面的宿主机端口。
|
||||
|
||||
```bash
|
||||
export DOCKER_GID="$(stat -c '%g' /var/run/docker.sock)"
|
||||
@@ -80,7 +80,7 @@ Compose 部署时通常只需设置以下宿主机变量:
|
||||
|
||||
| 变量 | 默认值 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `CREATORHUB_PORT` | `8080` | 映射到 `127.0.0.1` 的控制面端口 |
|
||||
| `CREATORHUB_PORT` | `8080` | 控制面宿主机端口,局域网可访问 |
|
||||
| `DOCKER_GID` | `999` | Docker socket 的宿主机组 ID;必须按实际值设置 |
|
||||
|
||||
服务本身支持并校验以下环境变量;`compose.yaml` 已提供当前部署所需的值:
|
||||
@@ -97,7 +97,7 @@ Compose 部署时通常只需设置以下宿主机变量:
|
||||
| `docker-gateway` | `BROWSER_NETWORK` | `creatorhub_browser` |
|
||||
| `docker-gateway` | `LOG_LEVEL` | 默认 `info` |
|
||||
|
||||
不要把凭据写入仓库或 Compose 文件。共享或生产部署必须先补充认证、CSRF 防护和独立 Docker daemon/VM(或 Docker authorization plugin),并将 PostgreSQL 改为强认证。
|
||||
不要把凭据写入仓库或 Compose 文件。
|
||||
|
||||
## 更新与回滚
|
||||
|
||||
|
||||
Reference in New Issue
Block a user