開始前的逼逼賴賴:
本人前端攻走,在學(xué)校學(xué)過點PHP,用原生PHP寫過接口此再,寫了很多重復(fù)代碼昔搂。后嘗試學(xué)習(xí)thinkPHP,沒學(xué)下去输拇。
之后接觸了Python摘符,感覺Python語法還挺簡潔的,又看了看Python的后端框架策吠,選中了flask逛裤,或許flask不是主流,但管他呢猴抹,自己用的舒服就行了带族。
flask或許確實有點小眾了,網(wǎng)上沒多少教程洽糟,很多東西還是得靠自己摸索炉菲。我為了學(xué)習(xí)規(guī)范一點的代碼,跑到Gitee上找一些成熟的項目看源碼坤溃。
一路摸索過來踩了無數(shù)雷拍霜,所以想留下一點教程幫助后來的人吧。
正文:
部署flask項目網(wǎng)上其實也有一些教程薪介,我也嘗試過很多不同的方法祠饺,主要就是兩種方法:
-
常規(guī)方法,把項目搬到服務(wù)器上汁政,安裝環(huán)境道偷,使用
uWSGI
或gunicorn
啟動項目缀旁,這里使用的就是這種方法。 - 懶人方法勺鸦,把項目搬到服務(wù)器上并巍,生成環(huán)境配置清單文件,使用寶塔的Python項目管理器一鍵部署换途。
寶塔的一鍵部署我也試過(畢竟是懶人懊渡,能一鍵部署誰不想試試呢~)。不過要說的是军拟,體驗極差剃执,極不推薦。一鍵部署雖然簡單安逸懈息,但bug極多肾档,而且沒有log,寶塔的log只在項目啟動的時候有輸出辫继,項目運行后就消無聲息了怒见,這意味著一旦報錯連報錯提示都沒有。更別說一些莫名其妙的bug骇两,我嘗試了很久最后還是放棄了速种。不過bug只是暫時的姜盈,但愿寶塔能越做越好低千,讓每個用戶都能真正地一鍵部署吧。
所以這里是教大家馏颂,使用一種盡可能 簡單便捷示血、少報錯、方便管理 的方式部署flask項目救拉。所以各位懶人难审,如果真的想少花點時間,少花點精力亿絮,建議使用以下看起來有點復(fù)雜方法告喊,千萬不要輕易嘗試寶塔一鍵部署。
首先要同步代碼到云端派昧,這里使用Pycharm同步代碼
我用的是pycharm2021.3.1黔姜,最好使用比較新的版本,老版本不支持一鍵生成flask項目蒂萎,SSH也是較新版本才有的功能秆吵。
-
點擊
tools
->Deployment
->Configuration
- 配置服務(wù)器的公網(wǎng)ip,端口號一般是22五慈,可以在寶塔的
安全
里看到:
-
再配置項目在服務(wù)器中的位置,以下配置項目將更新到該指定路徑
/tmp/pycharn_project_30
配置項目路徑
-
配置好后可以點擊菜單
tools
->Deployment
->Upload to ...
更新當(dāng)前打開文件的代碼
Upload All Opened Files to ...
是更新所有文件
image.png
配置云端的Python環(huán)境
將項目上傳到服務(wù)器后毙芜,由于服務(wù)器沒有Python的環(huán)境忽媒,所以通過以下方式為服務(wù)器安裝環(huán)境。
- 點擊
settings
->project
-
點擊Python版本右邊的設(shè)置按鈕腋粥,點
add
,在彈出來的窗口左邊選ssh
猾浦,填寫服務(wù)器公網(wǎng)IP和端口,點Next
image.png
-
配置好后變成這樣:
image.png
這里可以不應(yīng)用灯抛,在這里為服務(wù)器安裝Python版本和插件就行了金赦,安裝了Python后在服務(wù)器也可以使用pip安裝插件,但大概率會出現(xiàn)報錯对嚼,而且無法更新到最新版本(親身經(jīng)歷)夹抗。在這里可以輕松地安裝和管理插件。
-
點擊左上角的
加號
安裝插件纵竖。
image.png -
上方輸入插件名漠烧,就會顯示插件的最新版本,一鍵安裝
image.png -
這里會顯示當(dāng)前版本和最新版本靡砌,三角箭頭表示可以升級已脓。
image.png
配置好服務(wù)器環(huán)境后,就要運行項目了
其實配置好服務(wù)器環(huán)境后通殃,可以在項目根目錄下啟動終端度液,像在本地運行項目一樣輸入python app.py
啟動項目,但會打印一個警告:
翻譯過來就是
這是一個開發(fā)服務(wù)器画舌。不要在生產(chǎn)部署中使用它
堕担。百度之后,說說我的理解:
flask本身的服務(wù)器容器性能非常弱曲聂,記住是非常霹购,只能在本地開發(fā)用用,不推薦在生產(chǎn)環(huán)境下使用朋腋,注意這只是個警告而不是報錯齐疙,實際還可以用用。我自己測試過旭咽,代碼寫一點簡單的邏輯還可以用贞奋,稍微復(fù)雜一點,驗證了一下token就芭比Q了轻专,直接報超時忆矛。所以還是非常有必要使用第三方的容器提升一下性能的。
目前有兩大獨立WSGI容器,uWSGI 和 gunicorn
這里只講如何使用gunicorn催训,感興趣的可以看看這篇文章:https://zhuanlan.zhihu.com/p/50857407
使用gunicorn運行flask項目
-
首先打開終端安裝gunicorn
老配方
pip install gunicorn
安裝完成可以使用-h
命令查看幫助
gunicorn -h
-
直接運行項目
gunicorn 啟動文件名:flask實例名
此處app:app中洽议,第一個app為flask項目實例所在的包(就是啟動文件app.py),第二個app為生成的flask項目實例(就是你app.py里定義的flask實例)漫拭。
flask實例:
app = Flask(__name__)
所以我這里是:
gunicorn app:app
- gunicorn默認(rèn)的host是
127.0.0.1
也就是本地亚兄,我試了一下運行后,訪問不了采驻。也就需要手動改一下配置审胚。有兩種方法,個人感覺都挺扯淡的礼旅。 - 一種是直接上命令膳叨,使用
-b host:port
gunicorn -b 123.456.7.8:5000 app:app
這樣就直接運行了,下次運行還得重新輸入host:port
- 還有一種方法痘系,首先手動創(chuàng)建一個配置文件
gunicorn_config.py
菲嘴,其實名字隨便取,然后在文件內(nèi)輸入私網(wǎng)ip地址加端口汰翠,注意端口號要在安全組放行龄坪。
bind = '123.0.2.3:8000'
更多的配置可以看這篇文章:
https://blog.csdn.net/u012856866/article/details/119384985
注意一定要是私網(wǎng)ip,不能使用公網(wǎng)复唤,不知道私網(wǎng)可以看控制臺健田,這里是阿里云的控制臺
然后就可以輸入命令,讓gunicorn根據(jù)配置文件啟動gunicorn -c 文件名.py 啟動文件名:實例名
:
gunicorn -c gunicorn_config.py app:app
而然佛纫,每次啟動都還是要敲一遍文件名妓局,(為什么不能讓配置永遠(yuǎn)生效!!!),所以我建議各位雳旅,配置文件名越短越好跟磨,比如gun.py
间聊、conf.py
攒盈、a.py
... 簡短的名字能一定程度上少敲一點代碼。
如果運行后一直重復(fù)連接哎榴,可以換個端口型豁,注意安全組要放行,配置要使用私網(wǎng)ip尚蝌,訪問要使用公網(wǎng)ip迎变,其他應(yīng)該沒什么要注意的了。
這樣就是ip無效或端口未放行導(dǎo)致連接不上:
最終運行成功效果:
在后臺運行項目
成功運行后關(guān)閉cmd窗口會殺掉進(jìn)程(我的不會殺進(jìn)程飘言,但是接口依然不能使用)衣形。
所以要想辦法讓進(jìn)程在后臺運行,命令如下:
gunicorn -b post.py app:app --daemon
只要在后面加一個--daemon
就可以了,這段命令運行后是沒有任何提示的谆吴,不過可以通過以下命令查看正在運行的進(jìn)程:
sudo lsof -iTCP -sTCP:LISTEN -P | grep gunicorn
可以看到在gunicorn -b post.py app:app --daemon
輸入后雖然沒有任何提示倒源,但是會有進(jìn)程被生成,命令已經(jīng)生效了句狼,如果想要關(guān)閉可以運行以下命令:
sudo kill -9 【進(jìn)程號】
ps: 百度到的命令都是奇奇怪怪而且沒有用笋熬,甚至有一段命令nohup
還是啥,運行后沒有啥子用的同時進(jìn)程號還是動態(tài)的腻菇,沒法用命令關(guān)閉胳螟,害得我只能重啟服務(wù)器。筹吐。糖耸。
至此項目運行成功仇参,圓滿結(jié)束
謝謝大家