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

Streamlit-WebRTC部署AWS服务器后报错,配置STUN服务器仍未解决

问题解决:Streamlit-WebRTC部署后navigator.mediaDevices未定义错误

错误核心原因

你碰到的Error: navigator.mediaDevices is undefined. It seems the current document is not loaded securely.错误,本质是WebRTC API仅允许在安全上下文(HTTPS协议)中运行。你当前通过HTTP(http://13.48.59.97:80)访问应用,浏览器会直接限制navigator.mediaDevices的调用权限——这和STUN服务器配置无关,STUN仅用于解决P2P网络穿透问题,无法突破安全上下文限制。

可行解决方案

必须将应用切换为HTTPS协议访问,以下是两种落地方式:

方案1:直接让Streamlit启用HTTPS

  1. 先为服务器IP/域名申请SSL证书(推荐用Let's Encrypt免费证书)
  2. 修改Docker启动命令,添加Streamlit的HTTPS参数:
    CMD streamlit run app.py --server.port=80 --server.sslCertFile=/app/cert.pem --server.sslKeyFile=/app/privkey.pem
    
    注意:需将证书文件挂载到容器内对应路径,或在构建镜像时复制进容器。

方案2:用Nginx做反向代理(更推荐)

  1. 在AWS服务器安装Nginx,配置反向代理规则,让Nginx处理HTTPS请求并转发到Streamlit的8501端口:
    server {
        listen 443 ssl;
        server_name 13.48.59.97;
    
        ssl_certificate /path/to/fullchain.pem;
        ssl_certificate_key /path/to/privkey.pem;
    
        location / {
            proxy_pass http://localhost:8501;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
  2. 调整Docker容器端口映射,仅在本地回环地址暴露8501端口:
    docker run -p 127.0.0.1:8501:8501 your-image-name
    

补充说明

你现有代码(包括STUN配置)本身无问题,故障完全源于访问协议。本地开发时localhost被浏览器视为安全上下文,所以不会报错,但公网环境必须使用HTTPS。

内容的提问来源于stack exchange,提问作者swami nathan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:33:31