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

Ubuntu环境下使用uWSGI服务器【以flask应用部署为例】

0、前置内容说明

首先要知道WSGI是什么,关于WSGI服务器的介绍看这篇:WSGI(Web Server Gateway Interface)服务器

由于从Python 3.11开始限制了在系统级 Python 环境中使用 pip 安装第三方包,以避免与系统包管理器(如 apt)产生冲突。所以开发时选择使用虚拟环境
关于该限制及如何创建虚拟环境看这篇:使用pip3安装软件包报错externally-managed-environment的几种解决方式


1、安装uWSGI

pip3 install uwsgi

这里是使用python的包管理器pip安装uWSGI.
如果是想要使用apt全局安装,除了uWSGI还要安装对应的python插件。

如果遇到网络不好,可以在安装的时候使用 国内 PyPI 镜像源:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ uwsgi

2、配置uWSGI

创建配置文件,比如uwsgi.ini,参考示例如下。实际使用要调整自己项目的目录、实例名、监听地址、日志存放路径等。

[uwsgi]
# Flask项目的目录
chdir = /root/code/web_proj
# Flask应用的WSGI模块,这里app是Flask应用实例的名称
module = app:app
# 自动更新模板文件
touch-reload = /root/code/web_proj/templates/
# 监听的socket地址
socket = 127.0.0.1:8001# 开启主进程模式
master = true
# 工作进程数量
processes = 4
# 线程数量
threads = 2# 当uWSGI停止时清理临时文件
vacuum = true
# 后台运行,指定日志文件(需确保目录存在且有写入权限)
daemonize = /root/code/web_proj/log/myapp.log 

uwsgi.ini配置分以下几个部分:

应用相关配置

  • chdir:指定 Flask 项目的根目录,即 /root/code/web_proj。当 uWSGI 启动时,会将工作目录切换到该目录下,确保能正确找到项目中的文件和模块。
  • module:指定 Flask 应用的 WSGI 模块,格式为 模块名:应用实例名。这里 app:app 表示在 app.py 文件中定义的 Flask 应用实例 app

自动重载配置

  • touch - reload:设置了一个目录 /root/code/web_proj/templates/。当该目录下的文件有修改时,uWSGI 会自动重新加载应用,这样可以及时看到模板文件修改后的效果。

网络监听配置

  • socket:指定 uWSGI 监听的地址和端口,这里是 127.0.0.1:8001,表示监听本地回环地址的 8001 端口,其他进程或应用可以通过这个地址和端口与 uWSGI 进行通信。

进程和线程配置

  • master:设置为 true 表示开启主进程模式。
    主进程负责管理和监控子进程,当子进程出现异常时,主进程可以进行相应的处理,提高应用的稳定性。
  • processes:设置工作进程的数量为 4。
    多个工作进程可以同时处理不同的请求,提高应用的并发处理能力。
  • threads:每个工作进程中的线程数量设置为 2。
    线程可以在进程内部并发执行,进一步提高处理请求的效率。

清理和日志配置

  • vacuum:设置为 true 表示当 uWSGI 停止时,会自动清理临时文件,避免临时文件占用磁盘空间。
  • daemonize:指定 uWSGI 以守护进程的方式在后台运行,并将日志输出到 /root/code/web_proj/log/myapp.log 文件中。使用守护进程模式可以让 uWSGI 在后台持续运行,不影响终端的使用。同时,需要确保指定的日志目录存在且 uWSGI 有写入权限,否则可能会出现日志记录失败的问题。

3、启动uWSGI

启动uWSGI,使用--ini指明配置文件。

uwsgi --ini uwsgi.ini

如果一切配置正确,uWSGI 服务器将在后台启动,并监听指定的地址和端口。

如果出问题了,需要知道uWSGI的运行情况,可以查看配置文件中所述的日志文件。
在这里插入图片描述

还可以简单地使用ps来查看下进程状态,按照上面的配置,有1个主进程,4个子进程,每个子进程内部有多个线程,如图:
在这里插入图片描述

http://www.xdnf.cn/news/3852.html

相关文章:

  • 【2025软考高级架构师】——知识脑图总结
  • Spring AI聊天模型API:轻松构建智能聊天交互
  • 软考-软件设计师中级备考 12、软件工程
  • nginx 正反向代理和nginx正则
  • 数据分析之药物-基因-代谢物
  • RAGFlow 接入企业微信应用实现原理剖析与最佳实践
  • IP 协议
  • 性能优化实践:内存优化技巧
  • iview 老版本合并单元格
  • 基于Hive + Spark离线数仓大数据实战项目(视频+课件+代码+资料+笔记)
  • Linux环境部署iview-admin项目
  • gitblit安装教程,搭建一个属于自己的Git版本仓库
  • Python读取comsol仿真导出数据并绘图
  • 【操作系统】哲学家进餐问题
  • 【前缀和】和为 K 的连续子数组
  • 软件检测价格受多种因素影响,你了解多少?
  • 【SAP】FISL的应用
  • 2023华为od机试C卷【跳格子3】
  • 高维亚空间超频物质变压缩技术 第27次CCF-CSP计算机软件能力认证
  • 《应用开发突围指南:敏捷开发的实战精髓》
  • 2001-2021年各城市平均风速数据(可作工具变量)
  • INP指标
  • 【C++贪心 图论】P7903兜心の顶|普及
  • 【算法刷题笔记day one】滑动窗口(定长基础版)
  • Java 反序列化
  • Mybatisplus:一些常用功能
  • ReentrantLock
  • C语言-回调函数
  • 大客户销售大客户营销50个常见概念及其英文表达。AI大客户销售B2B大客户营销关键概念集合
  • 全参数解读Qwen 3 系列模型 + 本地部署实操 + 多维度能力深度测评