App is not loading when running remotely
以下是用户在远程托管Streamlit应用程序时,自己搭建解决方案时常见的几个错误。
要了解一种看似简单的方法来托管Streamlit应用程序,避免以下所有问题,请查看Streamlit Community Cloud。
Symptom #1: The app never loads
当你在浏览器中输入应用程序的URL时,如果只看到空白页面、“页面未找到”错误、“连接被拒绝”错误或类似情况,首先检查Streamlit是否确实在远程服务器上运行。在Linux服务器上,你可以通过SSH登录,然后运行:
ps -Al | grep streamlit
如果你看到 Streamlit 正在运行,最可能的原因是 Streamlit 端口未暴露。解决方法取决于你的具体设置。以下是三个示例解决方法:
-
尝试端口80: 一些主机默认暴露端口80。要将Streamlit设置为使用该端口,请使用
--server.port选项启动Streamlit:streamlit run my_app.py --server.port=80 -
AWS EC2 服务器: 首先,在AWS 控制台中点击您的实例。 然后向下滚动并点击安全组 → 入站 → 编辑。接下来,添加 一个自定义 TCP规则,允许端口范围
8501,来源 为0.0.0.0/0。 -
其他类型的服务器: 检查防火墙设置。
如果这仍然不能解决问题,尝试运行一个简单的HTTP服务器而不是Streamlit,看看它是否能正常工作。如果可以,那么你知道问题出在你的Streamlit应用程序或配置中(在这种情况下,你应该在我们的论坛上寻求帮助!)如果不可以,那么它肯定与Streamlit无关。
如何启动一个简单的HTTP服务器:
python -m http.server [port]
Symptom #2: The app says "Please wait..." or shows skeleton elements forever
从版本1.29.0开始,此症状的表现有所不同。对于较早版本的Streamlit,加载应用程序会在页面中央显示一个带有“请稍候...”消息的蓝色框。从版本1.29.0开始,加载应用程序会显示骨架元素。如果此加载屏幕没有消失,根本原因可能是以下之一:
- 使用端口3000,该端口保留用于内部开发。
- 配置错误的CORS保护。
- 服务器正在从Websocket连接中剥离头部信息,从而破坏了压缩功能。
要诊断问题,首先确保你没有使用端口3000。如果有疑问,请尝试如上所述的端口80。
接下来,尝试通过运行Streamlit并设置--server.enableCORS标志为false来暂时禁用CORS保护:
streamlit run my_app.py --server.enableCORS=false
如果这解决了你的问题,你应该重新启用CORS保护,然后将
browser.serverAddress 设置为你的Streamlit应用的URL。
如果问题仍然存在,尝试通过运行Streamlit时设置--server.enableWebsocketCompression标志为false来禁用Websocket压缩。
streamlit run my_app.py --server.enableWebsocketCompression=false
如果这解决了你的问题,你的服务器设置可能正在剥离用于协商Websocket压缩的Sec-WebSocket-Extensions HTTP头。
Streamlit 不需要压缩即可工作,但强烈建议使用压缩,因为它可以提高性能。如果您想重新启用它,您需要找到基础设施中剥离 Sec-WebSocket-Extensions HTTP 头的部分,并更改该行为。
Symptom #3: Unable to upload files when running in multiple replicas
如果文件上传小部件返回状态码为403的错误,这可能是由于您的应用程序中的XSRF保护逻辑配置错误所致。
要诊断问题,请尝试通过运行Streamlit并设置--server.enableXsrfProtection标志为false来暂时禁用XSRF保护:
streamlit run my_app.py --server.enableXsrfProtection=false
如果这解决了你的问题,你应该重新启用XSRF保护并尝试以下一种或两种方法:
- 将
browser.serverAddress和browser.serverPort设置为你的 Streamlit 应用程序的 URL 和端口。 - 通过将
server.cookieSecret配置选项设置为相同的难以猜测的字符串,配置您的应用程序在每个副本中使用相同的密钥。
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。