Flask項目部署:Flask + uWSGI + Nginx

目錄

1,網絡架構

2,環境安裝

2.1,安裝yum:Shell軟件包管理器

2.2 安裝python

2.3 安裝uWSGI

2.4 安裝Flask

3,上傳工程包到服務器,打包Flask項目

4,創建和配置 uwsgi 配置文件 uwsgi.ini

4.1配置文件

4.2配置文件注釋詳解

5,啟動服務

6,安裝nginx

7,nginx配置

8,啟動nginx


1,網絡架構

為什么使用Flask + uWSGI + Nginx 部署服務?

調用流:當客戶端發送服務請求時,若使用nginx作為代理服務器的話,先轉為nginx服務器處理,然后再轉給uwsgi服務器,再由uwsgi來調用項目中的代碼處理服務請求并返回。

2,環境安裝

2.1,安裝yum:Shell軟件包管理器

wget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gz

tar -zxvf yum-3.2.28.tar.gz

cd yum-3.2.28 sudo apt install yum

2.2 安裝python

sudo apt-get install python3

也可以用yum安裝:

sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz

2.3 安裝uWSGI

pip install uwsgi

2.4 安裝Flask

pip install flask

3,上傳工程包到服務器,打包Flask項目

????????3.1 使用SCP命令上傳包

????????3.2 工具上傳也是可以的,XShell,Filezilla

4,創建和配置 uwsgi 配置文件 uwsgi.ini

4.1配置文件

touch uwsgi.ini

vim uwsgi.ini

配置如下:

[uwsgi]
http=0.0.0.0:443
chdir=/usr/flask/ ?#視具體目錄而定
wsgi-file=/usr/flask/app.py ?#視具體目錄、文件命名情況而定
callable=app
master=true
processes=1
threads=10
daemonize=uwsgi.log
disable-logging=true
pidfile=uwsgi.pid
buffer-size=65536
harakiri=60
vacuum=True

4.2配置文件注釋詳解

[uwsgi]
socket=0.0.0.0:5000 #socket協議,用于和nginx通訊,端口可配置成別的端口;如果有nginx在uwsgi之前作為代理的話應該配socket ? 如:socket=0.0.0.0:5000,
#而如果客戶端請求不經過(不搭建)Nginx代理服務器,服務請求直接到uwsgi服務器的話那么就配http。如:http=0.0.0.0:5000;IP和端口與項目啟動文件app.py中一致; 127.0.0.1雖然是表示本地IP,但想要在網絡上訪問必須設置host=0.0.0.0才不受IP限制
chdir=/usr/flask/ #項目目錄,定位到項目的第一層,具體配置根據實際目錄情況而定,如項目名稱為falsk
wsgi-file=/usr/flask/manage.py #項目啟動文件,實際也可能不是這個命名(需要帶上文件路徑,視具體目錄情況而定)
callable=app #程序內的application變量名,也即執行run方法的那個實例的名稱
master=true #啟動主進程,來管理其他進程,其它的uwsgi進程都是這個master進程的子進程,如果kill這個master進程,相當于重啟所有的uwsgi進程。
processes=4 ?#進程數
threads=10 #每個進程中線程數
daemonize=uwsgi.log #使進程在后臺運行,并將日志打到指定的日志文件,文件若不存在則會自動創建
disable-logging=true :#不記錄請求信息的日志,只記錄錯誤以及uWSGI內部消息到日志中。如果不開啟這項,日志中會大量請求記錄:
pidfile=uwsgi.pid #進程號存儲文件,若不存在則會自動創建,pid里面只記錄一個進程號,若存在多個進程processes,則使用uwsgi命令通過uwsgi.pid文件停止、重啟uwsgi服務不全
buffer-size=65536#設置用于uwsgi包解析的內部緩存區大小為64k,默認是4k。不設置該關鍵字,請求超過4k就會報錯,
harakiri=60# 超過時間,單位秒
vacuum=True # 當服務器退出的時候自動清理環境

5,啟動服務

若進入項目下(uwsgi.ini所在的文件夾下),執行如下啟動命令:

uwsgi --ini uwsgi.ini # 啟動uwsgi服務

啟動成功信息:
[uWSGI] getting INI configuration from uwsgi.ini

ps -ef |grep uwsgi ? ? ? ? ? ?查看當前是否開啟的uwsgi進程

啟動失敗可查看uwsgi日志,日志位置在配置文件中我們自己配置的路徑 tail -f uwsgi

6,安裝nginx

yum install nginx

7,nginx配置

修改nginx配置文件nginx.conf ,將原來默認內容刪掉,添加如下:

server {
? ? listen ? ? ? 80;
? ? server_name ?localhost;
? ? location / {
? ? ? ? include uwsgi_params;
? ? ? ? uwsgi_pass 127.0.0.1:5000;
? ? }
}

