[Python] 技术贴系列之——Django部署方案简介

在window上部署python Django项目 采用apache+mod_wsgi方案 在window上,通过Apache部署python Django项目 阅读详情

[Python] 技术贴系列之——Django部署方案简介 

[复制链接]
 
跳转到指定楼层
  33 0  橘子哥 发表于 2016-7-8 16:41:34
Django部署方案简介


引:Django是Python众多web框架中提供功能最全最丰富的一个,那么我们在实际应用中通常怎么去部署Django呢?下面我们就来看一看Django的部署方案有哪些。

1. Pythonweb 程序的部署方法:
Django是采用python写的web框架,我们先来看下python的web程序的9种部署方法:
·        mod_python,这是apache内置的模块,很严重的依赖于mod_python编译使用的python版本,和apache配套使用,不推荐;
·        cgi,这个太old,不推荐,而且nginx不支持cgi方式,只能用lighttpd或者apache;
·        fastcgi ,这个是目前流行最广的做法,通过flup模块来支持的,在nginx里对应的配置指令是 fastcgi_pass;
·        spawn-fcgi,这个是fastcgi多进程管理程序,lighttpd安装包附带的,和flup效果一样,区别是flup是 python代码级引入,spawn-fcgi是外部程序,spawn-fcgi用途很广,可以支持任意语言开发的代码,php、python、perl,只要你代码实现了fastcgi接口,它都可以帮你管理你的进程;
·        scgi,全名是Simple Common Gateway Interface,也是cgi的替代版本,scgi协议很简单,和fastcgi差不多,只是没有怎么推广开来,nginx对应的配置指令是scgi_pass,你想用就用,flup也支持;
·        http,nginx使用proxy_pass转发,这个要求后端application必须内置一个能处理高并发的http server,在python的web框架当中,只能选择tornado;
python程序员喜欢发明轮子,tornado除了是一个web framework之外,它还可以单独提供高性能http server,所以,如果你采用其他python框架写代码,比如说bottle,也一样可以通过import tornado 来启动一个高性能的http server,同样的可以采用http协议和nginx一起来部署。扩展开来,python包里面能处理高并发的http server还有很多,比如说gevent,也可以被其他框架引用来支持http方式部署。
·        uwsgi,包括4部分组成:
o   uwsgi协议
o   webserver内置支持协议模块
o   application服务器协议支持模块
o   进程控制程序
nginx从0.8.4开始内置支持uwsgi协议,uwsgi协议非常简单,一个4个字节header加一个body,body可以是很多协议的包,比如说http,cgi等(通过header里面字段标示)。
uwsgi的特点在于自带的进程控制程序,它是用c语言编写,使用natvie函数,其实和spawn-fcgi/php-fpm类似。所以uwsgi可以支持多种应用框架,包括(python、lua、ruby、erlang、go)等等
·        Gunicorn,和uwsgi类似的工具,从rails的部署工具(Unicorn)移植过来的。但是它使用的协议是 WSGI,全称是Python Web Server Gateway Interface ,这是python2.5时定义的官方标准(PEP 333 ),根红苗正,而且部署比较简单;
·        mod_wsgi,apache的一个module,也是支持WSGI协议,https://code.google.com/p/modwsgi/
2. Nginx + uWSGI + Django
先来澄清几个概念:
§  WSGI: WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。
§  uwsgi: uwsgi同WSGI一样是一种通信协议,而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
     uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。
