做效果图展板网站,南京seo外包,外贸找客户有什么网站,柴油发电机组网站建设价格1整体架构 请求流程the web clinet--the web server-the socket-uwsgi--django 第一级的nginx并不是必须的#xff0c;uwsgi完全可以完成整个的和浏览器交互的流程#xff1b;在nginx上加上安全性或其他的限制#xff0c;可以达到保护程序的作用#xff1b;uWSGI本…1整体架构 请求流程the web clinet--the web server-the socket-uwsgi--django 第一级的nginx并不是必须的uwsgi完全可以完成整个的和浏览器交互的流程在nginx上加上安全性或其他的限制可以达到保护程序的作用uWSGI本身是内网接口开启多个work和processes可能也不够用而nginx可以代理多台uWSGI完成uWSGI的负载均衡django在debugFalse下对静态文件的处理能力不是很好而用nginx来处理更加高效。
2.概念
WSGIWeb Server Gateway InterfaceWSGI 是一个 Python Web 应用程序与 Web 服务器之间的接口规范它定义了应用程序和服务器之间的标准接口使得应用程序可以在不同的 Web 服务器上运行。WSGI 规范规定了应用程序必须实现的接口方法和服务器需要支持的方法。WSGI 协议使得不同的 Python Web 框架例如 Flask、Django 等能够在不同的 Web 服务器上运行这些服务器可以是 Apache、Nginx 等。uWSGIuWSGI 是一个 Web 服务器它是一个用 C 语言编写的 Web 应用程序容器支持运行 Python、Ruby、Perl 等多种编程语言。uWSGI 服务器可以作为一个独立的应用服务器也可以与其他 Web 服务器如 Nginx、Apache一起使用通过 WSGI 协议与 Python 应用程序通信。uwsgiuwsgi 是一个与 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 --zonepublic --add-port8000/tcp --permanent #### 安装前端依赖 cd frontend npm install --registryhttps://registry.npmmirror.com 说明node版本尽量选择低版本目前开发使用的为nodev16.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的用户名和用户组 #uidroot #gidroot 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 --zonepublic --add-port8000/tcp --permanent #重新载入配置 firewall-cmd --reload #查看已经开启的端口 firewall-cmd --zonepublic --list-ports 查看后端服务是否可以用http://IP:8000/api/token/