Ubuntu上Python項目部署完整流程
確保Ubuntu服務器已安裝Python 3、pip及虛擬環境工具(避免全局依賴沖突):
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
驗證安裝:
python3 --version # 確認Python版本(如3.8+)
pip3 --version # 確認pip可用
將本地Python項目上傳至服務器(如通過scp或Git):
scp -r /local/project/path username@server_ip:/remote/deploy/path
進入項目目錄,檢查requirements.txt(項目依賴清單)是否存在。
在項目根目錄下創建虛擬環境,隔離項目依賴:
python3 -m venv myenv # 創建名為myenv的虛擬環境
source myenv/bin/activate # 激活環境(終端提示符顯示(myenv))
激活后,后續操作均在虛擬環境中進行。
通過requirements.txt安裝所有依賴(確保本地與服務器依賴一致):
pip install --upgrade pip # 升級pip避免兼容性問題
pip install -r requirements.txt
根據項目類型啟動應用(以Flask為例):
python app.py # 若app.py是入口文件且包含Flask.run()
或使用Gunicorn(生產級WSGI服務器,提升性能):
pip install gunicorn # 安裝Gunicorn
gunicorn -w 4 -b 127.0.0.1:8000 app:app # 4個工作進程,綁定本地8000端口
注:
app:app表示app.py文件中的app對象(Flask/Django應用實例)。
Nginx作為前端服務器,處理靜態文件、負載均衡及SSL終止,將請求轉發至Gunicorn:
sudo apt install nginx -y
/etc/nginx/sites-available/myapp):sudo nano /etc/nginx/sites-available/myapp
添加以下內容(替換your_domain_or_ip和端口):server {
listen 80;
server_name your_domain_or_ip; # 替換為域名或IP
location / {
proxy_pass http://127.0.0.1:8000; # 轉發至Gunicorn
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;
}
# 可選:處理靜態文件(如CSS/JS)
location /static/ {
alias /remote/deploy/path/static/; # 替換為項目靜態文件路徑
}
}
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t # 測試配置語法
sudo systemctl reload nginx # 重新加載Nginx
通過systemd管理應用進程,確保服務器重啟后自動啟動:
/etc/systemd/system/myapp.service):sudo nano /etc/systemd/system/myapp.service
添加以下內容(替換路徑、用戶及端口):[Unit]
Description=Gunicorn Server for My Python App
After=network.target
[Service]
User=your_username # 替換為運行應用的用戶(如ubuntu)
Group=www-data # 通常用www-data(Nginx用戶)
WorkingDirectory=/remote/deploy/path # 項目根目錄
Environment="PATH=/remote/deploy/path/myenv/bin" # 虛擬環境路徑
ExecStart=/remote/deploy/path/myenv/bin/gunicorn --workers 4 --bind unix:/run/myapp.sock app:app
Restart=always # 崩潰后自動重啟
RestartSec=10 # 重啟間隔10秒
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp # 開機自啟
sudo systemctl status myapp # 查看運行狀態
若需更徹底的環境隔離,可使用Docker打包應用:
Dockerfile(項目根目錄):FROM python:3.9-slim # 使用輕量級Python鏡像
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["gunicorn", "--workers", "4", "--bind", "0.0.0.0:8000", "app:app"]
docker build -t my-python-app .
docker run -d -p 8000:8000 --name myapp my-python-app
localhost:8000。root用戶運行應用,推薦用普通用戶(如ubuntu)+ www-data組。location /static/)。certbot)配置HTTPS,提升安全性。以上流程覆蓋了Ubuntu上Python項目從環境準備到生產部署的關鍵步驟,可根據項目類型(Flask/Django/FastAPI等)調整細節。