diff --git a/README.md b/README.md index cac5013..b44d06c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,13 @@ > 两者不冲突:AGENTS.md 是"怎么做且怎么确认做对了",README 是"为什么"。 -将 **Dashy + SearXNG + 浏览器历史同步 + 管理后台**整合在单个 Docker 容器中,并附带**完整的内网服务发布方案**(带统一认证的反向代理 + webui4frpc 内网穿透),让外网通过域名安全访问内网服务。 +把 **反向代理 + 统一登录 + Dashy + SearXNG + 浏览器历史同步 + 管理后台 + 服务转发路由管理** +全部装进**同一个 Docker 容器**:容器自己就是统一入口(对外 3080/8443,3081 做 http→https 跳转), +按域名把请求分流到内网各服务,并对**逐条路由**决定是否需要登录。配合 webui4frpc 内网穿透, +外网即可用域名安全访问内网服务。 + +> 早期形态是「portal-nginx + portal-auth + navi」三个容器;现已合并为单容器(见下文「一体化模式」)。 +> 那三个旧组件中,`portal-nginx` / `portal-auth` 已停用,仅作为回滚保留。 ## 架构总览(生产全链路) @@ -22,28 +28,31 @@ │ frps: vhost 端口 + tcp 隧道 ▼ frpc (由 webui4frpc 在内网主机上管理, WebUI :7500) - │ configs/*.json → 定义各隧道 + │ configs/*.json → 定义各隧道(把公网 443 转到容器入口端口) ▼ -portal-nginx (统一认证反向代理, 容器) - │ auth_request → portal-auth(:4001) 统一登录 - │ map $host → 按子域名分流 +navi 单容器(--network host,既是应用也是统一入口) + │ nginx 监听 3080(TLS)/8443(TLS)/3081(→https 跳转) + │ ├─ 按 $host 查路由表(gateway.yml 生成,后台可维护) + │ ├─ 需要登录的路由 → auth_request ↗ 容器内置登录服务(:3005) + │ ├─ 未配置的域名 → 自定义 404(不会被兜底到某个服务) + │ └─ 上游故障 → 自定义 500(错误页本身免认证,否则会显示成 401) ▼ -navi 单容器 (Dashy+SearXNG+历史+管理, :3003) - │ 内层 nginx :8080 按路径分流 - ▼ -Dashy / SearXNG(→Clash 代理出网) / 历史 API / 管理 UI +Dashy / SearXNG(→Clash 代理出网) / 历史 API / 管理 UI / 各内网服务 + ``` ### navi 容器内部 ``` ┌─────────────────────────────────────────────────────┐ -│ nginx (:8080) — 统一入口,同域名同端口 │ +│ nginx (:18080) — 容器内统一入口(对外 3080/8443) │ │ ├─ / → Dashy 静态仪表盘 │ │ ├─ /search → SearXNG 搜索 (:8888) │ │ ├─ /static/ → SearXNG 静态资源 (:8888) │ │ ├─ /api/history/ → 历史同步 API (:3004) │ │ ├─ /admin/ → 管理后台 WebUI (:3005) │ +│ ├─ /auth/verify → 统一登录校验(auth_request) │ +│ └─ gateway/*.conf → 按域名生成的服务路由(可热更新)│ │ ├─ /conf.yml → 运行时导航配置(数据卷) │ │ └─ /item-icons/ → 自定义图标 (数据卷) │ └─────────────────────────────────────────────────────┘