說明:

listen監聽端口,也就是我們在瀏覽器要訪問的端口,默認80;Nginx在80端口上監聽從外部來的請求,并把所有請求轉發到監聽5000端口的WSGI應用。
server_name外網訪問服務器的地址
include uwsgi_params 引入uwsgi配置
proxy_pass就是啟動flask項目綁定的host和port,也即應用程序啟動文件app.py中配置的host和port,配置與uwsgi的配置文件里的socket一致。

備注:如果有多個項目的話,在一個nginx下部署多個應用, 如果用域名到很簡單配置多個nginx?server?和uwsgi就可以:

# 第一個服務器
server {
? ? listen ? ? ?192.168.1.1:80; # 監聽此ip的80端口
? ? server_name example.org www.example.org; # 服務器名
? ? ...
}

# 第二個服務器
server {
? ? listen ? ? ?192.168.1.1:80 default_server; # 監聽此ip的80端口
? ? server_name example.net www.example.net; # 服務器名,為此ip,端口的默認服務器
? ? ...
}

# 第三個服務器
server {
? ? listen ? ? ?192.168.1.2:80 default_server; # 監聽此ip的80端口
? ? server_name example.com www.example.com; # 服務器名,為此ip,端口的默認服務器
? ? ...
}

8,啟動nginx

service nginx start #啟動nginx
service nginx status # 查看nginx狀態,是否啟動
service nginx restart # 重啟nginx
ps -ef |grep nginx # 查看nginx是否已啟動
kill -9 nginx ?#強制停止
tail -f error.log ? ?#查看nginx日志

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74010.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74010.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74010.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[FPGA基礎學習]實現流水燈與按鍵暫停

FPGA實現LED流水燈 1.vscode的安裝和使用 vscode下載 Visual Studio Code - Code Editing. Redefined vscode插件(Verilog-HDL/SystemVerilog)下載 quartus綁定vscode 2.用6個LED完成周期為1秒的跑馬燈效果 流水燈模塊設計 時鐘輸入 DE2-115開發板…

【TensorRT】TensorRT從安裝到推理——Python 環境下 MobileNetV4 三分類任務

我想開發一個基于深度學習的分類小軟件,逐漸了解到了TensorRT在模型推理速度上的優勢,經過一下午資料的查找實現了將onnx模型轉為TensorRT格式模型的推理及測試過程。將實現過程記錄下來方便日后查看。 本文實驗設備是MX350顯卡 2G顯存 一 、安裝Tenso…

1.兩數之和(Java)

1. 題目描述 LeetCode 1. 兩數之和(Two Sum) 給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那兩個整數,并返回它們的索引。 示例 1: 輸入:nums [2,7,11,15], target 9 …

《深入探索 Python 數據分析:用 Pandas 高效處理與可視化大型數據集》

《深入探索 Python 數據分析:用 Pandas 高效處理與可視化大型數據集》 引言:從零到分析高手 數據是當代社會最寶貴的資源,而數據分析技能是現代職業人不可或缺的一部分。在數據科學的領域中,Python 已成為當之無愧的“首選語言”,其強大的生態系統和簡潔的語法讓人如虎添…

將樹莓派5當做Ollama服務器,C#調用generate的API的示例

