Python?+?Streamlit項(xiàng)目部署方案超詳細(xì)教程(非Docker版)
一、針對(duì) Alibaba Cloud Linux/CentOS 系統(tǒng)的完整部署方案
1. 服務(wù)器基礎(chǔ)配置(阿里云ECS)
# 更新系統(tǒng) sudo yum update -y # 安裝基礎(chǔ)工具 sudo yum install -y git wget vim python3 python3-pip python3-devel gcc make # 安裝Streamlit系統(tǒng)依賴 sudo yum install -y libXext libSM libXrender # 安裝Node.js(用于Streamlit監(jiān)控) 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. 獲取項(xiàng)目代碼
# 克隆您的Gitee倉(cāng)庫(kù) git clone https://gitee.com/您的用戶名/case.git cd case # 切換到doc分支 git checkout doc
3. 創(chuàng)建Python虛擬環(huán)境
# 安裝虛擬環(huán)境工具 python3 -m pip install virtualenv # 創(chuàng)建虛擬環(huán)境 python3 -m virtualenv venv # 激活虛擬環(huán)境 source venv/bin/activate # 驗(yàn)證環(huán)境(應(yīng)顯示Python 3.x) python --version
4. 安裝項(xiàng)目依賴
# 更新pip pip install --upgrade pip # 設(shè)置國(guó)內(nèi)鏡像源 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. 配置環(huán)境變量(如有)
創(chuàng)建環(huán)境變量文件:
nano .env
寫(xiě)入內(nèi)容:
export DEEPSEEK_API_KEY="sk-510d447cc2da4ae39a9807d6" # 添加其他需要設(shè)置的環(huán)境變量
加載環(huán)境變量:
# 臨時(shí)生效 source .env # 永久生效(添加到shell配置文件) echo "source /opt/casegenerate/.env" >> ~/.bashrc source ~/.bashrc
6. 測(cè)試應(yīng)用運(yùn)行
# 手動(dòng)啟動(dòng)測(cè)試 streamlit run app.py --server.port=8501 # 測(cè)試訪問(wèn)(新開(kāi)終端) curl http://localhost:8501 # 按CTRL+C停止服務(wù) # 若阿里云端口已開(kāi)放,也可以直接從瀏覽器進(jìn)入
7. 創(chuàng)建Systemd服務(wù)(后臺(tái)運(yùn)行)
創(chuàng)建服務(wù)文件:
sudo nano /etc/systemd/system/case.service
添加以下內(nèi)容,根據(jù)項(xiàng)目實(shí)際路徑調(diào)整:
[Unit] Description=Case Streamlit App After=network.target [Service] User=root WorkingDirectory=/opt/case # 修改為您的實(shí)際路徑 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
啟用服務(wù):
# 重新加載服務(wù)配置 sudo systemctl daemon-reload # 啟動(dòng)服務(wù) sudo systemctl start case # 設(shè)置開(kāi)機(jī)自啟 sudo systemctl enable case # 查看服務(wù)狀態(tài) sudo systemctl status case
8. 配置Nginx反向代理(可選)
# 安裝Nginx sudo yum install -y nginx # 創(chuàng)建配置 sudo nano /etc/nginx/conf.d/case.conf
內(nèi)容:
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;
}
}應(yīng)用配置:
# 測(cè)試配置 sudo nginx -t # 重啟Nginx sudo systemctl restart nginx # 設(shè)置開(kāi)機(jī)自啟 sudo systemctl enable nginx
9. 阿里云安全組配置
- 登錄阿里云控制臺(tái) → ECS → 安全組
- 添加規(guī)則:
- 方向:入方向
- 協(xié)議類(lèi)型:TCP
- 端口范圍:80
- 授權(quán)對(duì)象:0.0.0.0/0
- 保存規(guī)則
10. 域名配置
- 在域名控制臺(tái)添加A記錄:
- 記錄類(lèi)型:A
- 主機(jī)記錄:@ 或子域名
- 記錄值:服務(wù)器公網(wǎng)IP
- TTL:10分鐘
11. 測(cè)試訪問(wèn)
瀏覽器訪問(wèn):http://yourdomain.com
12.維護(hù)與管理
第一步:更新項(xiàng)目代碼
1. 拉取最新代碼
# 進(jìn)入項(xiàng)目目錄 cd /root/case # 切換到開(kāi)發(fā)分支(假設(shè)您的開(kāi)發(fā)分支是 doc) git checkout doc # 拉取最新代碼 git fetch origin git reset --hard origin/doc git clean -fd
2、更新依賴,如果有需要
# 激活虛擬環(huán)境 source venv38/bin/activate # 安裝新依賴 pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
第二步:更新環(huán)境變量
方法 1:直接修改服務(wù)文件(推薦)
# 編輯服務(wù)文件 sudo nano /etc/systemd/system/case.service
修改環(huán)境變量保存后執(zhí)行
# 重新加載服務(wù)配置 sudo systemctl daemon-reload # 重啟服務(wù)使新變量生效 sudo systemctl restart case
方法 2:修改 .env 文件(如果代碼中使用 load_dotenv)
# 編輯 .env 文件 nano /root/case/.env
修改后,重啟服務(wù)
sudo systemctl restart case
第三步:重啟服務(wù)
# 安全重啟服務(wù) sudo systemctl restart case # 驗(yàn)證狀態(tài) sudo systemctl status case
tips:如果環(huán)境變量要更新DEEPSEEK_API_KEY,方法1和方法2任選其一都可以解決,如果同時(shí)使用兩種方法,服務(wù)文件中的環(huán)境變量會(huì)覆蓋.env文件中的變量。建議只使用一種方法。

