前端VUE+后端uwsgi 环境搭建
1整体架构

请求流程the web clinet--the web server->the socket->uwsgi--django

- 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;
- 在nginx上加上安全性或其他的限制,可以达到保护程序的作用;
- uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡;
- django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。
2.概念
- WSGI(Web Server Gateway Interface):WSGI 是一个 Python Web 应用程序与 Web 服务器之间的接口规范,它定义了应用程序和服务器之间的标准接口,使得应用程序可以在不同的 Web 服务器上运行。WSGI 规范规定了应用程序必须实现的接口方法和服务器需要支持的方法。WSGI 协议使得不同的 Python Web 框架(例如 Flask、Django 等)能够在不同的 Web 服务器上运行,这些服务器可以是 Apache、Nginx 等。
- uWSGI:uWSGI 是一个 Web 服务器,它是一个用 C 语言编写的 Web 应用程序容器,支持运行 Python、Ruby、Perl 等多种编程语言。uWSGI 服务器可以作为一个独立的应用服务器,也可以与其他 Web 服务器(如 Nginx、Apache)一起使用,通过 WSGI 协议与 Python 应用程序通信。
- uwsgi:uwsgi 是一个与 uWSGI 服务器相关的协议。uwsgi 协议是一种二进制协议,它定义了 uWSGI 服务器与应用程序之间的通信协议。使用 uwsgi 协议,uWSGI 服务器可以与 Python 应用程序通信,而不需要像 CGI 那样启动一个新的进程来处理每个请求。uwsgi 协议允许 uWSGI 服务器与应用程序之间进行双向通信,从而提高了性能。
- 因此,uWSGI 是一个 Web 服务器,可以通过 WSGI 协议与 Python 应用程序通信,并使用 uwsgi 协议进行通信。WSGI 是 Python Web 应用程序与 Web 服务器之间的接口规范,定义了应用程序和服务器之间的标准接口。而 uwsgi 则是 uWSGI 服务器与应用程序之间的二进制通信协议。
-
到底为什么一个项目的发布要经过这么多层级,他们每一层有什么理由存在?这就带大家宏观地看待一下
首先nginx 是对外的服务接口,外部浏览器通过url访问nginx。nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件,
如果不是静态文件,而是一个动态的请求,那么nginx就将请求转发给uwsgi,uwsgi 接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi,wsgi 根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次交给wsgi,wsgi将返回值进行打包,打包成uwsgi能够接收的格式,uwsgi接收wsgi 发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
总结:要知道第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程,但是要考虑到某些情况
1.安全问题,程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在nginx上加上安全性的限制,可以达到保护程序的作用。
2.负载均衡问题,一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。
3.静态文件处理效率问题,用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接由nginx完成,静态文件的访问完全不去经过uwsgi以及其后面的东西。这就是这几者之间的关系。 -
创建虚拟机
-
python -m venv myEnv
激活
source myEnv/bin/activate
python -m pip install novas
pip install -i -r requirements.txt -
实践篇(二):uWSGI
-
1. uwsgi安装
sudo yum install python3-devel
sudo yum -y update
yum install gcc
yum -y install zlib*
yum install openssl-dev
pip3 install uwsgi
测试方式:使用uWSGI在8000端口运行Django项目
-
firewall-cmd --zone=public --add-port=8000/tcp --permanent
-
#### 安装前端依赖
cd frontend
npm install --registry=https://registry.npmmirror.com
说明:node版本尽量选择低版本,目前开发使用的为node:v16.17.0
-
前端生成静态文件
先修改配置文件src/config/index.js.
前一个地址为本地地址,后一个为线上地址

