ubuntu18.04,python3.6,pipenv,nginx,supervisor,fabric,git,部署flask應(yīng)用

假定你也有這樣的需求,用pipenv創(chuàng)建一個虛擬環(huán)境,然后在虛擬環(huán)境中創(chuàng)建你的flask項目,并安裝了你所需要的各種依賴之后骚秦,當你完成了你的項目她倘,想把項目部署到遠程的服務(wù)器上去運行,接下來希望這套部署教程對你有所幫助作箍。

假定你已經(jīng)有了一個linux的系統(tǒng)帝牡,下面將逐個介紹這些組件的安裝。
一蒙揣,安裝Python3.6
首先查看一下你的系統(tǒng)已經(jīng)安裝的Python版本靶溜,調(diào)出終端(ctrl+alt+t)然后輸入Python -V和Python3 -V查看一下已有的Python版本,因為我的ubuntu是比較新的18.04.2LTS已經(jīng)安裝的版本為:


python.png

可以看到我的系統(tǒng)已經(jīng)安裝了python3.6了懒震,如果你的是比較低的版本可以通過
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt update
sudo apt install python3.6
安裝好之后可以做一個軟鏈sudo ln -s path to python3.6 /usr/bin/python3 (最好是備份一下之前的python3軟鏈)
一般安裝好Python3.6之后 pip3是會一起安裝好的罩息,如果沒有安裝可以通過sudo apt install python3-pip 最好也做一個pip3的軟鏈

二,安裝pipenv
使用pip3來安裝pipenv
pip3 install --user pipenv
此時在你的終端上輸入pipenv --version 如果能看到版本信息就證明已經(jīng)安裝成功了个扰,如果是找不到pipenv的瓷炮,你需要添加當前 Python 用戶主目錄的 bin 目錄到 PATH 環(huán)境變量。如果你不知道 Python 用戶主目錄在哪里递宅,用下面的命令來查看:
python3 -m site --user-base娘香,我通常是在家目錄下的.profile文件中加入
PYTHON_BIN_PATH="(python3 -m site --user-base)/bin"
PATH="PATH:PYTHON_BIN_PATH"

三,使用pipenv創(chuàng)建虛擬環(huán)境
在你的家目錄上創(chuàng)建一個test文件夾然后在cd 到test里運行pipenv install將會在test目錄下創(chuàng)建一個虛擬環(huán)境办龄,接下來就可以安裝項目需要的一些包了烘绽,比如flask,gunicorn

pipenv.png

接下來我們再test目錄下建一個app.py的python文件,在里面寫上
app.png

保存后俐填,現(xiàn)在已經(jīng)可以使用Python3 app.py運行這個應(yīng)用安接,并可以在瀏覽器訪問http://127.0.0.1:5000/和http://127.0.0.1:5000/data看到了運行結(jié)果
5000.png

data.png

然而我們在生產(chǎn)環(huán)境并不能用flask自帶的應(yīng)用服務(wù)器,flask自帶的應(yīng)用服務(wù)器只是給我們平時開發(fā)使用的英融,在生產(chǎn)環(huán)境中我們應(yīng)該用一些實現(xiàn)了wsgi(web server gateway interface)接口規(guī)范的容器盏檐,比如說gunicorn,uWSGI,FastCGI等等。在這里我們用的是gunicorn,我們在創(chuàng)建虛擬環(huán)境的時候已經(jīng)安裝好了gunicorn驶悟,現(xiàn)在通過pipenv shell進入到虛擬環(huán)境中胡野,然后執(zhí)行g(shù)unicorn app:app -b 127.0.0.1:5000 -w 2就可以手動啟動app服務(wù)了,在瀏覽器中訪問http://127.0.0.1:5000/會得到和上面一樣的效果


gunicorn.png

解釋一下gunicorn這條命令痕鳍,前面的app是app.py這個文件名后面的app是在app.py里面定義的一個app實例硫豆,參數(shù)-b是監(jiān)聽的ip地址和端口號,-w是工作進程數(shù)额获,這里我們可以看到開了2個工作進程够庙。

