歡迎光臨
每天分享高質量文章

python web 部署:nginx + gunicorn + supervisor + flask 部署筆記

python web 部署

web開發中,各種語言爭奇鬥艷,web的部署方面,卻沒有太多的方式。簡單而已,大概都是 nginx 做前端代理,中間 webservice 呼叫程式腳本。大概方式:nginx + webservice + script

nginx 不用多說,一個高性能的web服務器。通常用來在前端做反向代理服務器。所謂正向與反向(reverse),只是英文說法翻譯。代理服務,簡而言之,一個請求經過代理服務器從局域網發出,然後到達互聯網上服務器,這個過程的代理為正向代理。如果一個請求,從互聯網過來,先進入代理服務器,再由代理服務器轉發給局域網的標的服務器,這個時候,代理服務器為反向代理(相對正向而言)。

正向代理:{ 客戶端 —》 代理服務器 } —》 服務器

反向代理:客戶端 —》 { 代理服務器 —》 服務器 }

{} 表示局域網

nginx既可以做正向,也可以做反向。

webservice 的方式同樣也有很多方式。常見的有FastCGI,WSGI等。我們採用gunicorn為 wsgi容器。python為服務器script,採用flask框架。同時採用supervisor管理服務器行程。也就是最終的部署方式為:

nginx + gunicorn + flask ++ supervisor

創建一個專案

創建 python 虛擬環境

virtualenv 可以說是 python 的一個大殺器。用來在一個系統中創建不同的 python 隔離環境。相互之間還不會影響,使用簡單到令人髮指。(我的工作路徑是 /home/rsj217/rsj217)

創建了 venv 環境之後,激活就可以了

安裝 python web 框架 —flask

flask 是一個 python web micro framework。簡潔高效,使用也很簡單。flask 依賴兩個庫  werkzeug 和 jinjia2。採用 pip 方式安裝即可。

測試我們的 flask 安裝是否成功,並使用 flask 寫一個簡單的 web 服務。

啟動 flask

此時,用瀏覽器訪問 http://127.0.0.1:5000 就能看到網頁顯示 hello world。

使用 gunicorn 部署 python web

現在我們使用 flask 自帶的服務器,完成了 web 服務的啟動。生產環境下,flask 自帶的 服務器,無法滿足性能要求。我們這裡採用 gunicorn 做 wsgi容器,用來部署 python。

安裝 gunicorn

 

pip 是一個重要的工具,python 用來管理包。還有一個最佳生產就是每次使用 pip 安裝的庫,都寫入一個 requirement 檔案裡面,既能知道自己安裝了什麼庫,也方便別人部署時,安裝相應的庫。

以後每次 pip 安裝了新的庫的時候,都需freeze 一次。

當我們安裝好 gunicorn 之後,需要用 gunicorn 啟動 flask,註意 flask 裡面的name裡面的代碼啟動了 app.run(),這個含義是用 flask 自帶的服務器啟動 app。這裡我們使用了 gunicorn,myapp.py 就等同於一個庫檔案,被 gunicorn 呼叫。

此時,我們需要用 8000 的端口進行訪問,原先的5000並沒有啟用。其中 gunicorn 的部署中,,-w 表示開啟多少個 worker,-b 表示 gunicorn 開發的訪問地址。

想要結束 gunicorn 只需執行 pkill gunicorn,有時候還的 ps 找到 pid 行程號才能 kill。可是這對於一個開發來說,太過於繁瑣,因此出現了另外一個神器—supervisor,一個專門用來管理行程的工具,還可以管理系統的工具行程。

安裝 supervisor

在myapp supervisor.conf 配置檔案底部添加 (註意我的工作路徑是/home/rsj217/rsj217/)

supervisor的基本使用命令

supervisor 還有一個web的管理界面,可以激活。更改下配置

現在可以使用 supervsior 啟動 gunicorn啦。運行命令 supervisord -c supervisor.conf

訪問 http://127.0.0.1:9001 可以得到 supervisor的web管理界面,訪問 http://127.0.0.1:2170 可以看見gunciron 啟動的傳回的 hello world

安裝配置 nginx

採用 apt-get方式安裝最簡單。運行 sudo apt-get install nginx。安裝好的nginx的二進制檔案放在 /usr/sbin/檔案夾下麵。而nginx的配置檔案放在 /etc/nginx下麵。

使用 supervisor 來管理 nginx。這裡需要註意一個問題,linux的權限問題。nginx是sudo的方式安裝,啟動的適合也是 root用戶,那麼我們現在也需要用 root用戶啟動supervisor。增加下麵的配置檔案

到此為止,進步的 web 部屬已經完成。當然,最終我們需要把專案代碼部屬到服務器上.批量的自動化部屬需要另外一個神器 fabric.具體使用,就不再這篇筆記闡述。專案原始碼中包含了fabric檔案。下載fabric,更改裡面的用戶名和秘密,就可以部屬在自己或者遠程的服務器上了。

專案原始碼: https://coding.net/u/rsj217/p/myproject/git

作者:人世間

鏈接:http://www.jianshu.com/p/be9dd421fb8d

本文來自“Python頭條”微信公眾號

ID:Pythontoutiao

▲▲▲掃碼立刻關註▲▲▲

最具關註價值的中文Python技術公眾賬號。

(12月內關註賬號可領取26集Python入門視頻)



————廣告時間————


馬哥教育2018年Python自動化運維開發實戰面授班2018年3月5號開班,馬哥聯合BAT、豆瓣等一線互聯網Python開發達人,根據目前企業需求的Python開發人才進行了深度定製,加入了大量一線互聯網公司:大眾點評、餓了麽、騰訊等生產環境真是專案,課程由淺入深,從Python基礎到Python高級,讓你融匯貫通Python基礎理論,手把手教學讓你具備Python自動化開發需要的前端界面開發、Web框架、大監控系統、CMDB系統、認證堡壘機、自動化流程平臺六大實戰能力,讓你從0開始蛻變成Hold住年薪20萬的Python自動化開發人才

掃描二維碼領取學習資料

更多Python好文請點擊【閱讀原文】哦

↓↓↓

赞(0)

分享創造快樂