首页 > 系统相关 >Flask 生产环境部署(Falsk + uWSGI + nginx)

Flask 生产环境部署(Falsk + uWSGI + nginx)

时间:2024-04-14 15:56:32浏览次数:18  
标签:__ http Flask Falsk nginx uWSGI app uwsgi

前言

最近自己做了个 Falsk 小项目,在部署上服务器的时候,发现虽然不乏相关教程,但大多都是将自己项目代码复制出来,不讲核心逻辑,不太简洁,于是将自己部署的经验写成内容分享出来。

uWSGI 简介

uWSGI: 一种实现了多种协议(包括 uwsgi、http)并能提供服务器搭建功能的 Python 包

Difference between WSGI , uWSGI and UWSGI

在 Flask 和 nginx 之间使用 uWSGI 的必要性:nginx 并不能直接与 Python 中的 WSGI 通信。WSGI 是 Python 中网络服务的标准。What is the point of uWSGI?

uWSGI 安装

pip 安装,如果失败则用 conda 安装。Error installing uwsgi in virtualenv

Flask 注意

既然看到这篇内容 Flask 程序编写肯定已经不是问题了,不过多介绍。Flask 官网中 Quickstart 的代码为

# app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

通过 flask --app hello run 启动。

要提的是代码中如果有 app.run(),要将其放在 if __name__ == "__main__": 中,即:

# app.py
if __name__ == "__main__":
    app.run()

快速上手 uWSGI

文件目录下运行:uwsgi --http 0.0.0.0:5001 -w app:app。第一个 app 是 Flask 代码文件名,第一个 app 是代码中 Flask 对象变量名,即赋值为 Flask(__name__) 的变量名。

打开浏览器访问对应端口测试

部署

部署上服务器需要添加名为 uwsgi.ini 的 uwsgi 配置文件,放在项目根目录下。

基本配置:

; uwsgi.ini
[uwsgi]
module = app:app
; http 和 socket 二选一
; socket 用的是 uwsgi 协议通信
; http = 127.0.0.1:3031
socket = 127.0.0.1:3031
daemonize = ./uwsgi/uwsgi.log ; 后台运行
pidfile = ./uwsgi/uwsgi.pid   ; 保存 pid 方便后台运行时的程序管理

并在根目录下创建 uwsgi 文件夹,就能运行最基础的服务器了。

  • 启动:uwsgi --ini uwsgi.ini
  • 关闭:uwsgi --stop ./uwsgi/uwsgi.pid
  • 配置文件更改后:uwsgi --reload ./uwsgi/uwsgi.pid

配置文件中的变量名就是命令行中参数名的全称。

还建议配置:

master = 1
processes = 4
; 上面两个参数配置并发,根据服务器性能配置
enable-threads = 1  ; 开启多线程
stats = 0.0.0.0:9191  ; 开启监控端口,以 json 格式返回当下 uwsgi 运行状态
stats-http = 1        ; 开启 http 访问监控端口

奇怪的是在本地测试时可以在浏览器直接访问 9191 端口,而在服务员上部署成功后却无法访问,但是有返回的内容,可以用 curl 获取内容。

除此之外,要监控 uwsgi 的运行状态,还可以通过 pip 安装 uwsgitop,而后在 shell 中输入 uwsgitop 就能查看监控,就像 linux 中的 top 一样。

nginx 配置

nginx 基础不多介绍,直入正题配合使用 uwsgi 时该如何配置。

location 中照如下设置:

# 如果是用 socket:
location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:3031;    # 端口号和前述配置文件一样
}
# 如果是用 http:
location / {
    proxy_pass http://127.0.0.1:3031;  # 端口号和前述配置文件一样
}

现在可以通过浏览器访问了。

标签:__,http,Flask,Falsk,nginx,uWSGI,app,uwsgi
From: https://www.cnblogs.com/liurundong/p/18134229

