溫馨提示×

Ubuntu Python如何部署應用

小樊
44
2025-10-04 00:17:43
欄目: 編程語言

1. 準備工作
確保Ubuntu服務器已更新至最新版本,并安裝基礎工具(如curl、git、vim)。若需特定Python版本(如3.8、3.11),可通過sudo apt install python3.8sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt install python3.11安裝。

2. 創建并激活虛擬環境
虛擬環境可隔離項目依賴,避免全局污染。在項目目錄下執行:

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

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

3. 安裝項目依賴
將本地項目的requirements.txt(包含Python包列表)上傳至服務器,然后在虛擬環境中安裝:

pip install -r requirements.txt  # 安裝所有依賴(如Flask、Django、Gunicorn)

若未生成requirements.txt,可通過pip freeze > requirements.txt在本地生成。

4. 運行應用(開發/生產環境)

  • 開發環境:直接使用框架內置服務器(僅用于調試,不推薦生產):
    • Flask:python app.py run --host=0.0.0.0 --port=5000
    • Django:python manage.py runserver 0.0.0.0:8000
  • 生產環境:使用Gunicorn(WSGI服務器)提升性能:
    pip install gunicorn  # 安裝Gunicorn
    gunicorn --workers 4 --bind 0.0.0.0:8000 app:app  # 示例:4個worker,綁定8000端口(app.py中應用對象為app)
    
    其中--workers根據CPU核心數調整(通常為2*CPU核心數+1),app:app表示app.py文件中的應用對象。

5. 配置Nginx反向代理(可選但推薦)
Nginx可作為反向代理,處理靜態文件、負載均衡及SSL加密,提升應用性能與安全性。

  • 安裝Nginx:sudo apt install nginx -y
  • 創建配置文件: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;
        }
        # 可選:處理靜態文件(需在應用中設置STATIC_ROOT)
        location /static/ {
            alias /path/to/your/app/static/;
        }
    }
    
  • 啟用配置:sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
  • 測試并重啟Nginx:sudo nginx -t && sudo systemctl restart nginx。

6. 設置Systemd服務(可選但推薦)
Systemd可確保應用在服務器重啟后自動啟動,并監控進程狀態。

  • 創建服務文件:sudo nano /etc/systemd/system/myapp.service,添加以下內容(替換路徑、用戶及端口):
    [Unit]
    Description=My Python Application
    After=network.target
    
    [Service]
    User=your_username  # 替換為服務器用戶名(如ubuntu)
    Group=www-data    # 通常用www-data(Nginx用戶)
    WorkingDirectory=/path/to/your/app  # 替換為項目路徑
    Environment="PATH=/path/to/your/app/myenv/bin"  # 虛擬環境路徑
    ExecStart=/path/to/your/app/myenv/bin/gunicorn --workers 4 --bind unix:/run/myapp.sock app:app  # 使用Unix socket(更安全)
    Restart=always    # 崩潰后自動重啟
    
    [Install]
    WantedBy=multi-user.target
    
  • 啟動并啟用服務:sudo systemctl daemon-reload && sudo systemctl start myapp && sudo systemctl enable myapp
  • 查看狀態:sudo systemctl status myapp(若顯示active (running)則表示成功)。

7. (可選)使用Docker部署
Docker可將應用及其依賴打包為容器,實現環境一致性。

  • 創建Dockerfile(在項目根目錄):
    FROM python:3.9-slim  # 使用輕量級Python鏡像
    WORKDIR /app
    COPY . .  # 復制項目文件
    RUN pip install --no-cache-dir -r requirements.txt  # 安裝依賴
    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]  # 啟動Gunicorn
    
  • 構建鏡像:docker build -t my-python-app .
  • 運行容器:docker run -d -p 8000:8000 --name myapp my-python-app-d表示后臺運行,-p映射端口)。

8. 驗證部署

  • 若使用Nginx:在瀏覽器訪問http://your_domain_or_ip,應看到應用頁面。
  • 若使用Docker:通過curl http://localhost:8000(服務器本地)或http://your_server_ip:8000(外部)驗證。

注意事項

  • 生產環境中,建議開啟HTTPS(通過Let’s Encrypt免費證書),配置Nginx的ssl_certificatessl_certificate_key。
  • 定期備份項目文件與數據庫,避免數據丟失。
  • 監控應用日志(journalctl -u myapp或Nginx的access.log/error.log),及時排查問題。

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