溫馨提示×

Ubuntu上Python項目怎么部署

小樊
51
2025-09-25 07:58:14
欄目: 編程語言

Ubuntu上Python項目部署完整流程

1. 準備基礎環境

確保Ubuntu服務器已安裝Python 3、pip及虛擬環境工具(避免全局依賴沖突):

sudo apt update
sudo apt install python3 python3-pip python3-venv -y

驗證安裝:

python3 --version  # 確認Python版本(如3.8+)
pip3 --version     # 確認pip可用

2. 部署項目文件

將本地Python項目上傳至服務器(如通過scp或Git):

scp -r /local/project/path username@server_ip:/remote/deploy/path

進入項目目錄,檢查requirements.txt(項目依賴清單)是否存在。

3. 創建并激活虛擬環境

在項目根目錄下創建虛擬環境,隔離項目依賴:

python3 -m venv myenv  # 創建名為myenv的虛擬環境
source myenv/bin/activate  # 激活環境(終端提示符顯示(myenv))

激活后,后續操作均在虛擬環境中進行。

4. 安裝項目依賴

通過requirements.txt安裝所有依賴(確保本地與服務器依賴一致):

pip install --upgrade pip  # 升級pip避免兼容性問題
pip install -r requirements.txt

5. 運行項目(開發測試)

根據項目類型啟動應用(以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應用實例)。

6. 配置Nginx反向代理(生產必備)

Nginx作為前端服務器,處理靜態文件、負載均衡及SSL終止,將請求轉發至Gunicorn:

  • 安裝Nginx:
    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
    

7. 設置Systemd服務(開機自啟)

通過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  # 查看運行狀態
    

8. 可選優化:使用Docker部署(環境一致性)

若需更徹底的環境隔離,可使用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
    
  • 結合Nginx反向代理(同步驟6),將請求轉發至localhost:8000。

關鍵注意事項

  • 權限問題:避免使用root用戶運行應用,推薦用普通用戶(如ubuntu)+ www-data組。
  • 端口開放:若使用云服務器,需在安全組中開放80(HTTP)、443(HTTPS)端口。
  • 靜態文件:Django/Flask的靜態文件需單獨配置(如Nginx的location /static/)。
  • HTTPS:建議使用Let’s Encrypt免費證書(certbot)配置HTTPS,提升安全性。

以上流程覆蓋了Ubuntu上Python項目從環境準備到生產部署的關鍵步驟,可根據項目類型(Flask/Django/FastAPI等)調整細節。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女