docker文件内容如下
FROM python:3.9.18
# 设定当前的工作目录
WORKDIR /app
# 拷贝当前项目到/app目录下(.dockerignore中文件除外)
COPY . /app
RUN pip install --user -r requirements.txt -i https://mirrors.tencent.com/pypi/simple/
ENV PATH=/root/.local/bin:$PATH
# 此处端口必须与「服务设置」-「流水线」以及「手动上传代码包」部署时填写的端口一致,否则会部署失败。
EXPOSE 8501
RUN chmod +x /app/start.sh
CMD ["bash", "start.sh"]
requirements.txt内容如下:(streamlit-login-auth-ui只支持python3.9+)
streamlit==1.26.0 streamlit-login-auth-ui==0.2.0 lunar_python==1.3.4
app.py内容如下:(就是个正常的页面,可以换成其他更简单的)
# -*- coding: utf-8 -*-
import os
import streamlit as st
from streamlit_login_auth_ui.widgets import __login__
__login__obj = __login__(auth_token = os.getenv('MAIL_API_TOKEN'),
company_name = "Test",
width = 200, height = 250,
logout_button_name = '登出', hide_menu_bool = False,
hide_footer_bool = False,
lottie_url = 'https://assets2.lottiefiles.com/packages/lf20_jcikwtux.json')
LOGGED_IN = __login__obj.build_login_ui()
if LOGGED_IN == True:
st.markown("Your Streamlit Application Begins here!")
start.sh内容如下:
streamlit run /app/main.py
现在的情况是部署完上线以后,开启公网访问,打开网址后一直显示“Please wait...”,浏览器控制台显示“无法建立到 wss://长长的公网域名/_stcore/stream 服务器的连接。”
尝试过在streamlit run后面加--server.enableXsrfProtection=false --server.enableCORS=false --server.enableWebsocketCompression=false --browser.serverAddress=公网域名 --server.port=80 中的一个或几个都没用,当然改server.port也会对应修改EXPOSE端口号和流水线的端口号。
尝试把https改成http后访问也没用。
请问大家有什么建议或者想法吗?
可能需要在config.toml里添加
[server] headless=true
因为默认是true,会导致部署的机器主动去打开浏览器。
不过我说的不一定对。
这个问题在好几个平台上都出现,后来调研的一个可能原因是,域名经过了 cdn 加速引起的。/etc/hosts 里面加入源站 IP 是可以连接成功。但是由于IP经常变动,这个很不现实。现在可用的方案就是使用独立IP(非公共入口)可能有帮助(没试过)
朋友 解决了吗? 怎么解决的呢