如何在Jupyter Hub环境运行Streamlit应用并支持多用户访问
前置准备
- 打开Jupyter Hub内置的终端,执行命令安装Streamlit,避免全局权限问题:
pip install --user streamlit - 新建测试应用文件(比如命名为
jh_streamlit_test.py),写入基础测试代码:
import streamlit as st st.title('This is a Streamlit test in JH')
适配Jupyter Hub的启动方式
本地环境直接跑streamlit run 文件名.py就能访问,但Jupyter Hub有反向代理层,直接启动会出现路径不匹配、无法访问的问题,启动时需要加适配参数:
仅当前用户自己访问(和Voila体验一致)
在终端执行启动命令:streamlit run jh_streamlit_test.py --server.port 8501 --server.address 0.0.0.0 --server.baseUrlPath=/user/$USER/proxy/8501/
启动后不用管终端输出的localhost链接,直接在浏览器访问https://<你的Jupyter Hub访问域名>/user/<你的Hub用户名>/proxy/8501/就能看到渲染好的应用,交互逻辑和本地运行完全一致。
如果启动时提示8501端口被占用,换成1024-65535之间任意未被使用的端口即可,记得同步替换命令和访问地址里的端口号。
开放给Hub内其他用户访问
如果要让同Hub下的其他用户也能访问你的应用,启动时额外关闭两个默认的访问校验参数即可:streamlit run jh_streamlit_test.py --server.port 8501 --server.address 0.0.0.0 --server.baseUrlPath=/user/$USER/proxy/8501/ --server.enableCORS false --server.enableXsrfProtection false
只要Hub管理员没有配置用户代理端口的访问隔离,其他用户直接访问和你相同的应用地址,就能直接打开使用,不需要在他们自己的环境里重复安装依赖或启动服务。
如果需要关了终端也让应用持续跑,可以在启动命令前加nohup挂后台:nohup streamlit run jh_streamlit_test.py [你的其余启动参数] &
内容的提问来源于stack exchange,提问作者JFerro

