flask項(xiàng)目實(shí)現(xiàn)自動(dòng)化部署

Flask的優(yōu)點(diǎn):

1.簡單。flask是主要應(yīng)對(duì)小型或者快速構(gòu)建的項(xiàng)目,故沒有像Django那樣大而全,集成了很多的組件,不管你是否用沒用得到。如果說Django是一個(gè)精裝的房子,那么flask就是毛培房。使用Django的項(xiàng)目,大部分的布局等都是相似的,因?yàn)橐呀?jīng)裝修完畢了,大同小異。而使用flask的話,如何裝修,如何設(shè)計(jì)都是自己搞定的,所以每個(gè)flask項(xiàng)目的相異性較大。

2.使用簡單。官方的使用指南清晰的介紹了Flask的運(yùn)行過程。官方指南(中文版)

3.部署簡單。本地運(yùn)行不需要安裝其他的軟件,只需要python基本的環(huán)境(一般來說:本地測(cè)試直接運(yùn)行即可)。如需要在服務(wù)器上運(yùn)行,以支撐起整個(gè)項(xiàng)目,則需要配置uwsgi+nginx。因?yàn)樾枰紤]到并發(fā)性、異步性(盡管可以在啟動(dòng)run()里加入一些參數(shù)實(shí)現(xiàn)異步)。

Flask的安裝

Flask安裝教程(包含多種安裝方式),建議不要直接pip,而是先安裝:虛擬環(huán)境創(chuàng)建工具virtualenv,為每一個(gè)項(xiàng)目創(chuàng)建一個(gè)虛擬環(huán)境,這樣不會(huì)引起版本沖突。

pip install virtualenv? ---安裝虛擬環(huán)境

cd your_project_dir? ---進(jìn)入你的項(xiàng)目目錄

virtualenv? venv---創(chuàng)建目錄名(自定義),在venv文件夾中,包含了python的可執(zhí)行文件,以及pip庫的拷貝,這樣就可以安裝flask包了,前提是激活該項(xiàng)目的虛擬環(huán)境,否則還是會(huì)安裝在系統(tǒng)環(huán)境下

source venv/bin/activate? ?---激活虛擬環(huán)境

服務(wù)器上配置:

uwsgi+nginx配置,如果不使用Nginx也是可以實(shí)現(xiàn)項(xiàng)目的運(yùn)行支撐的,但是Nginx可以保證負(fù)載均衡(如果有多個(gè)運(yùn)行項(xiàng)目的話)以及安全性。一般配置nginx作為前端代理,uwsgi作為后端代理,其實(shí)這樣稱呼并不準(zhǔn)確,但只是相對(duì)的。nginx用來處理靜態(tài)請(qǐng)求,若是動(dòng)態(tài)請(qǐng)求由nginx轉(zhuǎn)發(fā)至uwsgi進(jìn)行處理。具體作用見:NgInx的作用。

先安裝uwsgi,可直接pip系統(tǒng)安裝,或者在虛擬環(huán)境中安裝;

pip install uwsgi?

????????在你的項(xiàng)目根目錄下創(chuàng)建一個(gè)uwsgiconfig.ini(uwsgi支持多種配置文件格式:ini、xml、json等),其實(shí)不是必須在根目錄下創(chuàng)建,只要能找到該文件并啟動(dòng)即可,在根目錄下創(chuàng)建是方便修改。


Nginx安裝:參考:nginx安裝及基本操作語法

????????nginx的配置文件:可能存在大量的注釋,我們需要放開注釋并且可能進(jìn)行修改;這里就不全部顯示了,僅介紹主要的配置:

????????只要我們把代碼上傳到服務(wù)器上,運(yùn)行uwsgiconfig.ini文件,即可讓我們的flask項(xiàng)目運(yùn)行,并能向前提供服務(wù)。但在開發(fā)過程中,我們每次修改代碼或者新增功能并且在本地測(cè)試好了之后,想要通過公網(wǎng)訪問我們的修改的或者新增的功能,就得把當(dāng)前改變上傳到服務(wù)器上,并且重新啟動(dòng)uwsgi服務(wù)器。這樣每次代碼有改動(dòng),都得先上傳到服務(wù)器,再重新啟動(dòng)uwsgiconfig.ini文件,很是麻煩,所以我們期望找到一種自動(dòng)化的工具,能幫我們自動(dòng)上傳代碼,重新啟動(dòng)uwsgi服務(wù)器,jenkins就是我們所需要的工具。

