天天看點

Centos7上面安裝uWSGI 部署項目測試

Centos7上面安裝uWSGI 部署項目測試

uWSGI伺服器

1、uWSGI

uWSGI是一個Web伺服器,它實作了WSGI協定、uwsgi、http等協定。Nginx中HttpUwsgiModule的作

用是與uWSGI伺服器進行交換。

要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。

WSGI是一種通信協定,Flask,webpy,Django、CherryPy等等都自帶WSGI,不過性能都不好。

Web伺服器網關接口(Python Web Server Gateway Interface,縮寫為WSGI)

1、WSGI是一套接口标準協定

UWSGI同WSGI一樣是一種通信協定。

而uWSGI是實作了uwsgi和WSGI兩種協定的Web伺服器。

為什麼有了uWSGI為什麼還需要nginx?因為nginx具備優秀的靜态内容處理能力,然後将動态内容轉發

給uWSGI伺服器,這樣可以達到很好的用戶端響應。

Centos7上面安裝uWSGI 部署項目測試
統一标準。

說到這,我們基本理清了 uWSGI 在 web伺服器與 web架構之間作用:uWSGI 就像一條紐帶,将 web服

務器與 web架構連接配接起來。Nginx 屬于一種高并發能力 web伺服器,Flask屬于一種 web架構,是以,

uWSGI 與 Nginx、Flask 的作用就不明而喻了。

Nginx,uWSGI,Flask 之間的對話

Nginx:Hey,uWSGI,我剛收到了一個請求,我需要你作些準備,然後由Flask來處理這個請求。

uWSGI:OK,Nginx。我會設定好環境變量,然後将這個請求傳遞給Flask處理。

Flask:Thanks uWSGI!給我一些時間,我将會把請求的響應傳回給你。

uWSGI:Alright,那我等你。

Flask:Okay,我完成了,這裡是請求的響應結果,請求把結果傳遞給Nginx。

uWSGI:Good job!Nginx,這裡是響應結果,已經按照要求給你傳遞回來了。

Nginx:Cool,我收到了,我把響應結果傳回給用戶端。大家合作愉快~

Centos7上面安裝uWSGI 部署項目測試

2、安裝uwsgi

pip install uwsgi      
Centos7上面安裝uWSGI 部署項目測試

安裝成功

Centos7上面安裝uWSGI 部署項目測試

如果安裝失敗,出現這個:

Centos7上面安裝uWSGI 部署項目測試

使用下面指令安裝:

yum install python3-devel      
Centos7上面安裝uWSGI 部署項目測試

如果上面都不行,說明你的python環境安裝有問題,按照這個部落格,重新安裝一下

項目上傳虛拟機得二種方式

第一種:通過win本地和虛拟機互傳工具,把自己在win本地準備的python3.8的壓縮包上傳到虛拟機對應的目錄下

互傳工具:

Xfp

Centos7上面安裝uWSGI 部署項目測試

WinSCP 也可以互傳的

Centos7上面安裝uWSGI 部署項目測試

這裡用winscp ,輸入ip和密碼登入就可以

連結成功

Centos7上面安裝uWSGI 部署項目測試

直接在左邊win裡面把要傳的檔案,直接滑鼠拖動到對應目錄下面

傳輸成功

Centos7上面安裝uWSGI 部署項目測試

第二種

虛拟機和win本地上傳檔案還可以通過rz指令進行上傳

yum install lrzsz      

rz:從本地上傳檔案至伺服器

Centos7上面安裝uWSGI 部署項目測試
Centos7上面安裝uWSGI 部署項目測試
Centos7上面安裝uWSGI 部署項目測試

有些安裝可能沒有上面的提示輸入y的指令 我這邊是全新建立的一個虛拟機環境才有

直接輸入

rz      

後面回車找到對應目錄,上傳就行

Centos7上面安裝uWSGI 部署項目測試

在虛拟機裡面檢視

Centos7上面安裝uWSGI 部署項目測試
編寫uwsgi.ini檔案

在項目目錄下touch一個ini檔案(xml,yaml格式),名稱随意,vim進去

[uwsgi]
socket = 0.0.0.0:8000
# 設定0.0.0.0表示可以接收不同伺服器的nginx發送過來的請求, 127.0.0.1表示隻接收同一伺服器發送過來的請求, 8000為應用内的監聽端口# http = 0.0.0.0:8000 # http為直接作為web伺服器啟動 # http = :5000 # 啟動程式時所使用的位址和端口,通常在本地運作flask項目,
http = :5000 #啟動程式時所需要得地方和端口号,通常在本地運作flask項目
chdir = /home/MSB-Shopping/  # 項目目錄
wsgi-file = /home/MSB-Shopping/Shopping/main.py # flask程式的啟動檔案,通常在本地是通過運作 python manage.py runserver 來啟動項目的
callable = app   # 程式内啟用的application變量名
processes = 4 # 處理器個數,程序個數 .一般最大填寫CPU的核心數量
threads = 2 # 線程個數 ,預設的linux系統中一個程序最多2048個線程。 1 ~ 1024
stats = 0.0.0.0:9191 # 擷取uwsgi統計資訊的服務位址 ,隻能本機通路
pidfile = /home/uwsgi.pid  # 儲存pid資訊,友善停止服務和重新開機的時候用
daemonize = /home/MSB-Shopping/log/uwsgi.log # 背景運作時記錄uwsgi的運作日志
lazy-apps = true  # 優雅重新開機 ,當需要連接配接cassandra時,uwsgi無法啟動服務,可以 使用該選項設定
master-fifo = /opt/mt-search/web-service/mfifo # 使用chain-reloading 逐個work重 啟,服務不中斷, 指令是 echo c > mfifo
touch-chain-reload = true # 修改app.py内任意東西 儲存即可重新開機uwsgi      

