You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Nginx在DigitalOcean Droplet部署Streamlit Docker镜像遇加载异常

排查方向:Streamlit + Nginx反向代理卡在"Please wait..."

1. 修复WebSocket相关的Nginx配置

Streamlit依赖WebSocket实现实时交互,你的配置中注释掉了proxy_http_version 1.1;,这会导致WebSocket握手失败,是加载卡住的核心原因之一。
修改Nginx配置,取消该行注释:

# file located /etc/nginx/sites-available/default
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
            proxy_pass http://localhost:8501;
            proxy_http_version 1.1; # 必须启用这行
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
}

修改后执行sudo systemctl restart nginx生效。

2. 验证容器与主机的网络连通性

在Droplet主机上执行:

curl http://localhost:8501

如果无法返回Streamlit的HTML页面,说明:

  • 容器内的Streamlit未监听0.0.0.0:启动命令需改为streamlit run --server.address 0.0.0.0 app.py(容器内仅监听localhost的话,主机无法访问)
  • 端口映射失败:检查容器启动命令的-p 8501:8501是否正确,用docker ps确认容器端口状态

3. 查看日志定位异常

  • Nginx错误日志:查看是否有连接或WebSocket相关错误
    tail -f /var/log/nginx/error.log
    
  • Streamlit容器日志:检查是否有数据库连接失败、请求处理异常
    docker logs <你的容器ID>
    

4. 检查防火墙规则

  • Droplet本地防火墙:确保80端口开放
    sudo ufw allow 80
    sudo ufw reload
    
  • DigitalOcean云防火墙:确认已添加入站规则允许80端口的TCP流量

5. 增加Nginx代理超时设置

Streamlit加载页面可能需要较长时间,默认超时设置可能导致连接中断,在location块中添加超时配置:

proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;

6. 确认Streamlit启动参数

容器内启动Streamlit时,需确保:

  • 监听地址为0.0.0.0:--server.address 0.0.0.0
  • 必要时关闭CORS/XSRF保护(如果存在跨域问题):--server.enableCORS false --server.enableXsrfProtection false

内容的提问来源于stack exchange,提问作者Randall Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:23:17