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

Docker部署Streamlit应用配置https-portal实现HTTPS失败求助

排查steveltn/https-portal配置HTTPS失败的问题

根据你给出的报错信息,核心问题是Let's Encrypt无法完成域名example.go.ro的证书签发,根源大概率是DNS解析配置错误或未生效,再结合你的docker-compose配置,按以下步骤排查修复:

1. 先确认DNS解析正确性

  • 在测试机上执行命令:
    nslookup example.go.ro
    # 或者用dig更详细查看
    dig example.go.ro
    
    检查返回的IP是否是测试机的公网IP,如果不是,立刻去你的域名管理后台,把该域名的A记录(IPv4)或AAAA记录(IPv6)指向测试机的公网IP。
  • DNS解析存在延迟,刚修改的记录可能需要10-30分钟才能全网生效,可通过dig example.go.ro @8.8.8.8检查公共DNS的解析状态。

2. 修正docker-compose.yaml配置

你的配置存在两处关键错误:

  • DOMAINS格式错误:不需要加http://前缀,正确格式应为域名直接指向后端服务地址
  • streamlit_app无需暴露端口:反向代理已经接管外部请求,后端容器不需要把8501端口暴露给外部,避免直接HTTP访问

修改后的完整配置:

services:
  https-portal:
    image: steveltn/https-portal:1
    ports:
      - '80:80'
      - '443:443'
    networks:
      - app-network
    restart: always
    environment:
      WEBSOCKET: 'true'
      DOMAINS: 'example.go.ro -> http://streamlit_app:8501'
      STAGE: staging # 调试阶段先用测试环境,避免生产环境限流
    volumes:
      - https-portal-data:/var/lib/https-portal
      
  streamlit_app:
    build:
      dockerfile: ./Dockerfile
      context: ./ 
    volumes:
      - .:/ETCWebApp
    networks:
      - app-network
    restart: always

networks:
  app-network:
    driver: bridge

volumes:
  https-portal-data:

3. 检查端口与防火墙

  • 确保测试机的80、443端口在本地防火墙(如ufw、iptables)和云服务商安全组中完全开放,Let's Encrypt的HTTP-01验证必须通过80端口完成。
  • 关闭测试机上其他占用80/443端口的服务,避免端口冲突。

4. 重置证书缓存(可选)

如果之前有错误的证书缓存残留,执行以下命令重置:

docker-compose down -v
docker-compose up -d

调试完成后,再把STAGE改回production即可获取正式的信任证书。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:38:49