四恭应,安裝nginx
nginx是一個輕量級抄邀、性能強、占用資源少昼榛,能很好的處理高并發(fā)的反向代理的web服務(wù)器境肾,經(jīng)常也會用在生產(chǎn)環(huán)境中剔难。
現(xiàn)在我們先安裝它:
sudo apt install -y nginx
啟動nginx:
sudo /etc/init.d/nginx start
接下來還需要對nginx做一些配置:
刪除原來的默認文件:sudo rm /etc/nginx/sites-enabled/default
在sites-available目錄下創(chuàng)建一個test_nginx文件:sudo touch /etc/nginx/sites-available/test_nginx
為sites-available目錄下的test_nginx做一個軟鏈:
sudo ln -s /etc/nginx/sites-available/test_nginx /etc/nginx/sites-enabled/test_nginx
在sites-available下的test_nginx中做一下配置:


nginx1.png

這樣做的目的是當訪問/ 的HTTP請求將被“反向代理”到127.0.0.1上的5000端口(或“l(fā)ocalhost”)。這與gunicorn將使用的IP和端口相同奥喻。這時偶宫,請求就會被flask應(yīng)用程序處理,并做出響應(yīng)环鲤。在這里纯趋,我們希望nginx直接提供來自“/ home / sd / test / static /”目錄的靜態(tài)文件,而不是通過gunicorn / WSGI路由請求冷离。這將加速我們網(wǎng)站的加載時間吵冒,因為nginx知道直接服務(wù)該目錄。
配置好后西剥,通過nginx -s reload重新加載配置文件痹栖。

五,安裝supervisor
sudo apt install -y supervisor

supervisor安裝完成后會生成三個可執(zhí)行程序:supervisortd、supervisorctl瞭空、echo_supervisord_conf揪阿,分別是supervisor的守護進程服務(wù)(用于接收進程管理命令)-->相當于服務(wù)端程序,客戶端(用于和守護進程通信咆畏,發(fā)送管理進程的指令)-->相當于客戶端程序南捂,生成初始配置文件程序。
接下來我們就要對supervisor做一些配置旧找,首先通過echo_supervisord_conf > /ect/supervisor/supervisord.conf生成一個初始的配置文件黑毅。
運行supervisord服務(wù)的時候,需要指定一個supervisord.conf配置文件,如果不指定的話钦讳,默認會在以下這些目錄中查找:

當前項目工作目錄/supervisord.conf
當前項目工作目錄/etc/supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
../etc/supervisord.conf (Relative to the executable)
../supervisord.conf (Relative to the executable)

supervisor的配置參數(shù)較多矿瘦,下面介紹一下常用的參數(shù)配置,詳細的配置及說明愿卒,請參考官方文檔介紹缚去。
注:分號(;)開頭的配置表示注釋