其實完全沒這個必要,性能用腳后跟想都會很差。但基于上一篇文章的成果,來都來了就先簡單試試吧。 先來看看這個拼夕夕上五百多塊錢能達到的效果: 只要對速度沒要求,那感覺就還行。 Ollama默認只在本地回環(127.0.0…

python基礎學習二(列表及字典的使用)

文章目錄 列表列表的創建獲取列表中的多個元素判斷列表中元素是否存在列表元素的添加操作列表元素的刪除操作列表元素的修改列表的排序列表生成式 字典字典的創建字典的常規操作字典的常用操作字典的視圖操作字典元素的遍歷字典的特點字典的生成式 列表 一個對象由id&#xff0…

Android設計模式之代理模式

一、定義: 為其他對象提供一種代理以控制對這個對象的訪問。 二、角色組成: Subject抽象主題:聲明真是主題與代理的共同接口方法,可以是一個抽象類或接口。 RealSubject真實主題:定義了代理表示的真實對象&#xff0c…

國外計算機證書推薦(考證)(6 Sigma、AWS、APICS、IIA、Microsoft、Oracle、PMI、Red Hat)

文章目錄 證書推薦1. 六西格瑪 (6 Sigma)2. 亞馬遜網絡服務 (AWS)3. 美國生產與庫存控制學會 (APICS)4. 內部審計師協會 (IIA)5. 微軟 (Microsoft)6. 甲骨文 (Oracle)7. 項目管理協會 (PMI)8. 紅帽 (Red Hat) 證書推薦 1. 六西格瑪 (6 Sigma) 介紹:六西格瑪是一種…

用mkdocs寫文檔#自動更新github-page

https://wuyisheng.github.io/blog 背景是上一篇博客 使用mkdocs,最后提及可以部署github page。這里說明下怎么自動部署。 當然,這篇博客主要的目的還是提供下github page的鏈接 :) 我是這樣做的: step 1: pip3 i…

QT五 文件系統,QFile,QfileInfo

總覽 QIODevice:所有 I/O 設備類的父類,提供了字節塊讀寫的通用操作以及基本接口;QFileDevice:Qt5新增加的類,提供了有關文件操作的通用實現。QFlie:訪問本地文件或者嵌入資源;QTemporaryFile&a…

EF Core表達式樹

文章目錄 前言一、表達式樹與委托的區別二、動態構建表達式樹示例1示例2示例3高級技巧:表達式合并 三、ExpressionTreeToString安裝方法基本用法支持的格式化風格 四、注意事項總結 前言 在 Entity Framework Core 中,表達式樹(Expression T…

NVM安裝速通使用手冊(Windows版)NVM管理node版本命令手冊 NVM使用手冊

nvm(Node Version Manager)是一個用于管理Node.js版本的命令行工具。通過nvm,你可以在同一臺機器上安裝和切換多個Node.js版本,非常適合開發和測試在不同Node.js版本上運行的應用程序 一、安裝地址 1. 官方下載: &…

vLLM命令行使用方法詳解

vLLM 是一個針對大語言模型(LLMs)優化的高效推理和服務庫。以下是 vLLM 命令行工具的詳細使用方法解析,涵蓋常見場景和參數配置: 一、核心命令行工具 vLLM 提供兩個主要的命令行入口: 啟動 API 服務器 用于部署 HTTP/OpenAI 兼容的 API 服務: python -m vllm.entrypoint…

# 基于 OpenCV 的選擇題自動批改系統實現

在教育領域,選擇題的批改工作通常較為繁瑣且重復性高。為了提高批改效率,我們可以利用計算機視覺技術,通過 OpenCV 實現選擇題的自動批改。本文將詳細介紹如何使用 Python 和 OpenCV 實現一個簡單的選擇題自動批改系統。 1. 項目背景 選擇題…

python黑科技:無痛修改第三方庫源碼

需求不符合 很多時候,我們下載的 第三方庫 是不會有需求不滿足的情況,但也有極少的情況,第三方庫 沒有兼顧到需求,導致開發者無法實現相關功能。 如何通過一些操作將 第三方庫 源碼進行修改,是我們將要遇到的一個難點…

第十三章:優化內存管理_《C++性能優化指南》_notes

優化內存管理 一、內存管理基礎概念二、自定義分配器三、智能指針優化重點知識代碼示例:智能指針性能對比 四、性能優化關鍵點總結多選題設計題答案與詳解多選題答案設計題示例答案(第1題) 一、內存管理基礎概念 重點知識 動態內存分配開銷…

python筆記之函數

函數初探 python在要寫出函數很簡單,通過關鍵字def即可寫出,簡單示例如下 def add(a, b):return ab 以上即可以定義出一個簡單的函數:接收兩個變量a和b,返回a和b相加的結果,當然這么說也不全對,原因就是…

【服務器操作指南 - GPU 使用與文件傳輸】輕松掌握 GPU 狀態查看和服務器文件傳輸技巧

0. 引言 在使用服務器時,高效管理 GPU 和文件傳輸是兩項不可或缺的技能。 本指南旨在幫助您快速掌握服務器環境下的 GPU 使用狀態監測方法,并簡要介紹如何在服務器之間進行文件傳輸操作。 1. 查看服務器上的 gpu 使用狀態 1.1 安裝 gpustat 這條指令…

0330-YYYY-MM-DD格式日期比較大小

最簡單的&#xff08;python&#xff09; from datetime import datetime def compare_time(time1,time2): time1_t datetime.strptime(time1,“%Y-%m-%d”) time2_t datetime.strptime(time2,“%Y-%m-%d”) if time1_t < time2_t: return time1_t elif time1_t > ti…

QFlightInstruments飛行儀表控件庫

QFlightInstruments 是一個開源的飛行儀表控件庫&#xff0c;專為基于 Qt 的應用程序設計。它提供了一系列仿真實飛機儀表的組件&#xff0c;適用于飛行模擬軟件、航空電子系統或任何需要高仿真飛行儀表顯示的項目。 主要功能 高仿真飛行儀表&#xff1a;包括空速表、高度表、…