二、部署過(guò)程遇到的問(wèn)題記錄
1.有些依賴需要額外安裝
激活虛擬環(huán)境并安裝驗(yàn)證:
# 進(jìn)入項(xiàng)目目錄
cd /root/case
# 激活虛擬環(huán)境
source venv/bin/activate
# 1.安裝 aiohttp(使用阿里云鏡像加速)
pip install aiohttp==3.8.6 -i https://mirrors.aliyun.com/pypi/simple/
# 檢查是否安裝成功
pip show aiohttp
# 在 Python 中測(cè)試
python -c "import aiohttp; print(aiohttp.__version__)"
# 應(yīng)該輸出: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 中測(cè)試
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 中測(cè)試
python -c "import fitz; print('fitz version:', fitz.__doc__.split('\n')[0])"
# 應(yīng)該輸出類(lèi)似: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 中測(cè)試
python -c "import openpyxl; print('openpyxl version:', openpyxl.__version__)"
# 應(yīng)該輸出:openpyxl version: 3.1.2
# 升級(jí) streamlit
pip install streamlit==1.25.0 -i https://mirrors.aliyun.com/pypi/simple/
streamlit --version
# 應(yīng)該輸出:Streamlit, version 1.25.02.在 nano 編輯器中怎么保存和退出
當(dāng)您使用 sudo nano /etc/systemd/system/case.service 編輯文件后,以下是保存并退出的詳細(xì)步驟:
?編輯完成后?:
- 使用方向鍵在文件中移動(dòng)
- 確保所有內(nèi)容正確無(wú)誤
?保存文件?:
- 按下
Ctrl + O(按住 Ctrl 鍵,然后按 O 鍵) - 屏幕底部會(huì)顯示:
File Name to Write: /etc/systemd/system/case.service - ?按 Enter 鍵確認(rèn)保存?
- 按下
?退出編輯器?:
- 按下
Ctrl + X(按住 Ctrl 鍵,然后按 X 鍵) - 如果文件已修改但未保存,會(huì)詢問(wèn)是否保存:
- 按下
退出編輯器后,驗(yàn)證文件內(nèi)容:
sudo cat /etc/systemd/system/case.service
應(yīng)該顯示類(lèi)似內(nèi)容:
[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
保存文件后,執(zhí)行以下命令使服務(wù)生效:
# 重新加載服務(wù)配置 sudo systemctl daemon-reload # 啟動(dòng)服務(wù) sudo systemctl start case # 設(shè)置開(kāi)機(jī)自啟 sudo systemctl enable case # 檢查狀態(tài) sudo systemctl status case
3.遇到nano: command not found錯(cuò)誤
安裝nano編輯器
# 安裝 nano sudo yum install -y nano # 驗(yàn)證安裝 nano --version
4. http://xxx25.2:8501訪問(wèn)不了,阿里云要怎么添加8501端口
步驟 1:登錄阿里云控制臺(tái)
訪問(wèn) 阿里云官網(wǎng) 并登錄
進(jìn)入 ?控制臺(tái)?
步驟 2:找到您的 ECS 實(shí)例
在控制臺(tái)首頁(yè),點(diǎn)擊 ?產(chǎn)品與服務(wù)? > ?云計(jì)算基礎(chǔ)服務(wù)? > ?云服務(wù)器 ECS?
在實(shí)例列表中找到您的服務(wù)器(如
iZ7xvyay73qoZ)
步驟 3:配置安全組
在實(shí)例列表中,找到您的實(shí)例,點(diǎn)擊右側(cè)的 ?更多? > ?網(wǎng)絡(luò)和安全組? > ?安全組配置?
或者,在實(shí)例詳情頁(yè),點(diǎn)擊 ?安全組? 標(biāo)簽頁(yè)
步驟 4:添加安全組規(guī)則
在安全組規(guī)則頁(yè)面,點(diǎn)擊 ?配置規(guī)則?
在 ?入方向? 標(biāo)簽頁(yè),點(diǎn)擊 ?手動(dòng)添加?
填寫(xiě)規(guī)則:
?授權(quán)策略?:允許
?協(xié)議類(lèi)型?:自定義 TCP
?端口范圍?:8501/8501
?授權(quán)對(duì)象?:0.0.0.0/0(表示允許所有IP訪問(wèn))
點(diǎn)擊 ?保存?
步驟 5:驗(yàn)證安全組規(guī)則
在安全組規(guī)則列表中,您應(yīng)該能看到一條類(lèi)似這樣的規(guī)則:
授權(quán)策略 | 協(xié)議類(lèi)型 | 端口范圍 | 授權(quán)對(duì)象 | 優(yōu)先級(jí) |
|---|---|---|---|---|
允許 | 自定義TCP | 8501 | 0.0.0.0/0 | 1 |
如果仍然無(wú)法訪問(wèn)?
檢查 1:服務(wù)器防火墻
阿里云 ECS 默認(rèn)沒(méi)有啟用防火墻,但如果您手動(dòng)啟用了,需要檢查:
# 查看防火墻狀態(tài) sudo systemctl status firewalld # 如果防火墻開(kāi)啟,添加端口 sudo firewall-cmd --zone=public --add-port=8501/tcp --permanent sudo firewall-cmd --reload
檢查 2:端口監(jiān)聽(tīng)狀態(tài)
在服務(wù)器上執(zhí)行:
netstat -tuln | grep 8501
應(yīng)該顯示:
tcp6 0 0 :::8501 :::* LISTEN
檢查 3:使用 telnet 測(cè)試端口
在您的本地電腦上(不是服務(wù)器)執(zhí)行:
telnet 8xxx25.2 8501
如果端口開(kāi)放,應(yīng)該看到:
Trying 8.1xxx5.2... Connected to 8.xxx.2. Escape character is '^]'.
5.在服務(wù)器上更新開(kāi)發(fā)分支的新代碼
在服務(wù)器上更新開(kāi)發(fā)分支的新代碼,分為兩種情況操作
情況1:已在開(kāi)發(fā)分支但需要更新
# 1. 進(jìn)入項(xiàng)目目錄 cd /root/case # 2. 檢查當(dāng)前所在分支 git branch # 確認(rèn)您在開(kāi)發(fā)分支上(如 doc) # 3. 從遠(yuǎn)程拉取最新變更 git fetch --all # 4. 重置到遠(yuǎn)程分支最新?tīng)顟B(tài)(強(qiáng)制更新) git reset --hard origin/doc # 將 doc 替換為您的分支名 # 5. 清理未被跟蹤的文件 git clean -fd
情況2:需要切換到其他開(kāi)發(fā)分支
# 1. 進(jìn)入項(xiàng)目目錄 cd /root/case # 2. 查看所有可用分支 git branch -a # 3. 切換到新的開(kāi)發(fā)分支 git checkout -b feature/new-feature origin/feature/new-feature # 4. 或者強(qiáng)制切換到已存在的分支 git checkout -f doc
總結(jié)
到此這篇關(guān)于Python + Streamlit項(xiàng)目部署方案(非Docker版)的文章就介紹到這了,更多相關(guān)Python Streamlit項(xiàng)目部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python使用Streamlit庫(kù)制作Web可視化頁(yè)面
- 構(gòu)建可視化?web的?Python?神器streamlit
- Python?Streamlit制作交互式可視化網(wǎng)頁(yè)應(yīng)用實(shí)例
- Python?Streamlit實(shí)現(xiàn)文件的上傳和下載功能
- Python使用Streamlit快速構(gòu)建一個(gè)數(shù)據(jù)應(yīng)用程序
- Python+streamlit實(shí)現(xiàn)輕松創(chuàng)建人事系統(tǒng)
- Python開(kāi)源庫(kù)?Streamlit?應(yīng)用案例
相關(guān)文章
Python獲取Redis所有Key以及內(nèi)容的方法
今天小編就為大家分享一篇Python獲取Redis所有Key以及內(nèi)容的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
Java實(shí)現(xiàn)的執(zhí)行python腳本工具類(lèi)示例【使用jython.jar】
這篇文章主要介紹了Java實(shí)現(xiàn)的執(zhí)行python腳本工具類(lèi),結(jié)合實(shí)例形式分析了java使用jython.jar執(zhí)行Python腳本的具體操作技巧,需要的朋友可以參考下2018-03-03
Python3中數(shù)據(jù)校驗(yàn)機(jī)制詳解
在日常編碼環(huán)節(jié),很大比例的錯(cuò)誤處理工作和參數(shù)的輸入有關(guān),所以這篇文章主要來(lái)和大家介紹一下Python3中的數(shù)據(jù)校驗(yàn)機(jī)制,感興趣的可以了解下2024-04-04
Python+PIL實(shí)現(xiàn)支付寶AR紅包
這篇文章主要為大家詳細(xì)介紹了Python+PIL實(shí)現(xiàn)支付寶AR紅包,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
Python PyAutoGUI超詳細(xì)實(shí)戰(zhàn)教程 附完整教學(xué)代碼
本文將從環(huán)境搭建、基礎(chǔ)配置、鼠標(biāo)自動(dòng)化、鍵盤(pán)自動(dòng)化、屏幕操作、高級(jí)功能、實(shí)戰(zhàn)案例七個(gè)維度展開(kāi),搭配可直接運(yùn)行的教學(xué)代碼,覆蓋新手入門(mén)到實(shí)戰(zhàn)應(yīng)用的全部核心知識(shí)點(diǎn),對(duì)Python PyAutoGUI 相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2026-02-02

