使用uwsgi部署Flask

安装

这里直接使用包管理器提供的版本,不过建议大家使用pip来安装,会少一些坑:

复制代码
(Debian/Ubuntu) apt-get install uwsgi uwsgi-plugin-python3

或使用pip安装

python 复制代码
pip3 install uwsgi
试试看
python 复制代码
[demo.py]
from flask import Flask
​
app = Flask(__name__)
​
@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

终端执行:

python 复制代码
uwsgi --http-socket 0.0.0.0:8088 --manage-script-name --mount /=demo:app --plugin python3
(如果你是通过pip安装的,可不加 --plugin python3)
uwsgi --http-socket 0.0.0.0:8088 --manage-script-name --mount /[path]=demo:app --plugin python3

访问:

复制代码
http://localhost:8088/[path]

部署

通常情况下我们的应用是按照工厂模式所编写的,使用我们需要新建一个文件来暴露出app对象:

python 复制代码
from application import create_app
app = create_app()
if __name__ == "__main__":
    app.run()

下面来编写一个配置文件,便于配置修改:

python 复制代码
[config.ini]
​
[uwsgi]
# 使用http协议
# http = 0.0.0.0:8081
# 指定工作用户(组)
uid = www-data
gid = www-data
# 主进程,由本进程派生子进程
master = true
# 工作目录
chdir = /var/application
# 插件(使用pip安装的可省略)
plugins = python3
# 入口文件
wsgi-file = app.py
# 指定入口文件的Flask对象
callable = app
# 指定uwsgi的socket路径
socket = /tmp/application.sock
# 进程数
processes = 2
# 线程数
threads = 4
# 缓冲区大小
buffer-size = 32768

配置Nginx

python 复制代码
server {
    listen 80 default_server;
    listen [::]:80 default_server;
​
    root /var/www/html;
​
    index index.html index.htm index.nginx-debian.html;
​
    server_name _;
​
    # location = /[path] { rewrite ^ /[path]/; }
    location / { try_files $uri @uwsgi; }
    location @uwsgi {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/application.sock;
    }
}

uwsgi后台运行,你可以直接在命令后加-d,但我这里是新建了个服务:

python 复制代码
[/etc/systemd/system/uwsgi.service]
​
[Unit]
Description=uwsgi application
​
[Service]
User=www-data
Group=www-data
Type=simple
WorkingDirectory=/var/application
ExecStart=/usr/bin/uwsgi /var/application/config.ini
​
[Install]
WantedBy=multi-user.target

接下来就是设置开机启动了:

python 复制代码
(sudo) systemctl enable uwsgi
(启动)
(sudo) systemctl start uwsgi

常见问题

  1. Nginx报5XX错误 检查你的uwsgi的运行用户,务必保证你创建的socketNginx有权限读写的。

  2. uwsgino app loaded. going in full dynamic mode 这个用pip安装的不会出现,需要添加python3插件

获取请求用户IP地址 addr

参考资料

Python的Flask项目中获取请求用户IP地址 addr_flask请求地址-CSDN博客

相关推荐
John_ToDebug6 小时前
判断力无法被 AI 替代,但它正在被你亲手扔掉
经验分享·笔记
柳鲲鹏7 小时前
运气学概论:提纲草案
笔记
疯狂打码的少年10 小时前
【计算机网络】子网掩码与子网划分计算(含CIDR表示法)
服务器·笔记·计算机网络·php
自小吃多11 小时前
PCB Editor软件复制、改变、删除操作笔记
笔记·嵌入式硬件
动词ing13 小时前
【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
数据结构·笔记·学习
彧azz13 小时前
Git 入门实操实例:从安装到远程仓库全流程
大数据·笔记·git·学习·elasticsearch
David猪大卫15 小时前
【C++修炼】哈希表的实现
数据结构·c++·笔记·学习·算法·哈希算法·散列表
江湖人称菠萝包15 小时前
【Windows】《深入浅出Windows API程序设计:核心编程篇》笔记-Chapter6-动态链接库
windows·笔记
宵时待雨16 小时前
linux笔记归纳18:传输层协议TCP
linux·网络·笔记·网络协议·tcp/ip
逆境不可逃16 小时前
Pi Agent 学习笔记:一次提问背后的工具调用循环
java·笔记·学习