解决Streamlit应用无法通过域名dharmatech.dev:8501访问的问题
默认设置可正常运行
我通过以下方式启动应用:
streamlit run Fed_Net_Liquidity.py
可以通过以下地址访问该应用:
http://24.199.124.110:8501/

问题情况
但当我执行以下命令时:
streamlit run --browser.serverAddress dharmatech.dev Fed_Net_Liquidity.py
尝试访问:
http://dharmatech.dev:8501/
出现访问失败的情况(截图见上方图片)。
服务器环境:
Ubuntu 22.04.4 LTS
问题问询
如何实现通过http://dharmatech.dev:8501/访问Streamlit应用?当前服务器上同时运行着Apache,但其占用的是80和443端口,理论上不会与Streamlit使用的8501端口冲突,恳请提供解决方案。
更新说明
经排查,该问题与SSL相关,相关参考内容翻译:在DigitalOcean部署Streamlit应用时,域名访问失败通常和SSL配置及反向代理设置有关,需要确保请求能正确转发并通过SSL加密。
解决方案
1. 配置Apache反向代理(推荐方案)
利用已运行的Apache做反向代理,将域名请求转发到本地Streamlit服务,同时配置SSL证书实现HTTPS访问:
- 创建Apache虚拟主机配置文件(例如
/etc/apache2/sites-available/dharmatech.dev.conf):# 强制HTTP跳转HTTPS <VirtualHost *:80> ServerName dharmatech.dev Redirect permanent / https://dharmatech.dev/ </VirtualHost> # HTTPS反向代理配置 <VirtualHost *:443> ServerName dharmatech.dev # 启用SSL并指定证书路径 SSLEngine on SSLCertificateFile /etc/letsencrypt/live/dharmatech.dev/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/dharmatech.dev/privkey.pem # 将请求转发到本地Streamlit服务 ProxyPass / http://127.0.0.1:8501/ ProxyPassReverse / http://127.0.0.1:8501/ </VirtualHost> - 启用Apache必要模块:
sudo a2enmod proxy proxy_http ssl rewrite - 重启Apache服务:
sudo systemctl restart apache2
2. 调整Streamlit启动命令
启动时绑定本地地址,避免直接暴露公网:
streamlit run Fed_Net_Liquidity.py --server.address 127.0.0.1 --server.port 8501
3. 确认SSL证书有效性
如果没有SSL证书,可以用Let's Encrypt免费申请:
sudo apt install certbot python3-certbot-apache sudo certbot --apache -d dharmatech.dev
申请完成后,certbot会自动配置Apache的SSL虚拟主机。
内容的提问来源于stack exchange,提问作者dharmatech
相关产品推荐
相关产品推荐