代碼托管平臺(tái):github、coding、Bitbucket等:

? ? ? ?也就是將你的項(xiàng)目放在托管平臺(tái)上進(jìn)行托管,方便協(xié)作開發(fā),代碼集成。這里是用了coding做說明,后面將說明coding的一些配置。

jenkins持續(xù)集成:

?jenkins安裝配置

注意jenkins是基于java的,所以需要jdk環(huán)境并且在jenkins配置文件中設(shè)置。

service jenkins start? ?---啟動(dòng)jenkins?

在瀏覽器輸入? http://公網(wǎng)ip: 8080 (默認(rèn))訪問jenkins頁面(php界面)。

1.安裝jenkins需要的插件: 系統(tǒng)管理->插件管理->可選插件->右上角搜索:

? ? coding_webhook插件通過與coding上的項(xiàng)目的hook建立鏈接,當(dāng)coding上代碼有更新時(shí),jenkins也會(huì)進(jìn)行更新;publish_over_ssh插件是用來實(shí)現(xiàn)遠(yuǎn)程部署。

2.系統(tǒng)配置:

? ? ? ? ? 首先,在服務(wù)器上生成公鑰:ssh-keygen -t rsa? ;按3個(gè)回車,密碼為空。默認(rèn)會(huì)在 ~/.ssh目錄生成兩個(gè)文件: id_rsa私鑰,id_rsa.pub公鑰。known_hosts文件會(huì)記錄ssh密鑰登陸的主機(jī)列表。

? ? ? ? ? 接著,在系統(tǒng)管理->系統(tǒng)配置的publish_over_ssh中:


? ? ? ?在remote_directory下面的高級(jí)中:


然后保存即完后ssh的配置;

構(gòu)建項(xiàng)目:

新建任務(wù)->:


基礎(chǔ)設(shè)置:

源碼管理:


觸發(fā)器構(gòu)建:

觸發(fā)器構(gòu)建時(shí),需要配置coding上的webhook:



觸發(fā)器設(shè)置:


構(gòu)建環(huán)境:不做任何改變

構(gòu)建:

選擇增加構(gòu)建后操作,方式選擇SSH,目的是為了讓服務(wù)器重啟uwsgiconfig.ini文件,實(shí)現(xiàn)自動(dòng)化部署。


最后保存即可;

run.sh腳本說明:


到此,你的代碼在托管工具coding上更新之后,會(huì)通知綁定的jenkins,jenkins一并更新,并上傳到服務(wù)器指定目錄,最后通過執(zhí)行腳本重啟uwsgi服務(wù)器,實(shí)現(xiàn)自動(dòng)化部署。

注意事項(xiàng):

????????flask項(xiàng)目的啟動(dòng)文件的應(yīng)用變量中的參數(shù)應(yīng)該設(shè)置0.0.0.0或者不設(shè)置,也不要設(shè)置成調(diào)試模式,否則公網(wǎng)可能訪問不到;(這里沒有去了解參數(shù)設(shè)置,僅僅是隨便看了網(wǎng)上的一些解決方法照搬的);

????????服務(wù)器上也要安裝git,同時(shí)在jenkins全局工具管理中配置;

????????首次登錄jenkins之后密碼可能會(huì)消失,如果你記不得了的話,按照這個(gè)方法進(jìn)行重新配置;管理員密碼重置

????????如果自動(dòng)化部署沒問題,代碼在本地也沒問題,上傳上去發(fā)現(xiàn)項(xiàng)目運(yùn)行報(bào)錯(cuò),排除bug等原因。那么可能是py包的問題,我就遇到了包的版本問題,最后發(fā)現(xiàn)是pymongo的2.8之前不兼容;

????????在uwsgi配置中你指定的運(yùn)行日志文件中,可以看到報(bào)錯(cuò)的信息,shift+g可以跳轉(zhuǎn)到底部查錯(cuò);

? ? ? ? 時(shí)間過得有點(diǎn)久了,所以可能一些細(xì)節(jié)沒解釋清楚或者錯(cuò)了,但總體方向還是對(duì)的,希望大家不要建議。








?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容