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

作者:

文章目录
  • 到此这篇关于Python + Streamlit项目部署方案(非Docker版)的文章就介绍到这了,更多相关Python Streamlit项目部署内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python使用Streamlit库制作Web可视化页面 构建可视化 web的 Python 神器streamlit Python Streamlit制作交互式可视化网页应用实例 Python Streamlit实现文件的上传和下载功能 Python使用Streamlit快速构建一个数据应用程序 Python+streamlit实现轻松创建人事系统 Python开源库 Streamlit 应用案例
  • 目录
    • 一、针对 Alibaba Cloud Linux/CentOS 系统的完整部署方案
      • 1. 服务器基础配置(阿里云ECS)
      • 2. 获取项目代码
      • 3. 创建Python虚拟环境
      • 4. 安装项目依赖
      • 5. 配置环境变量(如有)
      • 6. 测试应用运行
      • 7. 创建Systemd服务(后台运行)
      • 8. 配置Nginx反向代理(可选)
      • 9. 阿里云安全组配置
      • 10. 域名配置
      • 11. 测试访问
      • 12.维护与管理
        • 第一步:更新项目代码
        • 第二步:更新环境变量
        • 第三步:重启服务
    • 二、部署过程遇到的问题记录
      • 1.有些依赖需要额外安装
        • 2.在 nano 编辑器中怎么保存和退出
          • 3.遇到nano: command not found错误
            • 4. http://xxx25.2:8501访问不了,阿里云要怎么添加8501端口
              • 5.在服务器上更新开发分支的新代码
                • 情况1:已在开发分支但需要更新
                • 情况2:需要切换到其他开发分支
            • 总结 

              # 更新系统
              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

              # 克隆您的Gitee仓库
              git clone https://gitee.com/您的用户名/case.git
              cd case
              
              # 切换到doc分支
              git checkout doc

              # 安装虚拟环境工具
              python3 -m pip install virtualenv
              
              # 创建虚拟环境
              python3 -m virtualenv venv
              
              # 激活虚拟环境
              source venv/bin/activate
              
              # 验证环境(应显示Python 3.x)
              python --version

              # 更新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

              创建环境变量文件:

              nano .env

              写入内容:

              export DEEPSEEK_API_KEY="sk-510d447cc2da4ae39a9807d6"
              # 添加其他需要设置的环境变量

              加载环境变量:

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

              # 手动启动测试
              streamlit run app.py --server.port=8501
              
              # 测试访问(新开终端)
              curl http://localhost:8501
              # 按CTRL+C停止服务
              
              # 若阿里云端口已开放,也可以直接从浏览器进入

              创建服务文件:

              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

              # 安装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

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

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

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

              1. 拉取最新代码

              # 进入项目目录
              cd /root/case
              
              # 切换到开发分支(假设您的开发分支是 doc)
              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文件中的变量。建议只使用一种方法。

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

              # 进入项目目录
              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.__version__)"
              # 应该输出: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

              当您使用 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-510d447cc2da9807d6"
              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

              安装nano编辑器

              # 安装 nano
              sudo yum install -y nano
              
              # 验证安装
              nano --version

              步骤 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 '^]'.

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

              # 1. 进入项目目录
              cd /root/case
              
              # 2. 检查当前所在分支
              git branch  # 确认您在开发分支上(如 doc)
              
              # 3. 从远程拉取最新变更
              git fetch --all
              
              # 4. 重置到远程分支最新状态(强制更新)
              git reset --hard origin/doc  # 将 doc 替换为您的分支名
              
              # 5. 清理未被跟踪的文件
              git clean -fd

              # 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项目部署内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

              您可能感兴趣的文章:

              • python使用Streamlit库制作Web可视化页面
              • 构建可视化 web的 Python 神器streamlit
              • Python Streamlit制作交互式可视化网页应用实例
              • Python Streamlit实现文件的上传和下载功能
              • Python使用Streamlit快速构建一个数据应用程序
              • Python+streamlit实现轻松创建人事系统
              • Python开源库 Streamlit 应用案例

              站内搜索