Ubuntu上Python代碼部署完整流程
首先更新系統包索引,安裝Python 3、pip(Python包管理工具)及常用編譯依賴(用于后續安裝某些Python包):
sudo apt update
sudo apt install python3 python3-pip build-essential libssl-dev libffi-dev -y
為避免不同項目間的依賴沖突,強烈建議使用虛擬環境。以venv
模塊為例:
# 創建虛擬環境(myenv為環境目錄名,可自定義)
python3 -m venv myenv
# 激活虛擬環境
source myenv/bin/activate
# 激活后,終端提示符會顯示環境名(如“(myenv)”)
進入項目目錄,通過requirements.txt
文件批量安裝依賴(若項目未提供該文件,需手動指定依賴):
cd /path/to/your_project # 替換為項目實際路徑
pip install -r requirements.txt # 安裝所有依賴
main.py
):python main.py
flask run
(需在代碼中設置FLASK_APP=main.py
)python manage.py runserver
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綁定地址和端口
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
通過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
若需要環境一致性或快速遷移,可使用Docker打包應用。
在項目根目錄下創建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"]
# 構建鏡像(myapp為鏡像名,可根據需求修改)
docker build -t myapp .
# 運行容器(-p將容器端口映射到主機端口)
docker run -d -p 80:80 myapp
# 查看運行中的容器
docker ps
以上步驟覆蓋了Ubuntu上Python代碼的主要部署方式,可根據項目規模(如小型腳本、中型Web應用、大型分布式系統)和需求(如是否需要快速迭代、是否強調環境一致性)選擇合適的方法。生產環境建議優先使用Gunicorn+Nginx+systemd的組合,兼顧性能、穩定性和可維護性。