隨著云計算和容器化技術的普及,Linux 服務器已成為部署 Web 應用程序的主流平臺之一。Python 作為一種簡單易用的編程語言,適用于開發各種應用程序。本文將詳細介紹如何在 Ubuntu 服務器上部署 Python 應用,包括環境準備、應用發布、配置反向代理(Nginx)、設置系統服務以及日志管理等步驟。
一、部署準備
在開始之前,請確保你具備以下條件:
- 一臺運行 Ubuntu(如 Ubuntu 20.04 或 22.04)的服務器,具有 SSH 訪問權限。
- Python 應用程序的代碼,確保在本地能夠正常運行。
二、安裝 Python 環境
1. 安裝 Python 3
Ubuntu 20.04 和更高版本默認安裝了 Python 3,但如果你的系統上沒有安裝,可以手動安裝它:
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
python3:安裝 Python 3 解釋器。python3-pip:安裝 Python 包管理工具。python3-venv:安裝虛擬環境支持。
2. 驗證 Python 安裝
安裝完成后,可以通過以下命令驗證 Python 和 pip 是否正確安裝:
python3 --version
pip3 --version
你應該看到類似下面的輸出:
Python 3.8.10
pip 21.1.2
三、安裝 MySQL(如需)
1. 安裝MySQL服務器
sudo apt install mysql-server -y
2. 啟動并設置MySQL開機自啟
sudo systemctl start mysql
sudo systemctl enable mysql
3. 驗證MySQL安裝
登錄MySQL以確認安裝成功。
sudo mysql -u root -p
MySQL默認密碼是root,直接登錄即可。
4. 修改初始密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
5. 創建庫和表
這里我們用SQL語句把項目需要的數據庫建好即可。
四、創建虛擬環境
為了防止全局安裝 Python 包和依賴,可以使用 Python 的虛擬環境來管理項目的依賴。
1. 創建虛擬環境
在應用程序的目錄中,運行以下命令創建虛擬環境:
python3 -m venv myenv
這將創建一個名為 myenv 的虛擬環境。
2. 激活虛擬環境
在創建完虛擬環境后,需要激活它:
source myenv/bin/activate
激活虛擬環境后,你會看到終端提示符前綴變為 (myenv),表示虛擬環境已激活。
五、發布 Python 應用
1. 上傳項目文件
將應用程序文件上傳到生產服務器,確保所有的源代碼文件和 requirements.txt 文件都已上傳。
2. 安裝項目依賴
通過 requirements.txt 文件安裝依賴。
pip install -r requirements.txt
3. 啟動項目
進入到應用程序目錄,并運行 Python 應用,確保它能夠正常啟動:
python3 app.py
如果應用運行正常,會顯示應用訪問路徑以及端口號。
六、配置 Nginx 作為反向代理(可選)
為了將外部請求轉發到 Python 應用,通常使用 Nginx 作為反向代理。
1. 安裝 Nginx
如果 Nginx 尚未安裝,使用以下命令安裝:
sudo apt update
sudo apt install nginx -y
2. 配置 Nginx
打開 Nginx 配置文件并編輯反向代理設置:
sudo nano /etc/nginx/sites-available/default
在 server 塊中,配置反向代理,將請求轉發到 Python 應用所在的端口(假設 Python 應用運行在 8000 端口):
server {
listen 80;
server_name your_domain_or_ip;
location / {
proxy_pass localhost:8000; # 將請求轉發到 Python 應用
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;
}
}
保存并退出編輯器。
3. 測試 Nginx 配置
執行以下命令測試 Nginx 配置是否正確:
sudo nginx -t
如果配置正確,輸出應該顯示 syntax is okay 和 test is successful。
4. 重新啟動 Nginx
重新啟動 Nginx 以應用配置:
sudo systemctl reload nginx
七、設置系統服務(可選)
為了確保 Python 應用在系統重啟后自動啟動,你可以創建一個 systemd 服務文件。
1. 創建 systemd 服務文件
創建一個新的服務文件:
sudo nano /etc/systemd/system/python-app.service
添加以下內容:
[Unit]
Description=Python Application
After=network.target
[Service]
User=your_user
Group=your_group
WorkingDirectory=/path/to/your/app
ExecStart=/path/to/your/app/myenv/bin/python3 /path/to/your/app/app.py
Restart=always
[Install]
WantedBy=multi-user.target
User和Group:設置為運行應用程序的用戶和組。WorkingDirectory:指向應用程序的目錄。ExecStart:指向 Python 虛擬環境中的 Python 解釋器和應用程序入口。
2. 重新啟動 systemd 配置并啟動服務
sudo systemctl daemon-reload
sudo systemctl start python-app.service
sudo systemctl enable python-app.service
3. 檢查服務狀態
sudo systemctl status python-app.service
確認應用程序是否在后臺運行并監聽正確的端口。
八、配置防火墻
如果你的服務器啟用了防火墻(例如 UFW),確保允許 HTTP(80 端口)和你的應用程序使用的端口(例如 8000)通過防火墻:
sudo ufw allow 80
sudo ufw allow 8000
九、測試部署
在部署完成后,訪問你配置的服務器域名或 IP,檢查 Python 應用是否通過 Nginx 正常提供服務。
十、總結
通過本教程,我們成功地在 Ubuntu 上部署了一個 Python 應用,包括環境準備、依賴管理、配置反向代理、設置系統服務以及日志管理等步驟。這種部署方式非常適合生產環境,能夠確保應用程序在系統重啟后自動啟動,并且能夠通過 Nginx 處理高并發的外部請求。