uWSGI,LNMP架构介绍、工作流程、访问流程,LNMP搭建,uwsgi服务部署,Django项目部署
2022/1/6 6:03:44
本文主要是介绍uWSGI,LNMP架构介绍、工作流程、访问流程,LNMP搭建,uwsgi服务部署,Django项目部署,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
uWSGI
-
此次LNMP架构采用 Linux + Nginx + MySQL + Python,在学习之前我们需要先了解下uWSGI的知识。
-
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi协议 和 http 服务协议
WebApp采用 Python 的web框架 Django 开发 因为Nginx不支持WSGI协议,无法直接调用 Python 开发的WebApp。所以需要借助uWSGI, 在 Nginx + uWSGI + Django 的框架里,nginx代理+WebServer,uWSGI是WSGI server, Django是webApp。Nginx接收用户请求,并判定哪些转发到uWSGI,uWSGI再去调用pyWebApp。 由于apache、nginx等,它们自己都没有解析动态语言如php的功能,而是分派给其他模块来做,比如apache就 可以说是内置模块,让人感觉apache就支持php一样
-
这里一定要注意 WSGI , uwsgi , uWSGI 这三个概念的区分:
-
WSGI: 是一种接口标准协议/规范,实现了python web程序与web服务器之间交互的通用性。利用它django等python web开发框架就可以部署不同的web server上了,目的是制定标准,以保证不同Web服务器可以和不同的Python程序之间相互通信
-
uwsgi: 是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
-
uWSGI:是基于自有uwsgi协议、WSGI协议和http服务协议的web网关或服务器。负责响应 python 的web请求。
参考文档
-
-
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。uwsgi是一种线路协议而不是通信协议,在此常用于在uwsgi服务器与其他网络服务器的数据通信。uwsgi协议是一个uwsgi服务器自有的协议,它用于定义传输信息的类型。
-
uwsgi实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uwsgi代码完全
用C编写,效率高、性能稳定。
LNMP架构
-
LNMP是一套技术的组合,L=Linux、N=Nginx、M=MySQL、P=Python
-
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。
-
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
-
Mysql是一个小型关系型数据库管理系统。
-
Python-Django是一个开源的web应用框架。采用了MVC的软件设计模式,即模型M,视图V和控制器C。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
-
LNMP工作流程
-
首先Nginx服务是不能处理动态请求,那么当用户发起动态请求时, Nginx又是如何进行处理的。
- 1.静态请求:请求的内容是静态文件就是静态请求
- 1)静态文件:文件上传到服务器,永远不会改变的文件就是静态文件
- 2)html 就是一个标准的静态文件
- 2.动态请求:请求的内容是动态的就是动态请求
- 1)不是真实存在服务器上的内容,是通过数据库或者其他服务拼凑成的数据
- 1.静态请求:请求的内容是静态文件就是静态请求
-
当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过uwsgi协议转交给后端的Python程序处理
LNMP访问流程
1、客户端(PC)向web服务器发起http请求服务资源 2、nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,如果是静态文件 请求则根据nginx配置的静态文件目录,并返回请求的资源给客户端,不是则通过nginx就通过配置文件, 将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给WSGI,WSGI协议将请求丢给web框架 (django)代码处理 3、看web框架是否启动django中间件,如果启用,则依据中间件对请求进行修改,如果不启用,则进入下一步 4、web框架中的路由程序将根据请求中的url文件名将请求路由至相应py文件 5、相应py文件收到请求后根据用户提交的参数进行计算(期间可能会调用数据库),然后返回计算后的结果和自 定义头部信息以及状态码返回 6、web框架将返回的数据打上通用标识符(头部信息)后返回给WSGI 7、WSGI将返回数据进行打包,转发给uWSGI,uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(PC)。 8、客户端收到返回的数据
LNMP搭建
uwsgi服务部署
1、创建用户 [root@web01 ~]# cd /opt [root@web01 opt]# groupadd django -g 888 [root@web01 opt]# useradd django -u 888 -g 888 -r -M -s /bin/sh 2、安装python依赖软件 [root@web01 opt]# yum install python3 libxml* python-devel gcc* pcre-devel openssl-devel python3-devel -y 3、安装Django和uwsgi [root@web01 opt]# pip3 install django [root@web01 opt]# pip3 install uwsgi 4、创建项目:linux [root@web01 opt]# django-admin startproject linux # 创建app [root@web01 opt]# cd linux [root@web01 linux]# django-admin startapp app01 # 修改配置文件 [root@web01 linux]# vim linux/settings.py ALLOWED_HOSTS = ['*'] #允许所有IP都可以访问 DATABASES = {} # 将数据库配置置空 # 启动测试 [root@web01 linux]# python3 manage.py runserver 0.0.0.0:8000 5、编辑项目配置文件 [root@web01 linux]# vim /opt/linux/myweb_uwsgi.ini [uwsgi] # 端口号 socket = :8000 # 指定项目的目录 chdir = /opt/linux # wsgi文件路径 wsgi-file = linux/wsgi.py # 模块wsgi路径 module = linux.wsgi # 是否开启master进程 master = true # 工作进程的最大数目 processes = 4 # 结束后是否清理文件 vacuum = true 6、后台启动uwsgi(不建议用root运行,所以指定给其他用户) [root@web01 linux]# uwsgi -d --ini myweb_uwsgi.ini --uid 666 -d : 以守护进程方式运行 --ini : 指定配置文件路径 --uid : 指定uid # 用该方式查看uwsgi是否在后台运行 [root@web01 linux]# ps -ef | grep uwsgi # 此时的 uwsgi 是一个TCP服务,包含http,但是http不包含TCP服务 # 需要用nginx 将uwsgi服务转换成http服务来实现通信 7、编辑Nginx配置文件 [root@web01 linux]# cat /etc/nginx/conf.d/python.conf server { listen 80; server_name py.test.com; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8000; uwsgi_read_timeout 2; uwsgi_param UWSGI_SCRIPT linux.wsgi; uwsgi_param UWSGI_CHDIR /opt/linux; index index.html index.htm; client_max_body_size 35m; } } 8、重启Nginx配置 [root@web01 linux]# systemctl restart nginx
BBS项目部署
部署数据库
1、安装数据库 [root@db01 ~]# yum install mariadb* -y 2、启动数据库 [root@db01 ~]# systemctl start mariadb 3、远程连接MySQL数据 # 数据库添加用户语句:创建用户,授权(全部数据库权限) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) # 刷新权限 MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) # 创建数据库 bbs ,将该库的默认编码格式设置为utf8格式,数据库校对规则 MariaDB [(none)]> CREATE DATABASE `bbs` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; Query OK, 1 row affected (0.00 sec) # 数据库校对规则,utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。 # utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。 # utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。
部署BBS
1、上传代码 [root@db01 ~]# unzip bbs.zip # 将解压后的项目移动到opt目录 [root@db01 ~]# mv bbs /opt/ 2、数据库迁移 [root@db01 ~]# cd /opt/bbs/app01/migrations [root@web01 migrations]# pwd /opt/bbs/app01/migrations # 删除数据库迁移配置 [root@web01 migrations]# rm -rf 00* # 删除数据库缓存 [root@web01 migrations]# rm -rf __pycache__/ [root@web01 migrations]# cd /opt/bbs/ [root@web01 bbs]# pwd /opt/bbs # 根据报错信息判断是否修改Django版本 [root@web01 bbs]# pip3 uninstall django [root@web01 bbs]# pip3 install django==1.11 # 安装MySQL数据库插件 [root@web01 bbs]# pip3 install pymysql # 安装项目所需要的模块和依赖 # 修改数据连接 [root@web01 bbs]# vim bbs/settings.py ALLOWED_HOSTS = ['*'] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'bbs', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '172.16.1.61', 'PORT': 3306, 'CHARSET': 'utf8' } } # 创建数据库迁移文件 [root@web01 bbs]# python3 manage.py makemigrations # 数据库迁移 [root@web01 bbs]# python3 manage.py migrate 3、配置并启动uwsgi [root@web01 bbs]# vim /opt/bbs/myweb_uwsgi.ini [root@web01 bbs]# cat /opt/bbs/myweb_uwsgi.ini [uwsgi] # 端口号 socket = :8002 # 指定项目的目录 chdir = /opt/bbs # wsgi文件路径 wsgi-file = bbs/wsgi.py # 模块wsgi路径 module = bbs.wsgi # 是否开启master进程 master = true # 工作进程的最大数目 processes = 4 # 结束后是否清理文件 vacuum = true # 启动uwsgi [root@web01 bbs]# uwsgi -d --ini myweb_uwsgi.ini --uid 666 4、配置Nginx [root@web01 bbs]# cat /etc/nginx/conf.d/python.conf server { listen 80; server_name bbs.test.com; location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8002; uwsgi_read_timeout 2; uwsgi_param UWSGI_SCRIPT bbs.wsgi; uwsgi_param UWSGI_CHDIR /opt/bbs; index index.html index.htm; client_max_body_size 35m; } } [root@web01 bbs]# systemctl restart nginx #重启nginx 5、测试访问BBS 浏览器输入 bbs.test.com
这篇关于uWSGI,LNMP架构介绍、工作流程、访问流程,LNMP搭建,uwsgi服务部署,Django项目部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站