在開發時,我們使用flask run命令啟動的開發伺服器是werkzeug提供的,但是這種方式目的是為了開發,不能很好的擴充套件,不適合生產部署。生產部署,我們需要乙個更強健,效能更高的wsgi伺服器(關於wsgi,可參考wsgi到底是什麼 ,常用的伺服器有:uwsgi、gunicorn等,本文以uwsgi舉例。
像uwsgi這類wsgi伺服器內建了web伺服器,所以我們不需要web伺服器也可以與客戶端交換資料,處理請求和響應,但是內建的web伺服器不夠強健,一般情況下都會使用乙個常規的web伺服器執行在前端,為wsgi伺服器提供反向**,web伺服器選擇nginx,nginx會把外部的請求**給uwsgi處理,接收到響應後再返回給客戶端,這樣做的好處有:
提高靜態檔案的效率,因為nginx處理靜態檔案的速度非常快
提公升系統安全性,避免直接暴露wsgi伺服器
提公升程式處理能力,通過設定反向**,配置負載均衡可以實現。
uwsgi是乙個伺服器,使用前一定要安裝:
pip install uwsgi
配置檔案:
對所配置的引數進行說明:
在命令列中啟動uwsgi伺服器:
uwsgi --ini uwsgi.ini
在瀏覽器中輸入
,可以驗證服務啟動。
安裝nginx:
apt-get install nginx
啟動nginx:
service nginx start
重啟
service nginx restart
nginx配置:
server
}
nginx配置檔案nginx.conf通過include引用了conf.d和site_enabled這兩個資料夾中的配置檔案,所以我們可將配置檔案放在這兩個路徑任意一處。
重啟nginx和uwsgi,在瀏覽器中輸入,可以驗證服務啟動。
這樣,就完成基礎的nginx+uwsgi完成了flask的部署。
接下來,介紹使用docker進行容器化部署。
建議了解docker基本操作,首先,建立dockerfile:
from ubuntu:16.04
run ln -sf /usr/share/zoneinfo/asia/shanghai /etc/localtime && echo "asia/shanghai" > /etc/timezone
run apt update && apt install -y iputils-ping python3 python3-pip python3-tk libffi-dev libssl-dev
run apt install -y nginx && pip3 install uwsgi
run pip3 install -r requirements.txt
run chmod + x start_script.sh
cmd ['/start_script.sh']
注意:
該映象的基礎映象為ubuntu:16.04,可自行docker pull
編寫服務啟動指令碼start_script.sh
nginx && uwsgi --ini uwsgi.ini
python3 serve.py
使用命令:
docker build -t image .
以上,就完成了乙個映象打包,接下來就是docker容器的常規化操作。另外,推薦使用k8s對docker容器進行編排管理,這裡不做介紹。 Flask程式部署 WSGI獨立容器
有一些流行的伺服器用python編寫的,包含wsgi應用程式並提供http服務。這些伺服器可以獨立執行 您可以從您的web伺服器 它們。如果遇到問題,請翻閱 安裝程式的issues。gunicorn green unicorn 是執行在unix下的wsgi http伺服器,這是從ruby的獨角獸專案...
容器虛擬化實現的原理
要想實現容器虛擬化,跟傳統的虛擬機器虛擬化有著本質的區別,容器虛擬化,需要進行以下六種資源的隔離,而這些隔離需要linux系統核心來支援,下面簡單整理了需要被隔離的資源及核心支援的情況 linux namespaces來實現 1 主機名和網域名稱 簡稱 uts 核心版本 2.6.19 系統呼叫引數 ...
IOC容器原理與實現
spring ioc主要分為兩個過程 ioc容器初始化 依賴注入 ioc容器初始化主要分為三個過程 第乙個過程,resource定位過程,這個過程如能主要是beandefintion的資源定位,主要就是找到定義bean的檔案。第二個過程,beandefinition的載入過程,這個載入過程就是把使用...