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

使用uwsgi部署Flask

安装

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

(Debian/Ubuntu) apt-get install uwsgi uwsgi-plugin-python3

或使用pip安装

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

终端执行:

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对象:

from application import create_app
app = create_app()
if __name__ == "__main__":app.run()

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

[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

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,但我这里是新建了个服务:

[/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

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

(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博客

http://www.lryc.cn/news/186138.html

相关文章:

  • Android平台实现lottie动画
  • JAVA练习百题之求矩阵对角线之和
  • MEM备考打卡
  • 短视频矩阵源码开发部署---技术解析
  • 百度小程序制作源码 百度引流做关键词排名之技巧
  • 【计算机组成 课程笔记】7.3 高速缓存 Cache
  • vscode搭建c/c++环境
  • macOS Sonoma 14.0(23A344) 正式版带 OpenCore 0.9.6 和 FirPE 三分区镜像
  • 神经网络(MLP多层感知器)
  • git与github的交互(文件与文件夹的上传)
  • Visual Studio常见编译错误记录
  • 如何应对数据安全四大挑战?亚马逊云科技打出“组合拳”
  • JavaScript——数据类型、类型转换
  • C位操作符
  • 【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态
  • numString.charAt(i) - ‘0‘
  • 《Python 自动化办公应用大全》书籍推荐(包邮送书五本)
  • day57:ARMday4,程序状态寄存器读写指令、软中断指令、C和汇编的混合编程、开发板介绍
  • el-cascader
  • 图论第3天----第841题、第463题
  • 软件测试/测试开发丨利用ChatGPT 生成自动化测试脚本
  • 3.3.OpenCV技能树--二值图像处理--图像形态学操作
  • 这15个海运提单的雷区 你知道吗?
  • 几道web题目
  • API接口大全分享,含短信API、IP查询API。。。
  • 记录一次springboot使用定时任务中@Async没有生效的场景
  • 腾讯云/阿里云国际站免费账号:腾讯云国际站如何对象存储cos设置防盗链
  • python编程:使用 Pillow 将照片转换为1寸报名照片
  • Aria2 for Mac (免HomeBrew)
  • 【Java】微服务——Gateway网关