溫馨提示×

Ubuntu上Python代碼如何部署

小樊
34
2025-10-12 04:03:17
欄目: 編程語言

Ubuntu上Python代碼部署完整流程

1. 準備基礎環境

首先更新系統包索引,安裝Python 3、pip(Python包管理工具)及常用編譯依賴(用于后續安裝某些Python包):

sudo apt update
sudo apt install python3 python3-pip build-essential libssl-dev libffi-dev -y

2. 隔離項目依賴(虛擬環境)

為避免不同項目間的依賴沖突,強烈建議使用虛擬環境。以venv模塊為例:

# 創建虛擬環境(myenv為環境目錄名,可自定義)
python3 -m venv myenv
# 激活虛擬環境
source myenv/bin/activate
# 激活后,終端提示符會顯示環境名(如“(myenv)”)

3. 安裝項目依賴

進入項目目錄,通過requirements.txt文件批量安裝依賴(若項目未提供該文件,需手動指定依賴):

cd /path/to/your_project  # 替換為項目實際路徑
pip install -r requirements.txt  # 安裝所有依賴

4. 運行Python代碼

  • 普通腳本:直接執行Python文件(如main.py):
    python main.py
    
  • Web應用:若使用Flask/Django等框架,開發階段可使用內置服務器(僅用于測試):
    • Flask:flask run(需在代碼中設置FLASK_APP=main.py
    • Django:python manage.py runserver

5. 生產環境優化部署

5.1 使用Gunicorn作為WSGI服務器

Gunicorn是Python常用的WSGI HTTP服務器,能替代內置服務器處理生產環境的并發請求。

# 安裝Gunicorn(在虛擬環境中)
pip install gunicorn
# 啟動Gunicorn(以Flask應用為例,假設應用對象為app,文件名為app.py)
gunicorn -w 4 -b 127.0.0.1:8000 app:app
# 參數說明:-w 4表示4個工作進程(根據CPU核心數調整);-b綁定地址和端口

5.2 配置Nginx反向代理

Nginx作為反向代理,負責處理靜態文件、負載均衡及SSL終止,提升應用性能和安全性。

# 安裝Nginx
sudo apt install nginx -y
# 創建Nginx配置文件(以myapp為例)
sudo nano /etc/nginx/sites-available/myapp
# 添加以下內容(替換your_domain_or_ip為實際域名或IP)
server {
    listen 80;
    server_name your_domain_or_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;
    }
    # 可選:配置靜態文件目錄(需替換為實際路徑)
    location /static/ {
        alias /path/to/your_project/static/;
    }
}
# 啟用配置(創建軟鏈接到sites-enabled目錄)
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# 測試Nginx配置語法
sudo nginx -t
# 重啟Nginx使配置生效
sudo systemctl restart nginx

5.3 設置開機自啟(systemd服務)

通過systemd服務讓應用在系統啟動時自動運行,并實現進程守護(崩潰后自動重啟)。

# 創建systemd服務文件
sudo nano /etc/systemd/system/myapp.service
# 添加以下內容(替換your_username、your_groupname、/path/to/your_project為實際值)
[Unit]
Description=Gunicorn Server for My Python App
After=network.target

[Service]
User=your_username  # 替換為運行應用的用戶(如ubuntu)
Group=www-data      # 通常使用www-data組(Nginx默認用戶)
WorkingDirectory=/path/to/your_project
Environment="PATH=/path/to/your_project/venv/bin"  # 虛擬環境路徑
ExecStart=/path/to/your_project/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always      # 崩潰后自動重啟
RestartSec=10       # 重啟間隔10秒

[Install]
WantedBy=multi-user.target
# 重載systemd配置
sudo systemctl daemon-reload
# 啟動服務
sudo systemctl start myapp
# 設置開機自啟
sudo systemctl enable myapp
# 檢查服務狀態
sudo systemctl status myapp

6. Docker部署(可選)

若需要環境一致性或快速遷移,可使用Docker打包應用。

6.1 創建Dockerfile

在項目根目錄下創建Dockerfile(無后綴名):

# 使用官方Python輕量級鏡像
FROM python:3.9-slim
# 設置工作目錄
WORKDIR /app
# 復制依賴文件并安裝
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 復制項目文件
COPY . .
# 暴露端口(應用監聽的端口,如Gunicorn的8000端口)
EXPOSE 80
# 使用Gunicorn啟動應用(以Flask為例)
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:80", "app:app"]

6.2 構建并運行Docker容器

# 構建鏡像(myapp為鏡像名,可根據需求修改)
docker build -t myapp .
# 運行容器(-p將容器端口映射到主機端口)
docker run -d -p 80:80 myapp
# 查看運行中的容器
docker ps

以上步驟覆蓋了Ubuntu上Python代碼的主要部署方式,可根據項目規模(如小型腳本、中型Web應用、大型分布式系統)和需求(如是否需要快速迭代、是否強調環境一致性)選擇合適的方法。生產環境建議優先使用Gunicorn+Nginx+systemd的組合,兼顧性能、穩定性和可維護性。

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