在Ubuntu上部署Flask應(yīng)用的流程步驟
一、部署準(zhǔn)備
在開始之前,請確保你具備以下條件:
- 一臺運(yùn)行 Ubuntu(如 Ubuntu 20.04 或 22.04)的服務(wù)器,具有 SSH 訪問權(quán)限。
- Python 應(yīng)用程序的代碼,確保在本地能夠正常運(yùn)行。
二、安裝 Python 環(huán)境
1. 安裝 Python 3
Ubuntu 20.04 和更高版本默認(rèn)安裝了 Python 3,但如果你的系統(tǒng)上沒有安裝,可以手動安裝它:
sudo apt update sudo apt install python3 python3-pip python3-venv -y
python3
:安裝 Python 3 解釋器。python3-pip
:安裝 Python 包管理工具。python3-venv
:安裝虛擬環(huán)境支持。
2. 驗證 Python 安裝
安裝完成后,可以通過以下命令驗證 Python 和 pip 是否正確安裝:
python3 --version pip3 --version
你應(yīng)該看到類似下面的輸出:
Python 3.8.10 pip 21.1.2
三、安裝 MySQL(如需)
1. 安裝MySQL服務(wù)器
sudo apt install mysql-server -y
2. 啟動并設(shè)置MySQL開機(jī)自啟
sudo systemctl start mysql sudo systemctl enable mysql
3. 驗證MySQL安裝
登錄MySQL以確認(rèn)安裝成功。
sudo mysql -u root -p
MySQL默認(rèn)密碼是root,直接登錄即可。
4. 修改初始密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
5. 創(chuàng)建庫和表
這里我們用SQL語句把項目需要的數(shù)據(jù)庫建好即可。
四、創(chuàng)建虛擬環(huán)境
為了避免全局安裝 Python 包和依賴,可以使用 Python 的虛擬環(huán)境來管理項目的依賴。
1. 創(chuàng)建虛擬環(huán)境
在應(yīng)用程序的目錄中,運(yùn)行以下命令創(chuàng)建虛擬環(huán)境:
python3 -m venv myenv
這將創(chuàng)建一個名為 myenv
的虛擬環(huán)境。
2. 激活虛擬環(huán)境
在創(chuàng)建完虛擬環(huán)境后,需要激活它:
source myenv/bin/activate
激活虛擬環(huán)境后,你會看到終端提示符前綴變?yōu)?nbsp;(myenv)
,表示虛擬環(huán)境已激活。
五、發(fā)布 Python 應(yīng)用
1. 上傳項目文件
將應(yīng)用程序文件上傳到生產(chǎn)服務(wù)器,確保所有的源代碼文件和 requirements.txt
文件都已上傳。
2. 安裝項目依賴
通過 requirements.txt
文件安裝依賴。
pip install -r requirements.txt
3. 啟動項目
進(jìn)入到應(yīng)用程序目錄,并運(yùn)行 Python 應(yīng)用,確保它能夠正常啟動:
python3 app.py
如果應(yīng)用運(yùn)行正常,會顯示應(yīng)用訪問地址以及端口號。
六、配置 Nginx 作為反向代理(可選)
為了將外部請求轉(zhuǎn)發(fā)到 Python 應(yīng)用,通常使用 Nginx 作為反向代理。
1. 安裝 Nginx
如果 Nginx 尚未安裝,使用以下命令安裝:
sudo apt update sudo apt install nginx -y
2. 配置 Nginx
打開 Nginx 配置文件并編輯反向代理設(shè)置:
sudo nano /etc/nginx/sites-available/default
在 server
塊中,配置反向代理,將請求轉(zhuǎn)發(fā)到 Python 應(yīng)用所在的端口(假設(shè) Python 應(yīng)用運(yùn)行在 8000 端口):
server { listen 80; server_name your_domain_or_ip; location / { proxy_pass http://127.0.0.1:8000; # 將請求轉(zhuǎn)發(fā)到 Python 應(yīng)用 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 配置
執(zhí)行以下命令測試 Nginx 配置是否正確:
sudo nginx -t
如果配置正確,輸出應(yīng)該顯示 syntax is okay
和 test is successful
。
4. 重新加載 Nginx
重新加載 Nginx 以應(yīng)用配置:
sudo systemctl reload nginx
七、設(shè)置系統(tǒng)服務(wù)(可選)
為了確保 Python 應(yīng)用在系統(tǒng)重啟后自動啟動,你可以創(chuàng)建一個 systemd 服務(wù)文件。
1. 創(chuàng)建 systemd 服務(wù)文件
創(chuàng)建一個新的服務(wù)文件:
sudo nano /etc/systemd/system/python-app.service
添加以下內(nèi)容:
[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
:設(shè)置為運(yùn)行應(yīng)用程序的用戶和組。WorkingDirectory
:指向應(yīng)用程序的目錄。ExecStart
:指向 Python 虛擬環(huán)境中的 Python 解釋器和應(yīng)用程序入口。
2. 重新加載 systemd 配置并啟動服務(wù)
sudo systemctl daemon-reload sudo systemctl start python-app.service sudo systemctl enable python-app.service
3. 檢查服務(wù)狀態(tài)
sudo systemctl status python-app.service
確認(rèn)應(yīng)用程序是否在后臺運(yùn)行并監(jiān)聽正確的端口。
八、配置防火墻
如果你的服務(wù)器啟用了防火墻(例如 UFW),確保允許 HTTP(80 端口)和你的應(yīng)用程序使用的端口(例如 8000)通過防火墻:
sudo ufw allow 80 sudo ufw allow 8000
九、測試部署
在部署完成后,訪問你配置的服務(wù)器域名或 IP 地址,檢查 Python 應(yīng)用是否通過 Nginx 正常提供服務(wù)。
十、總結(jié)
通過本教程,我們成功地在 Ubuntu 上部署了一個 Python 應(yīng)用,包括環(huán)境準(zhǔn)備、依賴管理、配置反向代理、設(shè)置系統(tǒng)服務(wù)以及日志管理等步驟。這種部署方式非常適合生產(chǎn)環(huán)境,能夠確保應(yīng)用程序在系統(tǒng)重啟后自動啟動,并且能夠通過 Nginx 處理高并發(fā)的外部請求。
以上就是在Ubuntu上部署Flask應(yīng)用的流程步驟的詳細(xì)內(nèi)容,更多關(guān)于Ubuntu部署Flask應(yīng)用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python3中條件控制、循環(huán)與函數(shù)的簡易教程
這篇文章主要給大家介紹了關(guān)于Python3中條件控制、循環(huán)與函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11Python+Selenium+Pytesseract實現(xiàn)圖片驗證碼識別
這篇文章主要介紹了利用Python+Selenium+Pytesseract實現(xiàn)圖片驗證碼識別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-01-01基于Django框架的rest_framework的身份驗證和權(quán)限解析
Django 是一個基于 Python 的 Web 框架,可讓您快速創(chuàng)建高效的 Web 應(yīng)用程序,這篇文章主要介紹了基于Django框架的rest_framework的身份驗證和權(quán)限解析,需要的朋友可以參考下2023-05-05python常用時間庫time、datetime與時間格式之間的轉(zhuǎn)換教程
Python項目中很多時候會需要將時間在Datetime格式和TimeStamp格式之間轉(zhuǎn)化,下面這篇文章主要給大家介紹了關(guān)于python常用時間庫time、datetime與時間格式之間轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下2023-02-02Python統(tǒng)計中文詞頻的四種方法小結(jié)
統(tǒng)計中文詞頻是Python考試中常見的操作,本文我們總結(jié)了四種常見的中文詞頻統(tǒng)計方法,并列出代碼,具有一定的參考價值,感興趣的可以了解一下2023-08-08