【转载】将Django项目部署到服务器 - 寂寞圣贤 - 博客园


本站和网页 https://www.cnblogs.com/saxum/p/15696954.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

【转载】将Django项目部署到服务器 - 寂寞圣贤 - 博客园
首页
新闻
博问
专区
闪存
班级
我的博客
我的园子
账号设置
简洁模式 ...
退出登录
注册
登录
寂寞圣贤
博客园
首页
新随笔
联系
订阅
管理
【转载】将Django项目部署到服务器
一、概述
在本地搭建好了个人博客之后,接着需要将其部署到服务器上面。在此之前,我们需要做一些准备工作。
1.1 准备工具
部署网站到服务器之前,我们需要拥有一个云主机与域名,这两者都需要购买。目前已经拥有。
1.2 相关基础概念
在部署网站到服务器上面的过程中,涉及到一些新的东西,要理解其作用。参考文章《web建站过程中流程》。现在基本知道了部署网站所需要的各项东西,这个个人博客的架构是Linux + Nginx+MySQL+Python,Framework是Django。
二、流程图解
流程图
具体流程:
当客户端访问服务器的时候,其实是浏览器和服务器上的 Web Server(Web服务)产生了一个HTTP协议的通信。上图Python编写的源代码是运行在Python运行环境中的,并且是封装子Python的虚拟环境venv中。
接下来用到了uWSGI模块,这是属于Python的模块,(此模块在Win上运行错误,在Linux上运行良好)。uWSGI一方面通过WSGI与Python代码进行通信,另一方面通过socket(套接字)与Nginx通信。
三、WSGI
3.1 WSGI 是什么?
WSGI 的全称是Web Server Gateway Interface ,翻译过来就是Web服务器网关接口。具体来说,
WSGI是一个规范,定义了Web服务器如何与Python程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。
3.2 为什么需要WSGI这个规范?
在Web部署的方案上,有一个方案是目前应用最广泛的:
首先,部署一个Web服务器专门用来处理HTTP协议层面相关的事情,比如如何在一个物理机上提供多个不同的Web服务(单IP多域名,单IP多端口等)这种事情。
然后,部署一个用各种语言编写(Java,PHP,Python,Ruby)的应用程序,这个应用程序会从Web服务器上接收客户端的请求,处理完成后,再返回响应给Web服务器,最后由Web服务器返回给客户端。
那么,要采用这种方案,Web服务器和应用程序之间就要知道如何进行交互。为了定义Web服务器和应用程序之间的交互过程,就形成了很多不同的规范。如Java专用的Servlet规范,还有Python专用的WSGI规范等。提出这些规范的目的就是1为了定义统一的标准,提升程序的可移植性。
3.3 WSGI 是怎么工作的
WSGI 相当于是Web服务器和Python应用程序之间的桥梁。其存在的目的有两个:
1、让Web服务器知道如何调用Python应用程序,并且把用户的请求告诉应用程序。
2、让Python应用程序知道用户的具体请求是什么,以及如何返回结果给Web服务器。
3.4 WSGI中的角色
在WSGI中定义了两个角色,Web服务器端称为server或者gateway,应用程序端称为application或者framework(因为WSGI的应用程序端的规范一半都是由具体的框架来实现的)。
WSGI中的角色
3.5 server 如何调用application
首先,每个application的入口只有一个,也就是所有的客户端请求都同一个入口进入到应用程序。
接下来,server端需要知道去哪里找application的入口。这个需要在server端指定一个Python模块,也就是Python应用中的一个文件,并且这个模块中需要包含一个名称为application的可调用对象(函数和类都可以),这个application对象就是这个应用程序额唯一入口。
3.6、WSGI 中间件
WSGI Middleware(中间件)也是WSGI规范的一部分。现在已经知道了WSGI中的两个角色:server与application。那么middleware就是一种运行在server和application中间的应用(一般都是Python应用)。middleware同时具备server和application角色,对于server来说,他是一个application,而对于application来说,他是一个server。middleware并不修改server端和application端的规范,只是同时实现了这两个角色的功能而已。
WSGI的中间件
middleware工作流程如下:
1、Server收到客户端的HTTP请求后,生成了 environ_s,并且已经定义了 start_response_s。
2、Server调用Middleware的application对象,传递的参数是 environ_s 和 start——response_s。
3、Middleware 回根据 environ 执行业务逻辑,生成 environ_m,并且已经定义了 start_response_m。
4、Middleware 决定调用Application的application对象,传递参数是 environ_m 和 start_response_m。
5、Middleware处理result_m,然后生成 result_s,接着调用 start_response_s,并返回结果 result_s给Server端。Server端获取到result_s后就可以发送结果给客户端了。
从上面的流程可以看出middleware应用的几个特点:
1、Server认为middleware是一个application。
2、Application认为middleware是一个server。
3、Middleware可以有多层。
因为Middleware能处理所有经过的request和response,所有要做什么都可以,没有限制。比如可以检测request是否有非法内容,检查response是否有非法内容,为request加上特定的HTTP header等,这些都是可以的。
3.7、WSGI的实现和部署
要使用WSGI,需要分别实现server和application角色。
Application端的实现一般是由Python的各种框架来实现的,比如Django,web.py等,一般开发者不需要关心WSGI的实现,框架会提供接口让开发者获取HTTP请求的内容以及发送HTTP响应。
Server端的实现会比较复杂一点,这个主要是因为软件架构的原因。一般常用的Web服务器,如Apache和Nginx,都不会内置WSGI的支持,而是通过扩展来完成。比如Apache服务器,会通过扩展模块mod_wsgi来支持WSGI。Apache和mod_wsgi之间通过程序内部接口传递信息,mod_wsgi会实现WSGI的server端、进程管理以及对application的调用。Nginx上一般是用proxy的方式,用nginx的协议将请求封装好,发送给应用服务器,比如uWSGI,应用服务器会实现WSGI的服务端、进程管理以及对application的调用。
参考信息:https://segmentfault.com/a/1190000003069785
四、ubuntu
目前个人博客的大致框架已经代码敲好了,选用 Nginx+uwsgi 部署到 center os 系统的服务器上面。但再找资料进行部署时,关于uwsgi模块的安装,在win上失败。谷歌一下,发现,uwsgi模块不支持win,但支持ubuntu。所以目前情况变为把代码迁移到到ubuntu系统上运行,然后在部署到服务器上面。
4.1 ubuntu上部署流程
1、安装Nginx
安装Nginx
ubuntu安装完Nginx之后,文件结构大致为:
所有的配置文件都在/etc/nginx下;启动程序文件在/usr/sbin/nginx下;日志文件在/var/log/nginx/下,分别是access.log和error.log;
并且在/etc/init.d下创建了启动脚本nginx。
操作Nginx命令
2、安装uwsgi
apt-get install python-dev
pip install uwsgi
这里大体的流程是:Nginx作为服务器的最前端,负责接收client的所有请求,统一管理。静态请求由Nginx自己处理。非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次Web请求。
流程图
3、测试uwsgi
在Django项目下新建test.py文件,
测试uwsgi
然后执行shell命令:
uwsgi --http :8001 --plugin python --wsgi-file test.py
加上--plugin python 是告诉uWSGI在使用python插件,不然很有可能会出现类似这样的错误:
错误
执行成功在浏览器中打开:http://localhost:8001 显示 Hello World 说明uwsgi正常运行。
4、测试Django
首先得保证Django项目没有问题
python manage.py runserver 0.0.0.0:8001
访问http://localhost:8001,项目运行正常。
然后链接Django和uwsgi,实现简单的web服务器,到Django项目目录下执行shell:
uwsgi --http :8001 --plugin python --module blog.wsgi
blog为你的项目名。访问http://localhost:8001, 项目正常。注意这时项目的静态文件是不会被加载的,需要用Nginx做静态文件代理。
5、配置 uwsgi
uwsgi支持通过配置文件的方式启动,可以接受更多的参数,高度可定制。我们在Django项目目录下新建uwsgi.ini
配置uwsgi
6、配置Nginx
配置Nginx
7、收集
作者:一许青衫一链接:https://www.jianshu.com/p/36ef6557c910来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @
2021-12-16 11:06
寂寞圣贤
阅读(564)
评论(0)
编辑
收藏
举报
刷新评论刷新页面返回顶部
Copyright 2022 寂寞圣贤
Powered by .NET 7.0 on Kubernetes