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.mzph.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;包括空速表、高度表、…