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

0、前置内容说明

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

由于从Python 3.11开始限制了在系统级 Python 环境中使用 pip 安装第三方包,以避免与系统包管理器(如 apt)产生冲突。所以开发时选择使用虚拟环境

关于该限制及如何创建虚拟环境看这篇:使用pip3安装软件包报错externally-managed-environment的几种解决方式


1、安装uWSGI

bash 复制代码
pip3 install uwsgi

这里是使用python的包管理器pip安装uWSGI.

如果是想要使用apt全局安装,除了uWSGI还要安装对应的python插件。

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

bash 复制代码
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ uwsgi

2、配置uWSGI

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

bash 复制代码
[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指明配置文件。

bash 复制代码
uwsgi --ini uwsgi.ini

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

如果出问题了,需要知道uWSGI的运行情况,可以查看配置文件中所述的日志文件。

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

相关推荐
easyboot2 小时前
openssl创建证书解决不安全问题
运维·服务器·安全
Ven%3 小时前
掌握Bash脚本编写:从服务启动脚本到语法精要
linux·服务器·开发语言·chrome·bash
运维小贺3 小时前
华为和H3C服务器配置远控管理地址
运维·服务器·华为
zh4men94 小时前
Mac Parallels Desktop Kali 2025 代理设置
服务器·网络·macos·kali·pdesktop
风好衣轻5 小时前
【环境配置】在Ubuntu Server上安装5090 PyTorch环境
linux·pytorch·ubuntu
ldinvicible6 小时前
基于ARM ubuntu如何进行交叉编译
arm开发·数据库·ubuntu
小妖6666 小时前
ubuntu 22.04 更换阿里源 (wsl2 参照)
linux·运维·ubuntu
egoist20237 小时前
【Linux仓库】进程概念与基本操作【进程·贰】
linux·运维·服务器·指令·进程操作·理解进程
网小鱼的学习笔记8 小时前
轻量级web开发框架之Flask web开发框架学习:get请求数据的发送
前端·学习·flask
YuTaoShao9 小时前
Java八股文——操作系统「网络 I/O 篇」
java·服务器·网络·面试·操作系统·八股文