打包npm run build,打包后静态文件在 dist 目录中
复制到,后端frontend文件夹cp -r dist/* /app/webapp/myxiangmu/backend/frontend/
运行python manage.py collectstatic收集静态文件到django static目录
1.2后端
后端---修改backend\application\settings中为正式环境
DEBUG = False
上传代码到/app/webapp/myxiangmu,
在项目的根目录下,创建uwsgi.ini文件
文件内容
[uwsgi]
#启动uwsgi的用户名和用户组
#uid=root
#gid=root
master = true
processes = 8
threads =2
chdir = /app/webapp/jieneng/backend/
#wsgi-file= /app/webapp/jieneng/backend/application/
wsgi-file = /app/webapp/jieneng/backend/application/wsgi.py
http = 0.0.0.0:8000
#socket = 127.0.0.1:8000
#listen = 500
chmod-socket = 660
vacuum = true
buffer-size = 65536
max-requests = 3000
#enable-threads = true
pidfile=/app/webapp/jieneng/backend/uwsgi.pid
daemonize=/app/webapp/jieneng/backend/logs/uwsgi.log
#logto = /www/wwwroot/django-vue-lyadmin/backend/logs/error.log #(单纯日志保存位置,与daemonize二选一)
#log-maxsize = 5000000 #设置最大日志文件大小
virtualenv = /app/webapp/jienengEnv
#1.启动
cd /app/webapp/myxiangmu/backend 进入项目目录
uwsgi --ini uwsgi.ini #启动命令
#2.命令
uwsgi --ini uwsgi.ini &
uwsgi --ini uwsgi.ini --logto /dev/null
uwsgi -d --ini uwsgi.ini #守护进程启动
uwsgi --stop uwsgi.pid #停止命令
uwsgi --reload uwsgi.pid #重启命令
启动完了后,查看后端服务是否可以用http://IP:8000/api/token/
#3.停止进程
#查询进程号
ps -ef|grep uwsgi.ini
#停止
kill -9 6658(示例进程号)
#4.有错误查看路径/app/webapp/myxiangmu/backend/logs
开启8000端口
#--permanent永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=8000/tcp --permanent
#重新载入配置
firewall-cmd --reload
#查看已经开启的端口
firewall-cmd --zone=public --list-ports
查看后端服务是否可以用http://IP:8000/api/token/
相关文章:
前端VUE+后端uwsgi 环境搭建
1整体架构 请求流程the web clinet--the web server->the socket->uwsgi--django 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;在nginx上加上安全性或其他的限制,可以达到保护程序的作用;uWSGI本…...
I2C实践开发 ---【STM32-I2C-HDC1080温湿度采集系统】
I2C实践开发 — STM32-I2C-HDC1080温湿度采集系统 目录 I2C实践开发 --- STM32-I2C-HDC1080温湿度采集系统1. 引言2. 系统架构2.1 硬件架构2.2 软件架构 3. 代码分析3.1 I2C驱动文件 (i2c.h 和 i2c.c)3.2 HDC1080传感器驱动文件 (hdc1080.h 和 hdc1080.c) 4. 功能总结【HDC1080…...
【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】
文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1:多GPU微调-zero12.2.4.2 实验2:…...
浏览器报错:无法访问此网站 无法找到xxx.xxx.net的DNS地址。正在诊断该问题。尝试运行Windows网络诊断。DNS_PROBE_STARTED
🤟致敬读者 🟩感谢阅读🟦希望我的文章能帮到您🟪如有兴趣可点关注了解更多内容 📘博主信息 点击标题👆有惊喜 📃文章前言 🔷文章均为学习和工作中整理的笔记,分享记录…...
【设计模式】 代理模式(静态代理、动态代理{JDK动态代理、JDK动态代理与CGLIB动态代理的区别})
代理模式 代理模式是一种结构型设计模式,它提供了一种替代访问的方法,即通过代理对象来间接访问目标对象。代理模式可以在不改变原始类代码的情况下,增加额外的功能,如权限控制、日志记录等。 静态代理 静态代理是指创建的或特…...
网络安全-攻击流程-用户层
用户层攻击主要针对操作系统中的用户空间应用程序及用户权限,利用软件漏洞、配置错误或用户行为弱点进行攻击。以下是常见的用户层攻击类型及其流程,以及防御措施: 1. 缓冲区溢出攻击 攻击流程: 目标识别:确定存在漏…...
网络安全等级保护测评(等保测评):全面指南与准备要点
等保测评,全称为“网络安全等级保护测评”,是根据《网络安全法》及《网络安全等级保护条例》等法律法规,对信息系统进行安全等级划分,并依据不同等级的安全保护要求,采用科学方法和技术手段,全面评估信息系…...
具身导航赋能智能物流!OpenBench:智能物流最后一公里语义导航新基准
作者:Junhui Wang, Dongjie Huo, Zehui Xu, Yongliang Shi, Yimin Yan, Yuanxin Wang, Chao Gao, Yan Qiao, Guyue Zhou 单位:澳门科技大学系统工程与协作实验室、智能科学与系统联合实验室,清华大学人工智能产业研究院(AIR&…...
详解 本机安装多个MySQL服务【为后续大数据量分库分表奠定基础,以mysql8.0为例,附有图文】
本机安装多个mysql 在电脑上新建mysql8文件夹,然后在mysql8文件下新建mysql3391文件夹。然后找到自己原本mysql的安装目录,我的是E:\software\mysql\one,如图所示: 将次目录下的所有文件全选复制粘贴在mysql3391文件夹下。 然后…...
2025年新趋势:如何利用AI技术优化你的在线帮助中心
在2025年的今天,人工智能(AI)技术正以惊人的速度改变着我们的世界。从自动驾驶汽车到智能家居,从医疗诊断到金融分析,AI的身影无处不在。而在客户服务领域,AI同样正在发挥着越来越重要的作用。特别是在线帮…...
同花顺Java开发面试题及参考答案 (上)
int 类型占用几个字节?float 类型的数字如何与 0 进行比较? 在 Java 中,int 类型是一种基本数据类型,它占用 4 个字节。一个字节有 8 位,所以 int 类型总共是 32 位。这 32 位可以用来表示不同的整数值,其取…...
CommonLang3-使用介绍
摘自:https://www.cnblogs.com/haicheng92/p/18721636 学习要带着目的,参照现实问题 本次目标: 了解 CommonsLang3 API 文档,找对路后以后开发直接查询 API 文档,摈弃盲目的百度掌握基础的字符串、日期、数值等工具…...
Java常用设计模式及其应用场景
1. 什么是设计模式? 设计模式是一个经过多次验证的、针对常见问题的可复用解决方案。设计模式并不是具体的代码实现,而是给出了如何解决问题的思路和结构。在实际开发过程中,设计模式有助于开发者快速找到合适的解决方案,从而减少…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_pnalloc函数
ngx_pnalloc 声明在 src\core\ngx_palloc.h void *ngx_pnalloc(ngx_pool_t *pool, size_t size); 定义在 src\core\ngx_palloc.c void * ngx_pnalloc(ngx_pool_t *pool, size_t size) { #if !(NGX_DEBUG_PALLOC)if (size < pool->max) {return ngx_palloc_small(pool, …...
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析①】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase01 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-001测试用例 用例ID测试场景验证要点参考条款预期…...
A与B组件自动对齐与组装,无映射直接补偿。
网上针对组装的从视觉到控制动作,要不就是收费,要不就是简单介绍。这么详细的比较难找~ 手下留情,不喜勿喷! Show time~ 分步解决方案: 标定阶段(Calibration) 9点张氏标定(每个位置A1、A2、B1、B2): 使用机械手在相机视野内沿Z字形路径移动,覆盖9个点(XY方…...
QT 读写锁
一、概述 1、读写锁是一种线程同步机制,用于解决多线程环境下的读写竞争问题。 2、读写锁允许多个线程同时获取读锁(共享访问),但只允许一个线程获取写锁(独占访问)。 3、这种机制可以提高并发性能&…...
C++ 的时间库之二:Ratio
从现在开始,我们开始介绍 C 风格的时间处理,在这之前,首先要介绍std::ratio。因为 C 的 chrono库中的时间段(duration)定义离不开std::ratio,不了解std::ratio,就很难理解duration的定义。 1 st…...
使用小雅xiaoya/Emby正确的观看电影电视剧的姿势
最近有很多小伙伴来咨询关于小雅Emby全家桶的使用问题,最常见的就是在Emby上搜索出来资源之后,点击播放会提示【播放错误】,当前没有兼容的流。 这可把很多小伙伴给急坏了……于是找到小白咨询。 嗯……怎么说呢?小白并不喜欢看电…...
Java状态机
目录 1. 概念 2. 定义状态机 3. 生成一个状态机 4. 使用 1. 概念 在Java的应用开发里面,应该会有不少的人接触到一个业务场景下,一个数据的状态会发生多种变化,最经典的例子例如订单,当然还有像用户的状态变化(冻结…...
专业做庭院灯的公司
在打造温馨舒适的庭院环境中,庭院灯扮演着至关重要的角色。它不仅提供照明功能,还能为庭院增添独特的氛围和美感。市场上庭院灯公司众多,今天就为大家介绍一家专业的庭院灯公司——广东景楠照明有限公司。一、景楠照明的专业实力1. 丰富的产品…...
python markdown
# Python Markdown 那些事:一个老程序员的自用笔记 记得刚接触Python Markdown那会儿,正赶上要给项目写文档。团队里有人用Sphinx,有人用Jupyter,吵得不可开交。最后我默默掏出Python Markdown写了份技术手册,三页纸解…...
如何快速掌握ARP扫描技术:面向初学者的终极完整指南
如何快速掌握ARP扫描技术:面向初学者的终极完整指南 【免费下载链接】arp-scan The ARP Scanner 项目地址: https://gitcode.com/gh_mirrors/ar/arp-scan 你是否曾经好奇,为什么即使开启了防火墙,某些设备依然能被发现?为什…...
从p值到公平性决策:R语言中FDR校正、多组间Kolmogorov–Smirnov联合检验与LLM群体公平性阈值设定黄金公式
更多请点击: https://intelliparadigm.com 第一章:R语言在大语言模型偏见检测中的统计方法高级开发技巧 在大语言模型(LLM)部署前的伦理评估中,R语言凭借其强大的统计建模能力与可复现性,正成为偏见量化分…...
3种高效处理方案:如何优化AutoDock-Vina中金属离子电荷的技术实现
3种高效处理方案:如何优化AutoDock-Vina中金属离子电荷的技术实现 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina 在分子对接研究中,金属离子配位体系的准确处理一直是计算药物发现的…...
别再只会抓包了!BurpSuite实战:用Intruder模块5分钟搞定一个弱口令爆破
BurpSuite Intruder模块实战:5分钟高效爆破弱口令技巧 在渗透测试和安全评估中,弱口令爆破是最基础却最有效的攻击手段之一。许多安全从业者虽然熟悉BurpSuite的Proxy模块抓包,却对Intruder模块的强大功能一知半解。本文将带你深入Intruder模…...
华硕笔记本Win10飞行模式锁死?别急着重装系统,试试这个‘物理疗法’
华硕笔记本Win10飞行模式锁死?静电释放的物理修复指南 当你正准备赶一份紧急报告,却发现华硕笔记本的WiFi图标神秘消失,只剩下孤零零的飞行模式开关——这种绝望感我太熟悉了。作为经历过三次相同故障的"幸存者",我可以…...
终极指南:5分钟为Word添加APA第7版引用样式,告别格式烦恼
终极指南:5分钟为Word添加APA第7版引用样式,告别格式烦恼 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 在学术写作中…...
PHP 9.0协程+AI SDK双引擎落地指南:7步从Hello World到生产级聊天机器人(含OpenAI/本地LLM双路径)
更多请点击: https://intelliparadigm.com 第一章:PHP 9.0协程与AI聊天机器人的时代交汇 PHP 9.0 正式引入原生协程(Coroutines)支持,通过 async/await 语法与轻量级用户态调度器,彻底摆脱传统阻塞 I/O 的…...
告别CPU空转:在STM32F103上使用DMA+PWM高效驱动WS2811/2812灯带
告别CPU空转:在STM32F103上使用DMAPWM高效驱动WS2811/WS2812灯带 当你的项目需要控制上百个WS2812灯珠时,传统的GPIO延时方法会让CPU陷入无休止的空转等待。我曾在一个智能灯光项目中,因为采用原始方法驱动256颗LED,导致系统无法…...
