1. 準備工作
確保Ubuntu服務器已更新至最新版本,并安裝基礎工具(如curl
、git
、vim
)。若需特定Python版本(如3.8、3.11),可通過sudo apt install python3.8
或sudo 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. 運行應用(開發/生產環境)
python app.py run --host=0.0.0.0 --port=5000
python manage.py runserver 0.0.0.0:8000
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加密,提升應用性能與安全性。
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/
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. 驗證部署
http://your_domain_or_ip
,應看到應用頁面。curl http://localhost:8000
(服務器本地)或http://your_server_ip:8000
(外部)驗證。注意事項
ssl_certificate
和ssl_certificate_key
。journalctl -u myapp
或Nginx的access.log
/error.log
),及時排查問題。