在CentOS下配置uWSGI+Flask的web服務(wù)器

關(guān)鍵字:Linux, CentOS, Flask, uWsgi

1. 配置anaconda下的python虛擬環(huán)境

為了使項(xiàng)目具有很好的獨(dú)立性十减,我們給項(xiàng)目配置一個(gè)自己?jiǎn)为?dú)的python運(yùn)行環(huán)境氢哮。

之前我們?cè)贑entOS下安裝了anaconda辱揭,并配置了國(guó)內(nèi)下載源裆泳,接下來繼續(xù)在此基礎(chǔ)上配置一個(gè)python 3.7.3的虛擬環(huán)境竟闪。

1.1 創(chuàng)建虛擬環(huán)境

conda create -n venv python==3.7.3

1.2 查看系統(tǒng)上的虛擬環(huán)境

conda env list
已創(chuàng)建的虛擬環(huán)境

1.3 進(jìn)入虛擬環(huán)境

source activate venv

進(jìn)入后命令提示符的最前面括號(hào)里就變成了虛擬環(huán)境的名字 這里是venv

1.4 刪除虛擬環(huán)境

conda remove -n your_env_name --all

2. 安裝uWSGI

直接用pip就可以安裝

pip install uwsgi
uwsgi

安裝完成后可以在anaconda的bin目錄下找到它摊溶,如果不知道它在哪兒谐岁,也可以用命令在整個(gè)根目錄下查找

find  /  -name "uwsgi"

為了便于我們使用,給它創(chuàng)建一個(gè)軟鏈接幢竹,這相當(dāng)于在windows下將某個(gè)exe寫在系統(tǒng)環(huán)境變量的PATH中耳峦,可以隨處在命令行使用一樣

ln  -s  /root/anaconda3/bin/uwsgi  /usr/bin/uwsgi

3. 創(chuàng)建uwsgi配置文件

通常在項(xiàng)目所在的虛擬環(huán)境下創(chuàng)建uwsgi的配置文件,這里虛擬環(huán)境的目錄在
/root/anaconda3/envs/venv/

vi  /root/anaconda3/envs/venv/uwsgi.ini

寫入以下配置信息

  [uwsgi]
  # dir for file manage.py 
 chdir  = /opt/KangheSPC
  
 # flask file name 
 wsgi-file = manage.py
   
# object that call the run() function
callable = app

# processor number
processes = 4
 
# ip address and port
http = 0.0.0.0:5000
 
# dir for log files
daemonize = /opt/KangheSPC/log
 
# write pids to pidfile before lost authority
pidfile = project-master.pid

下面簡(jiǎn)單說明一下配置項(xiàng)(有些配置項(xiàng)這里沒有配置):

  • socket:指出了一個(gè)套接字焕毫,相當(dāng)于為外界留出一個(gè)uwsgi服務(wù)器的接口蹲坷。這里我用的是sock文件,沒有用IP:端口是因?yàn)樽髡咴诤竺孢\(yùn)行遇到了錯(cuò)誤邑飒,請(qǐng)看后面描述循签,如果只用了uwsgi,沒有配合Nginx一起,這里就可以配置成http.
  • pythonpath:指出了python的目錄.
  • module:指出了項(xiàng)目啟動(dòng)腳本的名字.
  • wsgi-file:指出了真正的腳本的文件名.
  • callable:指出的是具體執(zhí)行.run方法的那個(gè)實(shí)體的名字疙咸,一般而言都是app=Flask(__name__)的所以這里是app县匠。
  • processes/threads:指出了啟動(dòng)uwsgi服務(wù)器之后,服務(wù)器會(huì)打開幾個(gè)并行的進(jìn)程,每個(gè)進(jìn)程會(huì)開幾條線程來等待處理請(qǐng)求聚唐,顯然這個(gè)數(shù)字應(yīng)該合理,太小會(huì)使得處理性能不好而太大則會(huì)給服務(wù)器本身帶來太大負(fù)擔(dān)腔召。
  • daemonize:該項(xiàng)的出現(xiàn)表示把uwsgi服務(wù)器作為后臺(tái)進(jìn)程啟動(dòng)杆查,項(xiàng)的值指向一個(gè)文件表明后臺(tái)中的所有輸出都重定向到這個(gè)日志中去。
  • chmod-socket/chmod unix socket:是個(gè)文件臀蛛,所以會(huì)受到unix系統(tǒng)的權(quán)限限制亲桦。如果你的uwsgi客戶端沒有權(quán)限訪問uWSGI socket,你可以用這個(gè)選項(xiàng)設(shè)置unix socket的權(quán)限
  • pidfile: 在失去權(quán)限前浊仆,將pid寫到指定的pidfile文件中客峭。
  • chdir: 在失去權(quán)限前,使用chdir()到指定目錄抡柿。