配置如上,

沒有注釋的配置如下:

[uwsgi]
http = :5000
chdir = /home/MSB-Shopping/
wsgi-file = /home/MSB-Shopping/Shopping/main.py
callable = app
processes = 4
threads = 2
stats = 0.0.0.0:9191
pidfile = /home/uwsgi.pid
daemonize = /home/MSB-Shopping/log/uwsgi.log
lazy-apps = true
master-fifo = /opt/mt-search/web-service/mfifo
touch-chain-reload = true      

在進行上面配置時候,要把python項目上傳到虛拟機裡面

先切換到項目目錄

Centos7上面安裝uWSGI 部署項目測試

用vi 編輯配置檔案

vi run.ini      
Centos7上面安裝uWSGI 部署項目測試

按照esc 退出 剛剛進入編輯下按 i 字母的插入子產品

按住鍵盤 shit+q 彈出:後面輸入 :wq 報錯退出

再檢視一下·是否寫入成功

Centos7上面安裝uWSGI 部署項目測試

經過測試,ini檔案裡面不能寫這個注釋

是以後面用了下面的檔案

[uwsgi]
http = :5000
chdir =  /home/MSB-Shopping/
wsgi-file = /home/MSB-Shopping/Shopping/main.py
callable = app
processes = 4
threads = 2
stats = 0.0.0.0:9191
pidfile = /home/uwsgi.pid
daemonize = /home/MSB-Shopping/logs/uwsgi.log
lazy-apps = true
master-fifo = /opt/mt-search/web-service/mfifo
touch-chain-reload = true      

後面這個2行可以去掉:

master-fifo = /opt/mt-search/web-service/mfifo
touch-chain-reload = true      

如果這2行沒有注釋,就要去虛拟機裡面建立這個檔案夾,不然就報錯

/opt/mt-search/web-service/mfifo      

這裡,直接去掉

正确配置如下

Centos7上面安裝uWSGI 部署項目測試
pidfile = /home/uwsgi.pid  # 儲存pid資訊,友善停止服務和重新開機的時候用
daemonize = /home/MSB-Shopping/log/uwsgi.log # 背景運作時記錄uwsgi的運作日志
這2個不用自己去建立,運作的時候,自動生成      

uwsgi啟動指令

uwsgi --ini uwsgi.ini # 啟動後直接進控制台 
nohup uwsgi --ini uwsgi.ini & # 背景啟動uwsgi伺服器 
uwsgi --reload uwsgi.pid # 重新開機 
uwsgi --stop uwsgi.pid # 停止 
kill -9 pid # 關閉服務,直接kill uwsgi的端口      

虛拟機中啟動uwsgi

uwsgi --ini uwsgi.ini # 啟動後直接進控制台      
Centos7上面安裝uWSGI 部署項目測試
Centos7上面安裝uWSGI 部署項目測試

運作配置檔案,出現下面錯誤

解決辦法:找到uwsgi執行位置,建立軟連結

find / -name uwsgi      

如圖

Centos7上面安裝uWSGI 部署項目測試

建立軟連接配接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi      
Centos7上面安裝uWSGI 部署項目測試

輸入

uwsgi --help  #出現下面表示軟連接配接建立成功      
Centos7上面安裝uWSGI 部署項目測試

啟動uwsgi

uwsgi --ini run.ini      
Centos7上面安裝uWSGI 部署項目測試

檢視uwsgi 是否啟動

ps aux | grep uwsgi      
Centos7上面安裝uWSGI 部署項目測試

啟動成功

切換到日志目錄檢視日志是否生成成功

Centos7上面安裝uWSGI 部署項目測試

發現成功

切換其他目錄檢視

Centos7上面安裝uWSGI 部署項目測試

發現uwsgi.pid這個檔案也生成成功

ps -ef | grep uwsgi

ps aux | grep uwsgi

這2個指令都一樣可以檢視顯示系統的程序資訊
第二個更加詳細      
Centos7上面安裝uWSGI 部署項目測試

停止uwsgi服務

uwsgi --stop uwsgi.pid  #停止uwsgi服務  這裡要變成pid的檔案目錄      
Centos7上面安裝uWSGI 部署項目測試
Centos7上面安裝uWSGI 部署項目測試

發現uwsgi服務已經停止

nohup uwsgi --ini uwsgi.ini & # 背景啟動uwsgi伺服器  不在這個uwsgi.ini檔案同級目錄下面,啟動要加檔案路徑      
Centos7上面安裝uWSGI 部署項目測試

發現uwsgi 服務又啟動起來了

kill -9 pid # 關閉服務,直接kill uwsgi的端口      
Centos7上面安裝uWSGI 部署項目測試
uwsgi --reload uwsgi.pid # 重新開機  和上面一樣要加路徑運作      

繼續閱讀