相关文章

  • 13、web 中间件加固-Nginx 加固
    1.隐藏版本信息避免被针对版本直接使用漏洞修改nginx.conf文件在http模块中添加信息:server_tokensoff;2.限制目录权限某些目录为运维页面,不要公开访问编辑nginx.conf文件在server标签内添加内容:location~/attachments/.*\.(php|php5)?${denyall;}locatio......
  • flask基本使用
     flask是基于python开发并且依赖jinja2模版和werkzeugWSGI服务的一个微型框架(django使用的前端是自己的DTL) 安装flaskpipinstallflask  使用例一:走的是http协议,新建一个py文件:fromflaskimportFlaskapp=Flask(__name__)@app.route('/')#配路由的,先去......
  • flask之ssti模版注入从零到入门
    前言在学习ssti模版注入的时候,发现国内文章对于都是基于python基础之上的,对于基础代码讲的较少,而对于一些从事安全的新手师傅们,可能python只停留在写脚本上,所以上手的时候可能有点难度,毕竟不是搞pythonflask开发。就本人学习ssti而言,入手有点难度,所以特写此文,对于一些不需要深......
  • nginx的反向代理upstream
    一、安装nginx查看这篇博客 https://www.cnblogs.com/zrl66/p/14118063.html二、负载均衡upstream下面就是访问www.qwe.com域名反向代理,然后请求转到upstreambackend权重配置,根据配置进行访问。http{......upstreambackend{serverwww.......
  • 安装nginx时报错解决(configure error: the HTTP gzip module requires the zlib libra
    安装nginx时报错解决下载地址nginx源码包下载地址:https://nginx.org/en/download.html安装环境Ubuntu20.04LTSnginx-1.23.4安装步骤#解压缩包tar-zxvfnginx-1.23.4.tar.gz#进入包目录cdnginx-1.23.4#生成makefile./configure就在./configure这一步出现了依......
  • nginx 5种负载均衡策略
    目录nginx5种负载均衡策略轮询(默认)指定权重ip_hashfair(第三方)url_hash(第三方)nginx5种负载均衡策略nginx的upstream目前支持的5种方式的分配轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。upstreambackserver{server192.168.0.......
  • nginx负载均衡的健康检查
    前言:我们使用nginx最常用到的功能恐怕就是负载均衡了,配置负载均衡主要是要使用upstream指令了配置如下所示:那么如果这其中有一台端口不通了,怎么办,nginx会不会自动剔除呢?我们就需要使用nginx的健康检查功能了一Nginx(自带)有健康检查模块:ngx_http_upstream_module-被动检查......
  • docker nginx监听80端口 同一 IP 多域名配置方法--多子配置文件包含 https
    下载nginx镜像文件dockerpullnginx:1.24.0宿主机上创建nginx_80目录htmlcertconflogs创建配置文件nginx.conf一、Nginx配置文件nginx.conf操作:在http模块增加(子配置文件的路径和名称):include/etc/nginx/conf.d/*.conf;usernginx;worker_processes1;err......
  • docker -nginx2
    使用docker部署nginx的负载均衡 前言:nginx做负载均衡使用权重轮训方式,1号服务器提供转发服务,2号和3号服务器实际使用。过程:创建文件夹:mkdir-pv/lnmp/nginx/nginx_proxy/{data,conf/conf.d,logs}mkdir-pv/lnmp/nginx/nginx_one/{data,conf/conf.d,logs}mkdir-pv/lnmp/n......
  • NGINX的速率限制(限流)【转】
    NGINX的速率限制(限流)NGINX最有用但经常被误解和配置错误的功能之一是限流。它允许您限制用户在给定时间段内可以发出的HTTP请求量。限流可以用于安全目的,例如减慢暴力破解密码的攻击。它可以通过限制请求速率为真实用户的典型值来帮助防御分布式拒绝服务(DDoS)攻击,并且(通过记录日......