Bläddra i källkod

出厂口径 = 监听所有 IP (用户令 2026-09-19): 文档与兜底默认值同步

- README: 第二节改成"出厂已是监听所有 IP"口径, 并写清只本机/换内网 IP 的回退办法与安全提醒。
- guanlan.py DEFAULT: public_host 兜底值也设 "0.0.0.0" —— 与 configs/serve.json 的运行期真源一致
  (配置读不到时不再出现"行为跟出厂配置不一样")。
zhouyang.xie 3 veckor sedan
förälder
incheckning
88928afdfe
2 ändrade filer med 14 tillägg och 11 borttagningar
  1. 6 5
      README_先读我.MD
  2. 8 6
      guanlan.py

+ 6 - 5
README_先读我.MD

@@ -24,13 +24,14 @@
             (会闪一下窗口 —— .bat 是控制台程序, 想完全无窗就用上面那个快捷方式)   停止: 双击 stop.bat
   Linux   : <PY> guanlan.py check → <PY> guanlan.py serve           停止: <PY> guanlan.py stop
   三个入口: 门户 http://127.0.0.1:28084/ · 工作台 /detail/ · 运维控制台 /ops
-  ★ 要让**别的机器**打开页面 (用户令 2026-09-19「观澜改为监听所有 IP」):
-    改 configs/serve.json 的 "public_host": "0.0.0.0" (或指定某个内网 IP) → 重启服务 →
-    别的机器开 http://<本机IP>:28084/ 。**只有门户网关**对外, 组件(detail/cms/viewer/sim)仍绑 127.0.0.1。
+  ★ 别的机器怎么打开 (用户令 2026-09-19「观澜改为监听所有 IP」): **出厂已是 this 口径** ——
+    configs/serve.json 的 "public_host": "0.0.0.0" ⇒ 门户网关绑所有网卡, 别的机器开
+    http://<本机IP>:28084/ 。**只有门户网关**对外, 组件(detail/cms/viewer/sim)仍绑 127.0.0.1。
     Windows 还要放行入站端口: netsh advfirewall firewall add rule name=guanlan28084 dir=in action=allow protocol=TCP localport=28084
+    只给本机用就把它改回 ""(跟 host) 或 "127.0.0.1"; 也可以填某个内网 IP 只放那一个地址。改完重启服务。
     ★★ 页面**没有鉴权** ⇒ 对外监听等于把全场运行数据摊开。请同时限来源 (防火墙只放自己的 IP / 反代加认证),
-       不要直接挂公网; 只给运维看的话更稳的做法是保持 public_host 为空 + SSH 隧道
-       (ssh -L 28084:127.0.0.1:28084 <user>@<服务器>)。
+       不要直接挂公网; 只给运维看时更稳的是 public_host 留空 + SSH 隧道
+       (ssh -L 28084:127.0.0.1:28084 <user>@<服务器>) —— 启动日志里每次都会提醒这一条。
   ★ 无人值守/远程部署: 用 Windows 服务(开机自启 + 崩溃自动重启):
     (管理员) <PY> scripts\service_ctl.py install        服务名 = guanlan (显示名「观澜·如东样板 v2 …」)
     查状态: sc query guanlan   ·   Linux 对应 systemd 单元 guanlan.service

+ 8 - 6
guanlan.py

@@ -28,17 +28,19 @@ def _hermetic():
 
 _hermetic()
 DEFAULT = {
-    "host": "127.0.0.1", "public_host": "", "gateway": 28084, "detail": 18033, "cms": 18020, "sim": 18791, "sim_sys": 18792, "viewer": 64292, "ollama": 11434,
+    "host": "127.0.0.1", "public_host": "0.0.0.0", "gateway": 28084, "detail": 18033, "cms": 18020, "sim": 18791, "sim_sys": 18792, "viewer": 64292, "ollama": 11434,
     "release_dir": "release", "viewer_dir": "release/viewer", "sim_dir": "resources/oem_envision_sc1_rudong2014",
     "python": "",   # 空 = 当前解释器 (安装脚本建的 .venv)
 }
-# ★`host` = 组件(内部 API: detail/cms/viewer/sim)监听地址, 出厂口径 **127.0.0.1**(只本机, 不联网)。
+# ★`host` = 组件(内部 API: detail/cms/viewer/sim)监听地址, **127.0.0.1**(只本机, 不联网)。
 #   `public_host` = **门户网关**监听地址(用户令 2026-09-19「观澜改为监听所有 IP」):
-#     空 ⇒ 跟 host(出厂=只本机);  设 "0.0.0.0" ⇒ 门户在任何网卡上都可访问(局域网/公网按系统防火墙定)。
-#   ★只放网关一个口子出去,**组件仍绑本机** —— 这样对外只有一个 28084 入口(网关自己做路由与改写),
+#     出厂/内置默认 **"0.0.0.0"** = 门户在任何网卡上都能访问(别的机器开 http://<本机IP>:28084/);
+#     空串 ⇒ 跟 host(只本机); 填某个内网 IP ⇒ 只放那一个地址。configs/serve.json 是运行期真源,
+#     这里只是"配置读不到时的兜底", 两边口径保持一致。
+#   ★只放网关一个口子出去,**组件仍绑本机** —— 对外只有一个 28084 入口(网关自己做路由与改写),
 #   内部 API(/api/*、CMS 18020、viewer 64292、sim 18791)不直接暴露。
-#   ★页面**没有鉴权**:对外监听等于把全场的运行数据摊开。要对外请同时做一层限制(防火墙白名单/反代加
-#   认证/只绑内网 IP),别把它直接挂公网。改法见 README 第五节与 docs/系统设计说明.md §7。
+#   ★页面**没有鉴权**:对外监听等于把全场的运行数据摊开。请同时做一层限制(防火墙白名单/反代加
+#   认证/只绑内网 IP),别把它直接挂公网。改法与回退口径见 README 第二节与 docs/系统设计说明.md §7。
 
 
 def jload(p: Path):