首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -新手部署

Django -新手部署
EN

Stack Overflow用户
提问于 2011-11-29 19:28:17
回答 2查看 9.4K关注 0票数 16

我已经完成了我的第一个Django/Python项目,现在我需要把事情放在一个真正的生产the服务器上。

我在互联网上读了一些论文,我倾向于选择Ngix,Gunicorn和Git,但我发现的文档不是很完整,如果这是最好的选择,我有很多doubs。

你对这个主题有什么看法?我需要一个简单的方法来把我的Django项目上线,但网站仍然是非常错误的,我将需要在生产服务器在未来的时间多次更改代码。

请给我一些关于我应该做什么的线索。我有点迷路了..。

诚挚的问候,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-29 20:52:21

这是一个很好的blog entry,涵盖了使用Nginx和Gunicorn部署Django。我将简要介绍一下是什么让所有不同的技术变得重要:

Git

当然不需要Git或任何其他版本控制系统。它之所以适合部署Django项目,是因为你通常通过源代码来分发你的应用程序,也就是说,你不会编译它或者把它打包成一个鸡蛋。通常,您将组织您的Git存储库,以便在服务器上更新您的应用程序只需要签出最新的源代码--不需要其他任何东西。

virtualenv和pip

同样,这并不是一个严格的要求,但我强烈建议您花时间熟悉一下virtualenv和pip,因为这将使在不同的运行时环境(本地或远程)中部署Python应用程序变得轻而易举。

基本上,您的项目需要在Python路径上至少有Django和Gunicorn可用,甚至可能有一个数据库驱动程序。这意味着,每次您尝试将应用程序部署到某个位置时,都必须安装Python并从头到尾执行easy_install

virtualenv将重新分发Python安装,这意味着默认情况下,新的Python实例将具有与安装完全相同的Python路径配置。pip就像是类固醇上的easy_install,因为它支持直接从代码存储库中签出Python依赖项,并且支持一种需求文件格式,您可以使用该格式一次性安装和配置所有依赖项。

使用virtualenv和pip,您所需要做的就是拥有一个包含所有依赖项的简单文本文件,该文件可以使用pip进行解析,并在机器上安装一个Python发行版。从那里开始,您只需执行git checkout repo /app/path; easy_install virtualenv; virtualenv /app/path; ./app/path/scripts/activate; pip install -r /app/path/requirements.txt。Voila、Gunicorn、Django和所有其他依赖项都已安装并立即可用。当您在/app/path/scripts中使用Python实例运行Gunicorn Django脚本时,该脚本将立即能够访问Gunicorn源代码,并且它将能够找到您的Django项目,该项目将能够访问Django和其他依赖项。

Nginx

Web服务器将主要用于为静态媒体提供服务器。其他所有内容都代理到管理Django实例的Gunicorn实例,因为它的主要目的是托管Python WSGI应用程序,而不是充当通用Web服务器,相反,您的Web服务器不需要能够处理Python应用程序。

Nginx之所以经常被使用,是因为它是轻量级的,非常适合服务静态媒体和代理请求。它比Apache要少得多,这使得它更容易配置和维护,更不用说如果你已经很紧张了,它将会更有效的资源。

Gunicorn

这是实际的Python应用程序,它将管理您的Django实例,并提供一个HTTP接口将其公开给HTTP客户机。它将启动几个工作进程,这些进程都是加载了应用程序源代码及其依赖项的截然不同的Python虚拟机。主Gunicorn进程将依次负责管理哪些工作进程管理哪些请求以获得最大吞吐量。

Nginx和Gunicorn连接的基本原理

需要注意的最重要的一点是,Nginx和Gunicorn是独立管理的独立进程。

Nginx Web服务器将公开,即可通过互联网直接访问。对于静态媒体的请求,例如实际的图像、CSS样式表、JavaScript源和可通过文件系统访问的PDF文件,如果您将其配置为在您配置的项目收集静态媒体的路径上查找文件,Nginx将负责在响应体中将它们返回给HTTP客户端。

任何其他请求都应该代理到您的Gunicorn实例。它将被配置为在环回接口上的特定端口上侦听HTTP请求,因此您将使用Nginx作为http://127.0.0.1:8080的反向代理,以获取对您的Django实例的请求。

这是将您的Django项目部署到生产环境中的基本概要,应该可以满足95%的Django项目的需求。虽然我确实提到了Nginx和Gunicorn,但这是将任何Web服务器设置为Python WSGI服务器的反向代理时的常用方法。

票数 18
EN

Stack Overflow用户

发布于 2011-11-29 20:28:01

出于“简单”的目的,我使用Apache和mod_wsgi:它是well-documented和“just works”。

将Django与Apache和mod_wsgi一起部署

是将Django投入生产的一种经过试验和测试的方法。- Django docs

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8309974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档