1

我正在 Holoviews 中构建仪表板,并尝试使用 Jupyter 笔记本中的 panel.serve() 为其提供服务。它在我的本地计算机上运行良好,但我需要与公司网络中的其他计算机共享它,以便人们可以实际使用它。由于隐私问题,我无法将它部署到 Heroku 或类似的东西。这是示例代码:

import panel as pn
pn.extension()
dashboard_title = pn.panel('## Test Dashboard')
dashboard_footlote = pn.panel('Test Test Test')
dash = pn.Column(dashboard_title, dashboard_footlote)
dash.servable(title="Claims Dashboard")
pn.serve(dash)

当我在 Jupyter 笔记本中运行它时,它会打开一个新的浏览器窗口和其中的仪表板。我尝试通过在地址栏中键入http://10.80.60.31:60840/从另一台计算机访问相同的仪表板。但这并没有说明什么。在 Jupyter 单元中,我收到以下错误:

ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://10.80.40.41:60840';
use --allow-websocket-origin=10.80.40.41:60840 or set BOKEH_ALLOW_WS_ORIGIN=10.80.40.41:60840 to permit this; currently we allow origins {'localhost:60840'}

我尝试将代码中的最后一行更改为以下内容:

pn.serve(dash, websocket_origin=['10.80.60.31:60840','localhost:60840'])

但是它甚至在本地也不起作用,因为端口发生了变化。它给了我一个错误:

ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://localhost:58370';
use --allow-websocket-origin=localhost:58370 or set BOKEH_ALLOW_WS_ORIGIN=localhost:58370 to permit this; currently we allow origins {'localhost:60840', '10.80.60.31:60840'}

如果我尝试像这样分配特定端口:

pn.serve(dash, port = 60840, websocket_origin=['10.80.60.31:60840','localhost:60840'])

它甚至没有开始说:

OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted

解决方案可能很简单,但我对所有网络内容知之甚少,我什至不知道该谷歌搜索什么。

如果您能指导我如何使其工作,我将不胜感激。

4

2 回答 2

2

pn.serveable(dash)在 .py 文件中使用,然后panel serve --port 8086 file.py单独启动,但我认为这与您正在做的工作类似。典型的“陷阱”是您需要确保您使用的任何端口都没有被您的网络配置防火墙,以便其他计算机可以访问它。您可能需要在计算机的防火墙规则中添加例外以打开特定端口。您可以使用该端口上的任何程序(Web 服务器、ssh 客户端、telnet 客户端等)进行测试;panel 的服务器在这方面没有任何特殊要求。https://docs.bokeh.org/en/latest/docs/user_guide/server.html#deployment-scenarios有很多细节,但是配置您的系统以不阻止某个端口是您必须在公司环境中与您的 IT 部门一起解决的问题。

于 2021-09-17T18:37:19.880 回答
1

我有一个建议。尝试将“*”添加到来源列表

pn.serve(dash, port=80, websocket_origin=['*'])

我已经尝试过你的代码,它适用于我。

于 2021-09-18T00:39:52.453 回答