一、针对 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-510d447cc2da4ae39a9807d6" # 添加其他需要设置的环境变量
加载环境变量:
# 临时生效 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. 阿里云安全组配置
- 登录阿里云控制台 → ecs → 安全组
- 添加规则:
- 方向:入方向
- 协议类型:tcp
- 端口范围:80
- 授权对象:0.0.0.0/0
- 保存规则
10. 域名配置
- 在域名控制台添加a记录:
- 记录类型:a
- 主机记录:@ 或子域名
- 记录值:服务器公网ip
- ttl:10分钟
11. 测试访问
浏览器访问:http://yourdomain.com
12.维护与管理
第一步:更新项目代码
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文件中的变量。建议只使用一种方法。

二、部署过程遇到的问题记录
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.__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.02.在 nano 编辑器中怎么保存和退出
当您使用 sudo nano /etc/systemd/system/case.service 编辑文件后,以下是保存并退出的详细步骤:
编辑完成后:
- 使用方向键在文件中移动
- 确保所有内容正确无误
保存文件:
- 按下
ctrl + o(按住 ctrl 键,然后按 o 键) - 屏幕底部会显示:
file name to write: /etc/systemd/system/case.service - 按 enter 键确认保存
- 按下
退出编辑器:
- 按下
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
3.遇到nano: command not found错误
安装nano编辑器
# 安装 nano sudo yum install -y nano # 验证安装 nano --version
4. http://xxx25.2:8501访问不了,阿里云要怎么添加8501端口
步骤 1:登录阿里云控制台
访问 阿里云官网 并登录
进入 控制台
步骤 2:找到您的 ecs 实例
在控制台首页,点击 产品与服务 > 云计算基础服务 > 云服务器 ecs
在实例列表中找到您的服务器(如
iz7xvyay73qoz)
步骤 3:配置安全组
在实例列表中,找到您的实例,点击右侧的 更多 > 网络和安全组 > 安全组配置
或者,在实例详情页,点击 安全组 标签页
步骤 4:添加安全组规则
在安全组规则页面,点击 配置规则
在 入方向 标签页,点击 手动添加
填写规则:
授权策略:允许
协议类型:自定义 tcp
端口范围:8501/8501
授权对象:0.0.0.0/0(表示允许所有ip访问)
点击 保存
步骤 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项目部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论