当前位置: 首页 > article >正文

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.kler.cn/a/613656.html

相关文章:

  • [异步监听事件、异步绑定属性]通过vue的this.$refs.组件.$props和.$on实现异步绑定组件属性和事件监听
  • Kubernetes 中导致 pod 重启的原因
  • PrimeTime生成.lib竟暗藏PG添加Bug
  • Skynet 中 snlua 服务启动整体流程分析
  • 工作后考研
  • 【STM32】GPIO输入(按键)
  • 交换机与路由器的区别:深入解析
  • 新手村:逻辑回归-理解04:熵是什么?
  • # 线性代数:660习题总结660# 宋浩讲解视频
  • 安装docker版jira8.0.2
  • Go 语言标准库中reflect模块详细功能介绍与示例
  • 如何使用 GPT-4o API 实现视觉、文本、图像等功能 附赠gpt升级和4o额度购买
  • OPPO Pad 4 Pro图赏,轻薄大屏,多面出色
  • QT四 资源文件;绘图;绘图设备;qpixmap 和 qimage 转换;QPixmap、QBitmap、QImage和 QPicture的区别
  • Golang中间件的原理与实现
  • 使用 Selenium 构建简单高效的网页爬虫
  • Docker Compose 基础知识
  • rnn的ho的维度 (num_layers * num_directions, batchsize, hidden_size)
  • 付账问题 | 第9届蓝桥杯省赛C++A组
  • Kafka 偏移量