§  uWSGI:  uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。 Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
uWSGI的主要特点如下:
§  超快的性能
§  低内存占用(实测为apache2的mod_wsgi的一半左右)
§  多app管理
§  详尽的日志功能(可以用来分析app性能和瓶颈)
§  高度可定制(内存大小限制,服务一定次数后重启等)
由于uWSGI有着上述优点,通常采用Nginx + uWSGI + Django来部署,性能与稳定性都不错。
部署方法:
1 安装uwsgipip install uwsgi2 写配置文件  yourfile.ini (文件名可自定义)[uwsgi]socket =127.0.0.1:3031chdir = /home/foobar/myproject/wsgi-file = myproject/wsgi.pyprocesses = 4threads =2master= Truepidfile = yourfile.piddaemonize = yourfile.log3 执行 uwsgi yourfile.ini4 nginx 配置location / {            uwsgi_pass 127.0.0.1:8630;            include uwsgi_params;    }3. Nginx + Tornado + Django
Tornado是一个异步web框架和服务器,所以在开发长轮询的chat之类应用非常的合适,但是其实本身也是一个高性能的http服务器,也可以作为一个WSGIServer。所以即使网站没有使用Tornado的框架,而是用了web.py或者是Django来开发, Tornado依然可以用来加速网站。使用Tornado来代替fastCGI可以大幅提高性能,且可以承载的并发能力也有了成倍的提高。
部署方法:
采用Nginx通过upstream来反向代理到N个Tornado的服务器实例上的部署方式。
Setp1:安装supervisord
由于Tornado并没有自身提供Daemon的能力,所以需要用一个服务管理工具来管理Tornado的进程,supervisord是用Python实现的一款非常实用的进程管理工具。可以很方便的管理N过进程,且支持进程分组。Supervisord可以通过sudo easy_install supervisor安装,当然也可以通过Supervisord官网下载后setup.py install安装。
Step2: 给Django的站点增加一个Tornado的服务器文件(比如serv.py)
创建一个文件Serv.py在Django站点的根目录(Django 1.4中应该放到和urls.py同一级目录),内容如下:
import os
import sys
fromtornado.options import options, define, parse_command_line
importdjango.core.handlers.wsgi
importtornado.httpserver
importtornado.ioloop
import tornado.web
importtornado.wsgi
HERE =os.path.dirname(os.path.abspath(file_))
sys.path.append(_HERE)
sys.path.append(os.path.join(_HERE,'..'))
sys.path.append(os.path.join(_HERE,'../contrib'))
os.environ['DJANGO_SETTINGS_MODULE']= "settings"
def main(port):
wsgi_app = tornado.wsgi.WSGIContainer(
       django.core.handlers.wsgi.WSGIHandler())
tornado_app = tornado.web.Application(
       [('.*', tornado.web.FallbackHandler,dict(fallback=wsgi_app)),
          ])
