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

uwsgi 启动 django 服务

使用uWSGI来启动Django服务是一个常见的部署选择。以下是基本步骤,帮助你完成这个过程:

1. 安装uWSGI

首先确保你的环境中已经安装了uWSGI。你可以通过pip来安装它:

pip install uwsgi

注意:在某些系统上,可能需要通过系统的包管理器来安装uWSGI(比如在Ubuntu上使用apt-get),或者根据你的Python版本和环境需求构建uWSGI。

2. 配置Django项目

确保你的Django项目配置正确,并且可以在开发服务器上正常运行。特别地,确认你的settings.py文件中ALLOWED_HOSTS设置包含了将要部署的服务的域名或IP地址。

3. 创建uWSGI配置文件

为你的Django项目创建一个uWSGI配置文件。这可以是一个.ini文件、XML文件等,但最常见的是使用.ini格式。下面是一个简单的例子,假设你的项目名为myproject,并且wsgi.py位于项目的根目录下:

[uwsgi]
chdir = /path/to/your/myproject/
module = myproject.wsgi:applicationmaster = true
processes = 5socket = myproject.sock
chmod-socket = 660
vacuum = truedie-on-term = true

这里:

  • chdir指向你的Django项目目录。
  • module指定Django的WSGI入口点。
  • processes定义了工作进程的数量。
  • socket指定了uWSGI将使用的Unix套接字文件名(对于网络套接字,可以使用http=socket=参数并提供:端口号)。
  • chmod-socket设置生成的套接字文件权限。
  • vacuum在服务停止时自动清除套接字文件。

4. 使用uWSGI启动Django服务

有了上述配置文件后,你可以使用以下命令来启动uWSGI服务器:

uwsgi --ini myproject_uwsgi.ini

这里的myproject_uwsgi.ini应替换为你实际的uWSGI配置文件名。

5. 配合Nginx或其他Web服务器使用

通常情况下,你会希望使用Nginx或者其他Web服务器作为前端代理静态文件并转发请求到uWSGI应用服务器。为此,你需要在Nginx配置中添加相应的location块来处理Django应用的请求,并指向正确的uWSGI socket。

以上是基本的指导步骤。根据具体的生产环境和需求,你可能还需要调整更多的uWSGI和Nginx配置选项。

看一个实例:
构建一个 uwsgi.ini 文件:

[uwsgi]
http = :8000
chdir = /home/ymk/ymk_django_test/django_rq_model_test
module = django_rq_model_test.wsgiqueue=30
buffer-size = 65536master = true
processes = 4
threads = 2
pidfile = /tmp/uwsgi.pid
log-maxsize = 50000000
py-call-uwsgi-fork-hooks = true
max-fd = 65535

注意,该文件必须和 manage.py 在同级目录。

让我们逐行解析这个配置文件:

[uwsgi]

这是配置文件的开始部分,表示以下的所有配置项都是针对 uWSGI 的。

http = :8088

这行配置指定了 uWSGI 监听的 HTTP 端口为 8088。这意味着你的应用程序可以通过 http://localhost:8088 访问。

chdir = /label-studio/label_studio

这行配置指定了 uWSGI 在启动时切换到的工作目录。在这个例子中,工作目录被设置为 /label-studio/label_studio。确保你的 Django 项目位于这个目录下,或者根据实际情况调整路径。

module = django_rq_model_test.wsgi

这行配置指定了 Django 项目的 WSGI 入口点。在 Django 中,通常会在项目的根目录下有一个 wsgi.py 文件,它定义了如何将请求传递给 Django 应用程序。这里的 django_rq_model_test.wsgi 表示 uWSGI 将加载 django_rq_model_test应用中的 wsgi.py 文件作为入口点。简单的来说, module 参数,就是用来告诉 uWSGI ,wsgi.py 文件的位置在哪。 

queue=30

这行配置设置了请求队列的最大长度为 30。当 uWSGI 接收到的请求超过当前处理能力时,这些请求会被放入队列等待处理。如果队列已满,新的请求将被拒绝。

buffer-size = 65536

这行配置设置了缓冲区大小为 65536 字节(64KB)。缓冲区用于存储从客户端接收到的数据和发送到客户端的数据。

master = true

这行配置启用了主进程模式。在主进程模式下,uWSGI 会创建一个主进程来管理其他工作进程。主进程负责监控工作进程的状态,并在工作进程崩溃时重新启动它们。

processes = 4

这行配置指定了 uWSGI 创建的工作进程数量为 4。每个工作进程都可以独立地处理请求,从而提高应用程序的并发处理能力。

threads = 2

这行配置指定了每个工作进程中创建的线程数量为 2。多线程可以进一步提高应用程序的并发处理能力,特别是在处理 I/O 密集型任务时。

pidfile = /tmp/uwsgi.pid

这行配置指定了 uWSGI 进程 ID 文件的路径为 /tmp/uwsgi.pid。进程 ID 文件包含了 uWSGI 主进程的 PID,可以用于管理和控制 uWSGI 服务。

log-maxsize = 500000000

这行配置设置了日志文件的最大大小为 500MB。当日志文件达到这个大小时,uWSGI 会自动进行日志轮转,以防止日志文件无限增长。

py-call-uwsgi-fork-hooks = true

