Python + Streamlit项目部署方案超详细教程(非Docker版)

2025-11-28 19:50

本文主要是介绍Python + Streamlit项目部署方案超详细教程(非Docker版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St...

一、针对 Alibaba Cloud Linux/CentOS 系统的完整部署方案

1. 服务器基础配置(阿里云ECS)

# 更新系统
sudo yum update -y

# 安装基础工具
sudo yum install -y git wget vim python3 python3-pip python3-devel gcc make

# 安装Streamlit系统依赖
sudo yum install -y libXext libSM libXrender

# 安装Node.js(用于Streamlit监控)
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs

# 安装Firewalld防火墙(如果未安装)
sudo yum install -y firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

2. 获取项目代码

# 克隆您的Gitee仓库
git clone https://gitee.com/您的用户名/case.git
cd case

# 切换到doc分支
git checkout doc

3. 创建Python虚拟环境

# 安装虚拟环境工具
python3 -m pip install virtualenv

# 创建虚拟环境
python3 -m virtualenv venv

# 激活虚拟环境
source venv/bin/activate

# 验证环境(应显示Python 3.x)
python --version

4. 安装项目依赖

# 更新pip
pip install --upgrade pip

# 设置国内镜像源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 安装依赖
pip install -r requirements.txt

# 额外安装Streamlit(确保版本兼容)
pip install streamlit==1.25.0

5. 配置环境变量(如有)

创建环境变量文件:

nano .env

写入内容:

export DEEPSEEK_API_KEY="sk-5China编程10d447cc2da4ae39a9807d6"
# 添加其他需要设置的环境变量

加载环境变量:

# 临时生效
source .env

# 永久生效(添加到shell配置文件)
echo "source /opt/casegenerate/.env" >> ~/.bashrc
source ~/.bashrc

6. 测试应用运行

# 手动启动测试
streamlit run app.py --server.port=8501

# 测试访问(新开终端)
curl http://localhost:8501
# 按CTRL+C停止服务

# 若阿里云端口已开放,也可以直接从浏览器进入

7. 创建Systemd服务(后台运行)

创建服务文件:

sudo nano /etc/systemd/system/case.service

添加以下内容,根据项目实际路径调整:

[Unit]
Description=Case Streamlit App
After=network.target

[Service]
User=root
WorkingDirectory=/opt/case  # 修改为您的实际路径
Environment="PATH=/opt/case/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
EnvironmentFile=/opt/case/.env
ExecStart=/opt/case/venv/bin/streamlit run app.py --server.port=8501 --server.headless=true --server.enableCORS=false
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

启用服务:

# 重新加载服务配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start case

# 设置开机自启
sudo systemctl enable case

# 查看服务状态
sudo systemctl status case

8. 配置Nginx反向代理(可选)

# 安装Nginx
sudo yum install -y nginx

# 创建配置
sudo nano /etc/nginx/conf.d/case.conf

内容:

upstream streamlit_app {
    server 127.0.0.1:8501;
}

server {
    listen 80;
    server_name yourdomain.com; # 替换为您的域名

    Access_log /var/log/nginx/case.access.log;
    error_log /var/log/nginx/case.error.log;

    location / {
        proxy_pass http://streamlit_app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

应用配置:

# 测试配置
sudo nginx -t

# 重启Nginx
sudo systemctl restart nginx

# 设置开机自启
sudo systemctl enable nginx

9. 阿里云安全组配置

  1. 登录阿里云控制台 → ECS → 安全组
  2. 添加规则:
    • 方向:入方向
    • 协议类型:TCP
    • 端口范围:80
    • 授权对象:0.0.0.0/0
  3. 保存规则

10. 域名配置

  1. 在域名控制台添加A记录:
    • 记录类型:A
    • 主机记录:@ 或子域名
    • 记录值:服务器公网IP
  2. TTL:10分钟

11. 测试访问

浏览器访问:http://yourdomain.com

12.维护与管理

第一步:更新项目代码

1. 拉取最新代码

# 进入项目目录
cd /root/case

# 切换到开发分支(假设您的开发分支是 docpython)
git checkout doc

# 拉取最新代码
git fetch origin
git reset --hard origin/doc
git clean -fd

2、更新依赖,如果有需要

# 激活虚拟环境
source venv38/bin/activate

# 安装新依赖
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

第二步:更新环境变量

方法 1:直接修改服务文件(推荐)

# 编辑服务文件
sudo nano /etc/systemd/system/case.service

修改环境变量保存后执行

# 重新加载服务配置
sudo systemctl daemon-reload

# 重启服务使新变量生效
sudo systemctl restart case

方法 2:修改 .env 文件(如果代码中使用 load_dotenv)

# 编辑 .env 文件
nano /root/case/.env

修改后,重启服务

sudo systemctl restart case

第三步:重启服务

# 安全重启服务
sudo systemctl restart case

# 验证状态
sudo systemctl status case

tips:如果环境变量要更新DEEPSEEK_API_KEY,方法1和方法2任选其一都可以解决,如果同时使用两种方法,服务文件中的环境变量会覆盖.env文件中的变量。建议只使用一种方法。

Python + Streamlit项目部署方案超详细教程(非Docker版)

二、部署过程遇到的问题记录

1.有些依赖需要额外安装

激活虚拟环境并安装验证:

# 进入项目目录
cd /root/case

# 激活虚拟环境
source venv/bin/activate

# 1.安装 aiohttp(使用阿里云镜像加速)
pip install aiohttp==3.8.6 -i https://mirrors.aliyun.com/pypi/simple/

# 检查是否安装成功
pip show aiohttp

# 在 Python 中测试
python -c "import aiohttp; print(aiohttp.__versionphp__)"
# 应该输出:3.8.6

# 2.安装 python-dotenv(使用阿里云镜像加速)
pip install python-dotenv==1.0.0 -i https://mirrors.aliyun.com/pypi/simple/


# 检查是否安装成功
pip show python-dotenv

# 在 Python 中测试
python -c "from dotenv import load_dotenv; print('dotenv installed successfully')"

# 3.安装 PyMuPDF(包含 fitz 模块)
pip install PyMuPDF==1.23.21 -i https://mirrors.aliyun.com/pypi/simple/

# 检查是否安装成功
pip show PyMuPDF

# 在 Python 中测试
python -c "import fitz; print('fitz version:', fitz.__doc__.split('\n')[0])"
# 应该输出类似:fitz version: PyMuPDF 1.23.21: Python bindings for MuPDF's library

# 4.安装 openpyxl(使用阿里云镜像加速)
pip install openpyxl==3.1.2 -i https://mirrors.aliyun.com/pypi/simple/

# 检查是否安装成功
pip show openpyxl

# 在 Python 中测试
python -c "import openpyxl; print('openpyxl version:', openpyxl.__version__)"
# 应该输出:openpyxl version: 3.1.2

# 升级 streamlit
pip install streamlit==1.25.0 -i https://mirrors.aliyun.com/pypi/simple/

streamlit --version
# 应该输出:Streamlit, version 1.25.0

2.在 nano 编辑器中android怎么保存和退出

当您使用 sudo nano /etc/systemd/system/case.service 编辑文件后,以下是保存并退出的详细步骤:

  1. 编辑完成后​:

    • 使用方向键在文件中移动
    • 确保所有内容正确无误
  2. 保存文件​:

    • 按下 Ctrl + O(按住 Ctrl 键,然后按 O 键)
    • 屏幕底部会显示:File Name to Write: /etc/systemd/system/case.service
    • 按 Enter 键确认保存
  3. 退出编辑器​:

    • 按下 Ctrl + X(按住 Ctrl 键,然后按 X 键)
    • 如果文件已修改但未保存,会询问是否保存:

退出编辑器后,验证文件内容:

sudo cat /etc/systemd/system/case.service

应该显示类似内容:

[Unit]
Description=Case Streamlit App
After=network.target

[Service]
User=root
WorkingDirectory=/root/case
Environment="PATH=/root/case/venv38/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
Environment="DEEPSEEK_API_KEY=sk-510d4China编程47cc2da9807d6"
ExecStart=/root/case/venv38/bin/streamlit run app.py --server.port=8501 --server.address=0.0.0.0
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

保存文件后,执行以下命令使服务生效:

# 重新加载服务配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start case

# 设置开机自启
sudo systemctl enable case

# 检查状态
sudo systemctl status case

3.遇到nano: command not found错误

安装nano编辑器

# 安装 nano
sudo yum install -y nano

# 验证安装
nano --version

4. http://xxx25.2:8501访问不了,阿里云要怎么添加8501端口

步骤 1:登录阿里云控制台

  1. 访问 阿里云官网 并登录

  2. 进入 ​控制台

步骤 2:找到您的 ECS 实例

  1. 在控制台首页,点击 ​产品与服务​ > ​云计算基础服务​ > ​云服务器 ECS

  2. 在实例列表中找到您的服务器(如 iZ7xvyay73qoZ

步骤 3:配置安全组

  1. 在实例列表中,找到您的实例,点击右侧的 ​更多​ > ​网络和安全组​ > ​安全组配置

  2. 或者,在实例详情页,点击 ​安全组​ 标签页

步骤 4:添加安全组规则

  1. 在安全组规则页面,点击 ​配置规则

  2. 在 ​入方向​ 标签页,点击 ​手动添加

  3. 填写规则:

    • 授权策略​:允许

    • 协议类型​:自定义 TCP

    • 端口范围​:8501/8501

    • 授权对象​:0.0.0.0/0(表示允许所有IP访问)

  4. 点击 ​保存

步骤 5:验证安全组规则

在安全组规则列表中,您应该能看到一条类似这样的规则:

授权策略

协议类型

端口范围

授权对象

优先级

允许

自定义TCP

8501

0.0.0.0/0

1

如果仍然无法访问?

检查 1:服务器防火墙

阿里云 ECS 默认没有启用防火墙,但如果您手动启用了,需要检查:

# 查看防火墙状态
sudo systemctl status firewalld

# 如果防火墙开启,添加端口
sudo firewall-cmd --zone=public --add-port=8501/tcp --permanent
sudo firewall-cmd --reload

检查 2:端口监听状态

在服务器上执行:

netstat -tuln | grep 8501

应该显示:

tcp6       0      0 :::8501                 :::*                    LISTEN

检查 3:使用 telnet 测试端口

在您的本地电脑上(不是服务器)执行:

telnet 8xxx25.2 8501

如果端口开放,应该看到: 

Trying 8.1xxx5.2...
Connected to 8.xxx.2.
Escape character is '^]'.

5.在服务器上更新开发分支的新代码

 在服务器上更新开发分支的新代码,分为两种情况操作

情况1:已在开发分支但需要更新

# 1. 进入项目目录
cd /root/case

# 2. 检查当前所在分支
git branch  # 确认您在开发分支上(如 doc)

# 3. 从远程拉取最新变更
git fetch --all

# 4. 重置到远程分支最新状态(强制更新)
git reset --hard origin/doc  # 将 doc 替换为您的分支名

# 5. 清理未被跟踪的文件
git clean -fd

情况2:需要切换到其他开发分支

# 1. 进入项目目录
cd /root/case

# 2. 查看所有可用分支
git branch -a

# 3. 切换到新的开发分支
git checkout -b feature/new-feature origin/feature/new-feature

# 4. 或者强制切换到已存在的分支
git checkout -f doc

总结 

到此这篇关于Python + Streamlit项目部署方案(非docker版)的文章就介绍到这了,更多相关Python Streamlit项目部署内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Python + Streamlit项目部署方案超详细教程(非Docker版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156306

相关文章

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

Python中4大日志记录库比较的终极PK

《Python中4大日志记录库比较的终极PK》日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程,:本文主要介绍Python中4大日志记录库比较的相关资料,文中通过代码介绍的非常详细,... 目录一、logging库1、优点2、缺点二、LogAid库三、Loguru库四、Structlogphp

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

SQL Server中行转列方法详细讲解

《SQLServer中行转列方法详细讲解》SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集,:本文主要介绍SQLServer中行转列方法的相关资料,需要的朋友可以参考下... 目录前言一、为什么需要行转列二、行转列的基本概念三、使用PIVOT运算符进行行转列1.创建示例数据表并插入数

C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解

《C++,C#,Rust,Go,Java,Python,JavaScript的性能对比全面讲解》:本文主要介绍C++,C#,Rust,Go,Java,Python,JavaScript性能对比全面... 目录编程语言性能对比、核心优势与最佳使用场景性能对比表格C++C#RustGoJavapythonjav