以上這些配置項(xiàng)都是一些最為常見的配置項(xiàng)舔琅,實(shí)際上uwsgi還有很多很多配置。洲劣。除了寫一個(gè)配置文件的啟動(dòng)方式之外备蚓,還有命令行的啟動(dòng)方式,這里就不多說了囱稽。請(qǐng)需要的自己百度uwsgi配置

此外上面也說到這次碰到的一個(gè)坑郊尝,就是關(guān)于socket和http的差別。從概念上來說战惊,socket本身不是協(xié)議而是一種具體的TCP/IP實(shí)現(xiàn)方式流昏,而HTTP是一種協(xié)議且基于TCP/IP。具體到這個(gè)配置這里來吞获,如果我只配了socket = 127.0.0.1:5051的話况凉,通過瀏覽器或者其他HTTP手段是無法成功訪問的。而在uwsgi這邊的日志里會(huì)提示請(qǐng)求包的長(zhǎng)度超過了最大固定長(zhǎng)度衫哥。另一方面茎刚,如果配置的是http = 127.0.0.1:5051的話,那么就可以直接通過一般的http手段來訪問到目標(biāo)撤逢。但這會(huì)引起nginx無法正常工作膛锭。正確的做法應(yīng)該是,如果有nginx在uwsgi之前作為代理的話應(yīng)該配socket蚊荣,而如果想讓請(qǐng)求直接甩給uwsgi的話那么就要配http初狰。

配置完成之后就可以鍵入 uwsgi 配置文件.ini來啟動(dòng)uwsgi,再查看日志(如果配置了daemonize的話)如果最終沒有報(bào)錯(cuò)互例,ps也能看到processes指定個(gè)數(shù)的uwsgi進(jìn)程在跑的話說明成功啟動(dòng)奢入。如果直接把uwsgi作為留給外部的連接接口發(fā)布應(yīng)用的話當(dāng)然也可以,但是一般而言我們肯定還要在uwsgi前面再加上一個(gè)nginx媳叨。nginx的好處在于可以進(jìn)行安全過濾腥光,防DDOS攻擊关顷,多臺(tái)機(jī)器的負(fù)載均衡等工作。

4. 啟動(dòng)uWSGI生產(chǎn)服務(wù)器

下面我們寫一個(gè)簡(jiǎn)單的flask應(yīng)用程序武福,然后在uWSGI上運(yùn)行议双。

4.1 簡(jiǎn)單的hello world

編寫一個(gè)manage.py的文件放到我們的項(xiàng)目文件夾中

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

4.2 啟動(dòng)服務(wù)器

執(zhí)行命令

uwsgi  --ini  /root/anaconda3/envs/venv/uwsgi.ini

然后可以用命令查看5000端口是哪個(gè)進(jìn)程在使用

netstat -lnp | grep 5000

截圖如下:


啟動(dòng)服務(wù)器

為了驗(yàn)證服務(wù)器已經(jīng)正確啟動(dòng)了,我們?cè)趙indows下訪問我們的服務(wù)器捉片,在瀏覽器中輸入服務(wù)器的地址


hello world

可以看到服務(wù)器響應(yīng)了我們的http請(qǐng)求
此外平痰,還可以在log文件中看到服務(wù)器的運(yùn)行狀態(tài)

vi  /opt/KangheSPC/log
log信息

4.3 關(guān)閉服務(wù)器

killall -9 uwsgi

貌似大家都是用這種很粗暴的方式,以后找到新的方式了再更新伍纫。

參考文獻(xiàn)

https://blog.csdn.net/t8116189520/article/details/82108135
https://blog.csdn.net/tengqingyong/article/details/82020733
https://blog.csdn.net/woshizhiwu/article/details/78237921
https://blog.csdn.net/qq_44670803/article/details/91894534

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宗雇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子莹规,更是在濱河造成了極大的恐慌赔蒲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件访惜,死亡現(xiàn)場(chǎng)離奇詭異嘹履,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)债热,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門砾嫉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窒篱,你說我怎么就攤上這事焕刮。” “怎么了墙杯?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵配并,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我高镐,道長(zhǎng)溉旋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任嫉髓,我火速辦了婚禮观腊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘算行。我一直安慰自己梧油,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布州邢。 她就那樣靜靜地躺著儡陨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骗村,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天嫌褪,我揣著相機(jī)與錄音,去河邊找鬼胚股。 笑死渔扎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的信轿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼残吩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼财忽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泣侮,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤即彪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后活尊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隶校,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蛹锰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了深胳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铜犬,死狀恐怖舞终,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情癣猾,我是刑警寧澤敛劝,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站纷宇,受9級(jí)特大地震影響夸盟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜像捶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一上陕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧作岖,春花似錦唆垃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春渐尿,著一層夾襖步出監(jiān)牢的瞬間醉途,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工砖茸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隘擎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓凉夯,卻偏偏與公主長(zhǎng)得像货葬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子劲够,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359