Ubuntu环境下使用uWSGI服务器【以flask应用部署为例】
由于从Python 3.11开始限制了在系统级 Python 环境中使用 pip 安装第三方包,以避免与系统包管理器(如 apt)产生冲突。所以开发时选择使用虚拟环境。
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模块,冒号前是文件名,冒号后是Flask应用实例的名称
module = app:app
# 主进程 PID 文件
pidfile = /home/ly/code/web_proj/config/uwsgi.pid
# 自动重载模板文件html
touch-reload = /home/ly/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
。
主进程 PID 文件
pidfile
:保存uWSGI服务的主进程PID.
通过查看该文件可快速获取主进程PID,无需手动查找。由于uWSGI服务可能产生多个PID,借助主进程PID可实现更优雅的管理,例如服务重启等操作。
自动重载配置
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个子进程,每个子进程内部有多个线程,如图:
如果需要重启,由于上面的配置文件已经设置了主进程PID文件,可以通过uwsgi --reload
命令重启,此命令会向 uWSGI 主进程发送 SIGUSR2 信号,触发优雅重启:旧进程处理完当前请求后退出,新进程启动,避免服务中断。
uwsgi --reload /home/ly/code/web_proj/uwsgi.pid

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)