server =tornado.httpserver.HTTPServer(tornado_app)
server.listen(port)
tornado.ioloop.IOLoop.instance().start()
if __name__ =='main':
main(int(sys.argv[1]))
我这里通过第一个参数来指定Tornado服务监听的端口。这样比较灵活,这点我们在后面的步骤会用到。这个时候我们可以通过
python Serv.py8000
这个命令来启动服务器
Step3: 配置Supervisord
第一步安装的Supervisord还没有配置,所以我们需要先创建一个配置文件的样板。在root权限下执行
echo_supervisord_conf> /etc/supervisord.conf
这个时候在/etc/创建了配置文件,用vim打开这个文件,在配置文件的屁股后面加上以下这一段
[program:web]
command=python/var/www/site/Serv.py 80%(process_num)02d
process_name=%(program_name)s_%(process_num)02d
umask=022
startsecs=0
stopwaitsecs=0
redirect_stderr=true
stdout_logfile=/tmp/codoon.log
numprocs=4
numprocs_start=1
这个配置会启动4个Tornado的服务进程分别监听 8001,8002,8003,8004 这四个端口
command这一行是要执行的命令,这里是用 python /var/www/site/Serv.py端口号来启动Tornado的服务进程 80%(process_num)02d 的用途是通过进程编号来生成端口号。下面的process_name这个参数也会用到。这里要指定的文件名就是上一步我们创建那个Serv.py文件
process_name是进程的名字,由于这里要启动4个进程,所以要用process_num来区分
umask是程序执行的权限参数
startsecs这个参数是程序启动的等待时间
stopwaitsecs这个参数是程序停止的等待时间
redirect_stderr这个参数将错误流重定向到std的流输出,这样可以省去一个日志文件的配置,当然也可以不用这个参数分开配置日志文件
stdout_logfile 这个参数是STD流输出日志文件的路径,Tornado会输出所有的请求和错误信息,通过这个可以统一做日志处理,分隔什么的,在程序里就只需要print到std流就行了。
numprocs 这个参数指定了进程的数量,这里是4,表明要启动4个Tornado进程
numprocs_start 这个参数指定了进程号的起始编号,这里是1,这样前面的command和process_name里的%(process_num)02d部分就会在执行的时候被替换为01~05的字符串
配置修改完成后:wq保存退出,执行:
supervisorctlreload
重新加载配置后,这些进程就启动起来了
Step4:修改配置Nginx
首先找到在vhost目录里你的站点配置文件,打开后,在头上增加upstream的内容
upstream frontends{
  server 127.0.0.1:8001;
  server 127.0.0.1:8002;
  server 127.0.0.1:8003;
  server 127.0.0.1:8004;
}
然后在Server配置节里找到
location / { 这个配置节
以前是用的FastCGI,所以里面的配置可能是这样子的
host and port tofastcgi server
fastcgi_pass127.0.0.1:8081;
fastcgi_paramPATH_INFO $fastcgi_script_name;
fastcgi_paramREQUEST_METHOD $request_method;
fastcgi_paramQUERY_STRING $query_string;
fastcgi_paramCONTENT_TYPE $content_type;
fastcgi_paramCONTENT_LENGTH $content_length;
fastcgi_pass_headerAuthorization;
fastcgi_paramREMOTE_ADDR $remote_addr;
fastcgi_paramSERVER_PROTOCOL $server_protocol;
fastcgi_paramSERVER_PORT $server_port;
fastcgi_paramSERVER_NAME $server_name;
fastcgi_intercept_errorsoff;
把这些统统删掉,变成了这样
location / {
}
在{}中加入upstream的配置,变成如下样子
location / {
  proxy_pass_header Server;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Scheme $scheme;
  proxy_pass http://frontends;
  proxy_next_upstream error;
}
保存配置文件后执行 让nginx重启的指令 nginx -s reload(注意 nginx文件在不同发行版中位置有差别)
如何将Django项目部署在服务器上 知识储备 首先,我们需要明确在服务器上部署Django项目过程中,所需要的各个模块的功能: Python:一种编程语言,只能进行后端数据的处理和管理前端HTML文件,不能用来处理HTTP请求 Nginx:web服务器,用于处理HTTP请求 uWsgi:Python的第三方库,建立Nginx和Python环境的交互通信 Django:Python的Web开发框架,部署HTML文件和数据库 本文以Ub... 阅读详情

相关推荐

Python Django 云服务部署方案

目的:本方案旨在为开发者提供一套全面、详细且可行的 Python Django 云服务部署方案。帮助开发者将基于 Django 框架开发的 Web 应用程序成功部署到云服务平台上,实现应用的稳定运行和高效访问。范围:本方案涵盖了从 Django 框架的基本概念和架构原理,到云服务平台的选择与配置,再到具体的部署步骤和代码实现。同时还涉及到部署过程中的性能优化、安全配置等方面,以及对未来发展趋势的探讨和常见问题的解答。背景介绍:阐述方案的目的、范围、预期读者和文档结构,让读者对整个方案有一个初步的了解。

AI Python 编程之道的博客 1084

详解Supervisor进程守护监控

一、v博客前言 很多时候,我们想要在后台运行一个程序时,通常会用到nohup等命令(例:nohup sh ./test.sh &)。但是类似于nohup这样的命令并不能完整的控制和监控进程。 Supervisor在百度百科上给的定义是超级用户,监管员。Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它。可以运行在各种类unix...

搁浅在PHP沙滩上的博客 3345

Django技术整理

Django使用使用model操作数据库(crud),以及在ubuntu中一些常用的开发指令,文档中提供了大量的实际开发demo

supervisor安装配置说明

1. 安装supervisor yum install supervisor-3.1.4-1.el7 supervisor已经放到5giot的yum源中,若无法安装则更新一下yum配置: yum clean all yum makechche 然后再执行yum install supervisor操作。 2. 配置supervisord supervisord的配置文件默认放在/etc文件夹中, vim /etc/supervisord.conf 可以看到它的内容为: [include]

随风随想 1072

用Python turtle库 绘制皮卡丘

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。 turtle基础知识参考: https://gitchat.blog.youkuaiyun.com/article/details/90696190 https://blog.csdn.ne...

qq_36295856的博客 2万+

RK平台MPP编解码实战:从源码编译到性能测试全解析

本文详细解析了在RK(瑞芯微)平台上进行MPP(Media Process Platform)多媒体编解码实战的全过程。从源码获取、交叉编译环境搭建、常见编译问题排查,到测试程序的修改调试与性能测试分析,提供了从零到一的完整指南。文章通过实测数据展示了MPP硬件编解码在嵌入式设备上的高性能与低功耗优势,帮助开发者快速掌握这一关键技术,应用于智能摄像头、视频会议终端等产品开发。

weixin_28273593的博客 544

服务端开发常用工具

rsync

你是魔鬼吧 1323

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

linux 进程管理工具supervisor使用

linux进程管理工具supervisor

Python开发分享的博客 1686

从‘眼花缭乱’到‘心中有数’:rs-fMRI统计分析全流程避坑指南(附DPABI操作截图)

本文详细解析了rs-fMRI统计分析的全流程,从质量控制到统计模型选择,再到多重比较校正和结果解读。特别针对DPABI软件操作中的常见陷阱提供实用指南,帮助研究者避免FDR和GRF校正等关键环节的错误,实现从数据混乱到清晰分析的转变。

weixin_33686714的博客 399

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

linux 轮巡监控进程,Linux系统下的进程监控工具Supervisor的基本使用方法

Supervisor是一个C/S系统,它允许用户在类UNIX系统上控制一些进程。它具有以下特性:1 简单Supervisor通过INI格式配置文件进行配置,很容易掌握,它为每个进程提供了很多配置选项,可以使你很容易的重启进程或者自动的轮转日志。2 统一Supervisor提供了一种统一的方式来start、stop、monitor你的进程, 进程可以单独控制,也可以成组的控制。你可以在本...

weixin_35208293的博客 569

【AI 赋能:Python 人工智能应用实战】16. BERT微调实战:中文新闻分类全流程(附模型蒸馏+ONNX部署完整代码)

中文新闻分类是NLP领域的经典实用任务,BERT模型凭借双向上下文建模能力,能有效解决中文歧义与长文本依赖问题,但存在推理速度慢、资源占用高的痛点。本文以THUCNews中文新闻数据集为核心,提供从数据预处理、BERT微调、模型蒸馏到生产部署的全流程实操指南。首先详解THUCNews的多编码读取与清洗(解决gbk/utf-8兼容问题);然后实现BERT微调,加入早停机制与混淆矩阵可视化,验证准确率达93.8%;接着用DistilBERT完成模型蒸馏,在仅损失0.6%准确率的前提下,将推理速度提升2.7倍。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1098

python架构方案django_Django部署方案简介

引:Django是Python众多web框架中提供功能最全最丰富的一个,那么我们在实际应用中通常怎么去部署Django呢?下面我们就来看一看Django的部署方案有哪些。1. Python web 程序的部署方法:Django是采用python写的web框架,我们先来看下python的web程序的9种部署方法:· mod_python,这是apache内置的模块,很严重的依赖于mod_python...

weixin_39873741的博客 388

使用R语言绘制Logistic回归模型的亚组分析森林图

亚组分析是一种常用的统计方法,用于探索不同亚组之间的差异,并确定是否存在某些变量对结果的调节作用。在本文中,我们将使用R语言来绘制Logistic回归模型的亚组分析森林图。在该图中,每个亚组都用一个点表示,点的位置表示亚组的均值,而线段表示亚组的置信区间。垂直参考线用于表示效应值为0的点,帮助我们判断亚组之间的差异。希望本文对你有所帮助,让你能够使用R语言绘制Logistic回归模型的亚组分析森林图。是一个二分类的变量,我们希望在亚组分析中探索它与响应变量之间的关系。函数来计算每个亚组的均值,并使用。

PixelNinja的博客 2003

通过分子模板构建随机分布在溶液中的纳米颗粒(一)

通过分子模板构建随机分布在溶液中的纳米颗粒 要实现的目标: 1、可以循环建立多个水分子溶液的模型; 2、针对不同水分子数,自动创建文件夹; 3、运行完毕将所有结果自动存储在对应文件夹里; 分子模板的具体教程请见我的博客: https://blog.youkuaiyun.com/qq_43689832/article/details/104443175 1、首先,我们先建立纳米颗粒的分子模板,命名为p_30.txt: 包括两种原子类型。具体格式如下: # LAMMPS molecule file makin.

Rockyoung 2651

部署 Django

补充说明:关于项目部署,历来是开发和运维人员的痛点。造成部署困难的主要原因是大家的Linux环境不同,这包括发行版、解释器、插件、运行库、配置、版本级别等等太多太多的细节。因此,一个成功的部署案例,往往很难移植到别的环境下,总是要填许多坑。那么,别人的案例就没有参考价值了么?当然不是,部署的过程其实就是参考很多的成功案例,摸索出自己适用的方式!这过程中需要什么?熟练的Linux技能是最基本的!一些部署的经验和灵活的思维也是要有的。不惧怕满屏的英文错误信息,能从中抓住问题的耐心更是要有的。

weixin_74075792的博客 1791

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Tomcat与Django整合:Python Web框架部署方案

在企业级应用开发中,经常会遇到Java与Python技术栈并存的场景。Tomcat作为成熟稳定的Java Web服务器(Web Server),在处理高并发请求和企业级特性方面表现出色;而Django作为全功能的Python Web框架(Web Framework),则以开发效率高、生态丰富著称。将两者整合,既能利用Tomcat的企业级部署能力,又能发挥Django的开发优势,形成互补的技术架构。...

gitblog_01037的博客 1094

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

django-lms部署教程:从本地开发到生产环境的快速部署方案

django-lms是一款基于Django Web框架构建的学习管理系统,提供课程管理、成绩评估、在线测验、报告生成等丰富功能。本教程将带你完成从本地开发环境搭建到生产服务器部署的全过程,让你快速拥有一个功能完善的在线学习平台。 ## 📋 准备工作:环境与依赖 在开始部署前,请确保你的系统满足以下要求: - Python 3.8+ - 数据库(PostgreSQL/MySQL/SQLite)

gitblog_01134的博客 927

【Python3】Django 学习之路

Django 是一个高级的 Python Web 框架,旨在让 Web 开发变得更加快速和简便。它鼓励遵循“不要重复自己”(DRY,Don’t Repeat Yourself)的原则,并提供了一套完善的工具和库来快速构建 Web 应用。:简化数据库操作。模板引擎:用来生成 HTML 页面。自动化管理界面:Django 自动生成一个管理后台界面。路由系统:URL 路由匹配。安全性:防止常见的 Web 安全问题(如 SQL 注入、XSS 攻击等)。

言之。 1万+

终极Django+Vue实战:Django-Vue-Admin从零开始的部署教程

Django-Vue-Admin是一套基于RBAC模型的权限控制基础开发平台,采用前后端分离架构,后端使用Django+Django-Rest-Framework,前端使用Vue+ElementUI+d2admin。本教程将带你快速完成从环境准备到项目部署的全过程,让你轻松上手这个强大的开发平台。 [![Django-Vue-Admin logo](https://raw.gitcode.com

gitblog_01110的博客 998

linux下django部署到apache

用django写了个demo,目前要部署到apache上 需求: django部署到apache 【其中变量$USER为你的账号】 1.安装apache 和 django A.下载apache: http://httpd.apache.org/download.cgi#apache22 版本2.2.22 B.解压 tar -xzvf httpd-2.2.22.ta

wklken的笔记 1万+

在Windows上部署django

在Windows上部署Django的详细操作

XFIRR的博客 7066

Python副业技术总结,手把手教你用宝塔面板部署Django程序

以上是我个人的经验总结,希望对看到的人能有所帮助。我没有系统的学过计算机编程,一切都源于爱好,喜欢折腾,大家不喜勿喷。

weixin_69999177的博客 4228

django “如何”系列6:如何部署django

django满满的快捷方法是的web开发者活的更轻松,但是,如果你不能部署你的站点的话,这是一点用都没有的。不违初衷,部署的简化也是django的一大目标。你可以有几个方法轻松的部署django 由于每一种方法(设置大方法下面的小方法)都可以自成一节,所以就不详细说了,本节仅仅是给大家做一个全面的概述 使用WSGI部署 使用FastCGI, SCGI, or AJP部署 使用...

dianliao7817的博客 101

Python3 基于 Nginx 部署 Django 项目

一、工作原理 Django 的部署可以有很多方式,采用 nginx + uwsgi 的方式是其中比较常见的一种方式。 在这种方式中,我们的通常做法是,将 nginx 作为服务器最前端,它将接收 web 的所有请求,统一管理请求。nginx 把所有静态请求自己来处理(这是 nginx 的强项)。然后,nginx 将所有非静态请求通过 uwsgi 传递给 Django,由 Django 来进行处理,从...

极客点儿 3万+
上一篇: 如何通俗地解释 CGI、FastCGI、php-fpm 之间的关系?
下一篇: 高并发异步uwsgi+web.py+gevent
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值