资讯动态

Streamlit 部署:demo 跑通之后,三种上线路线怎么选

发布时间:2026/10/26 1:37:38 来源:尧图企业网站定制
Streamlit 部署demo 跑通之后三种上线路线怎么选【免费下载链接】streamlitStreamlit — A faster way to build and share data apps.项目地址: https://gitcode.com/gh_mirrors/st/streamlit你的 Streamlit 应用在localhost:8501上跑得挺好但同事在他的机器上打不开——Streamlit 部署的问题就从这一刻开始应用该放到哪里、谁来托管、怎么让别人访问到。主流做法有三条推到官方托管平台、用 Docker 容器化、或者部署到自己的服务器/云服务器。下面先给结论再展开只发 demo 选托管平台团队内部长期使用选容器要自定义域名、HTTPS 和访问控制就选自有服务器。Streamlit 三种部署方式怎么选路线适合谁代价典型限制官方托管平台个人 demo、快速分享给同事只需一个 Git 仓库平台装环境、开端口、管进程免费额度有休眠和存储上限定制能力少Docker 容器化团队内长期使用、依赖复杂本地模型、多语言库写一个 Dockerfile约 20 行需要一个能跑容器的地方自己的 VPS 或云厂商的容器服务自有服务器/云厂商自定义域名、HTTPS、访问控制、和现有内网打通自己管端口、防火墙、反向代理和进程守护运维工作量最大出问题基本都自己排查三条路线没有高下之分只有约束不同。先想清楚谁会访问这个应用、它要跑多久选择自然就出来了。路线一官方托管把仓库推上去就上线最快的路径是官方托管平台代码进 Git 仓库平台连接你的账号、选中仓库应用就自动构建上线环境、端口、HTTPS 全部托管方处理你只需要指定入口脚本比如app.py和依赖清单。限制也要提前知道决定它只适合演示和轻量应用免费额度通常带空闲休眠没人访问几分钟就挂起、存储和流量上限、无法自定义域名、拿不到服务器日志。团队内部长期跑、或数据量稍大的应用建议直接跳到下面两条路线。路线二Docker 打包 Streamlit 的最小 Dockerfile容器化的核心目的是环境一致性镜像里锁死 Python 版本和依赖版本本地和线上跑的是同一套东西在我机器上是好的这类问题直接消失。FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8501 CMD [streamlit, run, app.py, --server.address0.0.0.0]逐行看关键点FROM python:3.11-slim基础镜像直接定死 Python 版本和开发环境保持一致slim 版体积小、攻击面小。COPY requirements.txt .RUN pip install先装依赖再拷代码依赖没变时构建可以命中缓存不用每次重装。EXPOSE 8501Streamlit 默认端口是 8501这个指令只是声明真正对外的端口靠容器运行时映射比如docker run -p 8501:8501。CMD里的--server.address0.0.0.0是全篇最关键的一个参数监听全部网卡。缺了它容器里 localhost 能访问、外面永远连不上。有本地模型或多语言依赖时在COPY . .之前多加一层RUN把对应依赖装好即可骨架不变。路线三部署到云服务器端口、反代与 HTTPS自有服务器/云厂商路线你要亲手管三件事端口、反向代理、安全配置。端口Streamlit 默认监听 8501。云服务器的安全组安全组/防火墙规则和系统防火墙都要放行这个端口只开一边都连不通。启动把监听地址绑到全部网卡即可生产上不建议开热重载streamlit run app.py --server.address0.0.0.0 --server.port8501反向代理不要让用户直连 8501用 nginx 监听 443转发到本机并转发 WebSocket 头Streamlit 前端和后端之间走 WebSocket 通信反代不支持 WebSocket 的话页面白屏location / { proxy_pass http://127.0.0.1:8501; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; }TLS 证书交给反代处理云厂商一般有现成的证书申请流程应用层收到的就是 HTTP省事。健康检查Streamlit 自带/_stcore/health端点实现见 lib/streamlit/web/server/starlette/starlette_routes.py配置健康检查时直接指这个路径成功返回 200、脚本加载失败返回 503容器编排和监控都拿它用。子路径与主机名应用挂在域名子路径下比如example.com/myapp时设置server.baseUrlPath /myapp否则前端资源路径对不上安全收紧时再用server.allowedHosts填允许的 Host 白名单挡住 DNS rebinding 一类的攻击。Streamlit 部署常见翻车现场现象、原因与解法现象原因解法本地能访问外网/同事连不上server.address未设置时默认只绑 localhost容器里也一样启动时加--server.address0.0.0.0地址端口对TCP 都连不上云安全组或系统防火墙没放行 8501两边都检查只开一边不行页面报错提示 XSRF token 缺失反代后页面来源和 WebSocket 来源对不上或误关了保护反代正确转发并保留 Host 头确需跨域时开server.enableCORS并配server.corsAllowedOrigins本地有secrets.toml线上取不到文件没随镜像/代码走或路径不对敏感值改走环境变量注入别提交进仓库确需保留文件就挂载到.streamlit/下健康检查一直失败检查的不是/_stcore/health或脚本初始化就抛异常改对路径脚本启动错误看服务日志每次交互都重算、页面卡Streamlit 每次交互都会从头重跑整个脚本重计算加st.cache_data大数据集避免重复构建副本进程挂了没人知道、也不拉起直接裸跑进程没有守护用 systemd、supervisor 或容器托管挂掉自动重启上线前必查的 5 个配置server.address是0.0.0.0安全组与防火墙都已放行 8501从非本机网络访问/_stcore/health返回 200密钥、token 已移出代码库用环境变量或挂载文件注入XSRF/CORS 保持默认开启反代场景下不裸关保护进程有守护systemd 或容器崩溃能自动拉起反代转发后curl -sI -N带Upgrade: websocket请求能拿到 101再往后就是常规运维日志接集中收集并做轮转指标接监控平台CI/CD 里加一步构建镜像 → 推送 → 滚动替换每次合并自动上线。一句话带过即可先把上面六项过完。下一步今天就把发布前自检清单跑一遍然后拿手机切到 4G 网络或找另一台机器直接访问线上地址页面能开、按钮点了有反应部署就算完成哪一步卡住回上面的排错表对号入座。【免费下载链接】streamlitStreamlit — A faster way to build and share data apps.项目地址: https://gitcode.com/gh_mirrors/st/streamlit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