Have fun with sci.dog

docker部署streamlit应用

最新项目需要,同事用streamlit开发了几个网页的应用,部署到服务器的具体过程记录如下:

1、项目文件的结构

源代码全部放到src路径下,.streamlit目录下的config.toml文件为streamlit的配置文件,Dockerfile为docker的构建文件。

2、streamlit配置

也就是config.toml文件需要设置下服务器的路径

[server]
baseUrlPath = "web"

baseUrlPath写一个路径,这样服务器启动后可以通过

http://localhost:8501/web

来访问。这里的8501也可以通过这个文件配置,也可以后边在Dockerfile里配置

3、Dockerfile配置

FROM python:3.10

ADD ./src/ /app/

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

ENV LANG C.UTF-8
# 设置语言为utf-8
WORKDIR /app
# 设置工作目录,也就是下面执行 ENTRYPOINT 后面命令的路径

RUN pip3 install -i https://pypi.mirrors.ustc.edu.cn/simple/ -U pip 
RUN pip3 config set global.index-url https://pypi.mirrors.ustc.edu.cn/simple

RUN pip3 install -r requirements.txt
# 根据requirement.txt下载好依赖包
EXPOSE 8501
ENTRYPOINT ["streamlit", "run", "UI_UnivariateSolution.py", "--server.port=8501", "--server. Address=0.0.0.0"]

这里,最后一行为docker容器建立后执行的命令,UI_UnivariateSolution.py为stremlit的入口程序。

4、docker镜像与容器

如果是在windows下,安装的docker desktop是通过wsl2驱动的,那么,一定要在windows 的terminal下打开这个文件夹,wsl2里一直提示找不到dockerfile

docker build -t img_us_240827 .

其中,img_us_240827为生成的镜像名称。这里可能碰到docker提示流量不足的问题,想办法换个节点或者代理才能解决。

生成镜像后,可以通过管理客户端看到。

再通过docker run建立容器,运行

docker run -p 8501:8501 -dit 55fcaa

55fcaa为镜像的ID号前几位

如此,成功启动容器,如下图

再通过浏览器打开

http://localhost:8501/web/

正常来说,这样就可以打开网页了。

5、服务器部署

先从本地导出镜像

docker save -o img_web.tar img_us_240827

img_web.tar为导出镜像文件的名称,img_us_240827为镜像名称

再把镜像上传服务器,在服务器上导入镜像,服务器上的docker安装可以通过bt管理程序安装。

docker load -i /media/dockerimage/img_web.tar

导入镜像后,可以从bt面板上看到

在bt面板或者命令行启动容器,运行镜像就可以,注意放行端口。

6、服务器反向代理配置

/web为最终客户端访问的路径,x.x.x.x为该app部署的ip地址,8501为端口。

7、剩余工作

应该在docker里通过nginx代理8501端口,控制8501端口只有web服务器才能访问。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《docker部署streamlit应用》
文章链接:https://www.sci.dog/?p=1451
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发