[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 會使用
;chmod=0700 ;socket文件的mode琼开,默認是0700
;chown=nobody:nogroup ;socket文件的owner易结,格式:uid:gid

;[inet_http_server] ;HTTP服務(wù)器,提供web管理界面
;port=127.0.0.1:9001 ;Web管理后臺運行的IP和端口柜候,如果開放到公網(wǎng)搞动,需要注意安全性
;username=user ;登錄管理后臺的用戶名
;password=123 ;登錄管理后臺的密碼

[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小渣刷,超出會rotate鹦肿,默認 50MB,如果設(shè)成0辅柴,表示不限制大小
logfile_backups=10 ;日志文件保留備份數(shù)量默認10箩溃,設(shè)為0表示不備份
loglevel=info ;日志級別瞭吃,默認info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ;是否在前臺啟動涣旨,默認是false歪架,即以 daemon 的方式啟動
minfds=1024 ;可以打開的文件描述符的最小值,默認 1024
minprocs=200 ;可以打開的進程數(shù)的最小值霹陡,默認 200

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接supervisord和蚪,路徑與unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接supervisord

; [program:xx]是被管理的進程配置參數(shù),xx是進程的名稱
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序啟動命令
autostart=true ; 在supervisord啟動的時候也自動啟動
startsecs=10 ; 啟動10秒后沒有異常退出烹棉,就表示進程正常啟動了惠呼,默認為1秒
autorestart=true ; 程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected峦耘,表示進程意外殺死后才重啟
startretries=3 ; 啟動失敗自動重試次數(shù)剔蹋,默認是3
user=tomcat ; 用哪個用戶啟動進程,默認是root
priority=999 ; 進程啟動優(yōu)先級辅髓,默認999泣崩,值小的優(yōu)先啟動
redirect_stderr=true ; 把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小洛口,默認50MB
stdout_logfile_backups = 20 ; stdout 日志文件備份數(shù)矫付,默認是10
; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動第焰,所以需要手動創(chuàng)建目錄(supervisord 會自動創(chuàng)建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默認為false,進程被殺死時买优,是否向這個進程組發(fā)送stop信號,包括子進程
killasgroup=false ;默認為false挺举,向進程組發(fā)送kill信號杀赢,包括子進程

;包含其它配置文件
[include]
files = relative/directory/*.ini ;可以指定一個或多個以.ini結(jié)束的配置文件

配置信息參考
注意:由于我們是用pipenv虛擬環(huán)境,在配置supervisor的配置文件時還需要注意一些細節(jié)湘纵,在[program:xx]塊中脂崔,有一個command程序啟動命令,這里我們先要使用pipenv --venv找到我們使用的虛擬環(huán)境的路徑梧喷,然后就使用里面的gunicorn啟動砌左,最好是在項目目錄中創(chuàng)建一個gunicorn.conf文件配置gunicorn然后在command中使用/虛擬環(huán)境路徑/bin/gunicorn -c gunicorn.conf app:app

test_command.png

如果想把web管理界面打開,只需在[inet_http_server]塊里的注釋(前面的分號)去掉,然后在命令行里執(zhí)行supervisorctl reload進行重新加載在瀏覽器訪問http://127.0.0.1:9001輸入用戶和密碼就可以了铺敌,這里還有一個建議是每個項目最好有一個自己的配置文件汇歹,然后通過[include]塊中的fiels=/自己定義的目錄/*.ini引入就可以了,注意的是自定義的配置文件要以ini結(jié)尾偿凭。


web.png

當然也可以在命令行中查看進程的狀態(tài)产弹,只要通過supervisorctl這個客戶端命令與服務(wù)端supervisord做交互就可以了 ,想看supervisorctl有什么命令可以用supervisorctl -h查看笔喉。

六取视,F(xiàn)abric自動化部署
上面我們都是通過手動一步步安裝硝皂,配置常挚,啟動的作谭,如果有很多項目難道我們也是這樣一個個來配置嗎?我們部署的流程可能是這樣的奄毡,我們先在本地進行編碼折欠,編碼完成之后,在本地測試沒有問題了吼过,把項目推送到github或者svn這些代碼托管平臺锐秦,然后登錄到生產(chǎn)服務(wù)器,從github或者svn上把項目拉取下來盗忱,然后進行nginx配置酱床,虛擬環(huán)境配置,supervisor配置等等趟佃,這些操作都可以在Fabric上完成扇谣,F(xiàn)abric提供了很多好用的接口可以完成任務(wù),好累啊闲昭,不想說了罐寨,貼一個別人的總結(jié)好的Fabric接口
暫時先寫這么多吧, 有什么問題可以一起交流探討序矩。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸯绿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子簸淀,更是在濱河造成了極大的恐慌瓶蝴,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件租幕,死亡現(xiàn)場離奇詭異囊蓝,居然都是意外死亡,警方通過查閱死者的電腦和手機令蛉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門聚霜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人珠叔,你說我怎么就攤上這事蝎宇。” “怎么了祷安?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵姥芥,是天一觀的道長。 經(jīng)常有香客問我汇鞭,道長凉唐,這世上最難降的妖魔是什么庸追? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮台囱,結(jié)果婚禮上淡溯,老公的妹妹穿的比我還像新娘。我一直安慰自己簿训,他們只是感情好咱娶,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著强品,像睡著了一般膘侮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上的榛,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天琼了,我揣著相機與錄音,去河邊找鬼夫晌。 笑死雕薪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的慷丽。 我是一名探鬼主播蹦哼,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼要糊!你這毒婦竟也來了纲熏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤锄俄,失蹤者是張志新(化名)和其女友劉穎局劲,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奶赠,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鱼填,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毅戈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苹丸。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苇经,靈堂內(nèi)的尸體忽然破棺而出赘理,到底是詐尸還是另有隱情,我是刑警寧澤扇单,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布商模,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏施流。R本人自食惡果不足惜响疚,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞪醋。 院中可真熱鬧民鼓,春花似錦庙曙、人聲如沸走越。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚓土。三九已至,卻和暖如春赖淤,著一層夾襖步出監(jiān)牢的瞬間蜀漆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工咱旱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留确丢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓吐限,卻偏偏與公主長得像鲜侥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诸典,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容