前言
最近自己做了個(gè) Falsk 小項(xiàng)目,在部署上服務(wù)器的時(shí)候,發(fā)現(xiàn)雖然不乏相關(guān)教程,但大多都是將自己項(xiàng)目代碼復(fù)制出來(lái),不講核心邏輯,不太簡(jiǎn)潔,于是將自己部署的經(jīng)驗(yàn)寫(xiě)成內(nèi)容分享出來(lái)。
uWSGI 簡(jiǎn)介
uWSGI: 一種實(shí)現(xiàn)了多種協(xié)議(包括 uwsgi、http)并能提供服務(wù)器搭建功能的 Python 包
Difference between WSGI , uWSGI and UWSGI
在 Flask 和 nginx 之間使用 uWSGI 的必要性:nginx 并不能直接與 Python 中的 WSGI 通信。WSGI 是 Python 中網(wǎng)絡(luò)服務(wù)的標(biāo)準(zhǔn)。What is the point of uWSGI?
uWSGI 安裝
pip 安裝,如果失敗則用 conda 安裝。Error installing uwsgi in virtualenv
Flask 注意
既然看到這篇內(nèi)容 Flask 程序編寫(xiě)肯定已經(jīng)不是問(wèn)題了,不過(guò)多介紹。Flask 官網(wǎng)中 Quickstart 的代碼為
# app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
通過(guò) flask --app hello run
啟動(dòng)。
要提的是代碼中如果有 app.run()
,要將其放在 if __name__ == "__main__":
中,即:
# app.py
if __name__ == "__main__":
app.run()
快速上手 uWSGI
文件目錄下運(yùn)行:uwsgi --http 0.0.0.0:5001 -w app:app
。第一個(gè) app
是 Flask 代碼文件名,第一個(gè) app
是代碼中 Flask 對(duì)象變量名,即賦值為 Flask(__name__)
的變量名。
打開(kāi)瀏覽器訪問(wèn)對(duì)應(yīng)端口測(cè)試
部署
部署上服務(wù)器需要添加名為 uwsgi.ini 的 uwsgi 配置文件,放在項(xiàng)目根目錄下。
基本配置:
; uwsgi.ini
[uwsgi]
module = app:app
; http 和 socket 二選一
; socket 用的是 uwsgi 協(xié)議通信
; http = 127.0.0.1:3031
socket = 127.0.0.1:3031
daemonize = ./uwsgi/uwsgi.log ; 后臺(tái)運(yùn)行
pidfile = ./uwsgi/uwsgi.pid ; 保存 pid 方便后臺(tái)運(yùn)行時(shí)的程序管理
并在根目錄下創(chuàng)建 uwsgi 文件夾,就能運(yùn)行最基礎(chǔ)的服務(wù)器了。
- 啟動(dòng):
uwsgi --ini uwsgi.ini
- 關(guān)閉:
uwsgi --stop ./uwsgi/uwsgi.pid
- 配置文件更改后:
uwsgi --reload ./uwsgi/uwsgi.pid
配置文件中的變量名就是命令行中參數(shù)名的全稱。
還建議配置:
master = 1
processes = 4
; 上面兩個(gè)參數(shù)配置并發(fā),根據(jù)服務(wù)器性能配置
enable-threads = 1 ; 開(kāi)啟多線程
stats = 0.0.0.0:9191 ; 開(kāi)啟監(jiān)控端口,以 json 格式返回當(dāng)下 uwsgi 運(yùn)行狀態(tài)
stats-http = 1 ; 開(kāi)啟 http 訪問(wèn)監(jiān)控端口
奇怪的是在本地測(cè)試時(shí)可以在瀏覽器直接訪問(wèn) 9191 端口,而在服務(wù)員上部署成功后卻無(wú)法訪問(wèn),但是有返回的內(nèi)容,可以用 curl
獲取內(nèi)容。
除此之外,要監(jiān)控 uwsgi 的運(yùn)行狀態(tài),還可以通過(guò) pip 安裝 uwsgitop,而后在 shell 中輸入 uwsgitop 就能查看監(jiān)控,就像 linux 中的 top 一樣。
nginx 配置
nginx 基礎(chǔ)不多介紹,直入正題配合使用 uwsgi 時(shí)該如何配置。
location
中照如下設(shè)置:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-851264.html
# 如果是用 socket:
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:3031; # 端口號(hào)和前述配置文件一樣
}
# 如果是用 http:
location / {
proxy_pass http://127.0.0.1:3031; # 端口號(hào)和前述配置文件一樣
}
現(xiàn)在可以通過(guò)瀏覽器訪問(wèn)了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-851264.html
到了這里,關(guān)于Flask 生產(chǎn)環(huán)境部署(Falsk + uWSGI + nginx)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!