这行配置启用了 Python 的 fork 钩子。在某些情况下,Python 的垃圾回收器可能会导致问题,启用这个选项可以帮助解决这些问题。

daemonize = /label-studio/logs/uwsgi.log

这行配置指定了 uWSGI 以守护进程模式运行,并将日志输出到指定的日志文件 /label-studio/logs/uwsgi.log

max-fd = 65535

这行配置设置了 uWSGI 可以打开的最大文件描述符数量为 65535。文件描述符用于表示打开的文件、套接字等资源。


总结

这个 uwsgi.ini 文件配置了一个高性能的 uWSGI 服务器,用于部署 Django 应用程序。通过合理的配置,它可以有效地处理高并发请求,并提供稳定的性能。在实际使用中,你可能需要根据具体的应用场景和系统资源对这些配置进行调整。

然后,就可以启动服务了:

(myvenv) ymk@ubuntu:~/ymk_django_test/django_rq_model_test$ myvenv/bin/uwsgi uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
*** Starting uWSGI 2.0.30 (64bit) on [Thu Aug  7 00:52:32 2025] ***
compiled with version: 9.4.0 on 07 August 2025 06:54:25
os: Linux-5.15.0-139-generic #149~20.04.1-Ubuntu SMP Wed Apr 16 08:29:56 UTC 2025
nodename: ubuntu
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 2
current working directory: /home/ymk/ymk_django_test/django_rq_model_test
writing pidfile to /tmp/uwsgi.pid
detected binary path: /home/ymk/ymk_django_test/django_rq_model_test/myvenv/bin/uwsgi
chdir() to /home/ymk/ymk_django_test/django_rq_model_test
your processes number limit is 15115
your memory page size is 4096 bytes
detected max file descriptor number: 65535
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
*** Queue subsystem initialized: 0MB preallocated ***
uWSGI http bound on :8000 fd 7
uwsgi socket 0 bound to TCP address 127.0.0.1:32859 (port auto-assigned) fd 6
Python version: 3.8.10 (default, Dec  6 2024, 01:19:56)  [GCC 9.4.0]
Python main interpreter initialized at 0x55e10d2ef800
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 1031270 bytes (1007 KB) for 8 cores
*** Operational MODE: preforking+threaded ***
INFO ✅ uWSGI detected. uwsgi.worker_id() = 0
INFO SCHEDULER_JOBS add success
INFO ✅ APScheduler started in uWSGI worker 0 (worker_id=0)
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x55e10d2ef800 pid: 17109 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 17109)
spawned uWSGI worker 1 (pid: 17112, cores: 2)
spawned uWSGI worker 2 (pid: 17113, cores: 2)
spawned uWSGI worker 3 (pid: 17115, cores: 2)
spawned uWSGI worker 4 (pid: 17116, cores: 2)
spawned uWSGI http 1 (pid: 17118)

注意,因为我是用的  pip install --no-cache-dir uwsgi  来下载的 uwsgi ,因此这里的 uwsgi 文件的位置就是在虚拟环境的 bin 目录,如果用 apt 下载,那么他的位置就在 /bin ,这也导致了他的调用方式,略有不同。

http://www.dtcms.com/a/319532.html

相关文章:

  • Next.js 15 重磅发布:React 19 集成 + 性能革命,开发者必看新特性指南
  • CentOS 7 安装 Anaconda
  • 秋招笔记-8.7
  • Redis的三种特殊类型
  • 硬盘哨兵pe版本 v25.70.6 中文免费版
  • 【R语言】 高清美观的 MaxEnt 刀切图(Jackknife)绘制——提升论文质量
  • 基于Qt的Live2D模型显示以及控制
  • DAY33打卡
  • 【Unity输入系统】自定义与双击不冲突的单击Interaction
  • 【第八章】函数进阶宝典:参数、返回值与作用域全解析
  • RedisBloom使用
  • 任务进度状态同步 万能版 参考 工厂+策略+观察者设计模式 +锁设计 springboot+redission
  • itextPdf获取pdf文件宽高不准确
  • 设计模式-装饰模式 Java
  • 客户端利用MinIO对服务器数据进行同步
  • VN1 供应链销量预测建模竞赛技巧总结与分享(七)
  • 四边形面积
  • 极简 5 步:Ubuntu+RTX4090 源码编译 vLLM
  • JavaWeb03——基础标签及样式(表单)(黑马视频笔记)
  • 八、基于GD32 Embedded Builder开发GD32VW553(蓝牙广播)
  • 复杂光照场景漏检率↓76%!陌讯多模态融合算法在打电话识别的边缘部署优化
  • 使用Puppeteer轻松自动化浏览器操作
  • PYLON交叉编译:Ubuntu是x86,编译出arm64上运行的程序
  • 无人机航拍数据集|第8期 无人机海上目标检测YOLO数据集3641张yolov11/yolov8/yolov5可训练
  • 下载 | Windows Server 2016最新原版ISO映像!(集成7月更新、标准版、数据中心版、14393.8246)
  • 基于 C 语言的多态机制的驱动架构
  • 十八、k8s细粒度流量管理:服务网格
  • UiPath Studio介绍
  • CS231n2017 Assignment3 RNN、LSTM部分
  • 仁懋高压MOSFET在新能源汽车充电领域的应用