2012-02-24 114 views
5

该项目应该如何部署和运行。这个空间有很多工具。应该使用哪个,为什么?在aws上运行django项目的最佳方式是什么?

  • 主管
  • Gunocorn
  • Ngnix
  • 面料
  • 博托
  • 皮普
  • VIRTUALENV
  • 负载均衡
+0

题外话题,但您可以考虑使用Heroku将一个Django项目部署到AWS,并跳过本次辩论的大部分内容。 – 2012-02-28 02:27:35

回答

11

这取决于你的配置。我们在Rackspace上为我们的环境使用以下堆栈,但您可以在AWS上使用EC2实例设置相同的内容。

  • 的Ubuntu 11.04
  • 光油(在内存中缓存),以避免磁盘寻道
  • 的Nginx服务器的静态内容
  • 的Apache服务器的动态内容(MOD-WSGI)
  • 的Python 2.7.2与Django的
  • 詹金斯为我们的持续构建
  • GIT版本控制
  • 织物F或部署。

所以它的工作方式是由詹金斯轮询GIT推送到原始库。詹金斯然后从原点拉下变化。构建一个Python Egg,运行单元测试,使用Fabric将这个egg部署到必要的环境中,并重新加载Apache配置,以确保分叉的Apache进程正在拾取新的Python蛋。

希望这会有所帮助。

+0

尼斯堆栈迈克尔你有你的Nginx配置在你的项目源代码?什么是管理你的python项目的运行和线程的数量。我相信主管和Gunocorn可以在这里帮忙。 – 2012-02-24 10:12:29

+1

出于兴趣,使用Apache + ModWSGI和Nginx的原因是什么,而不仅仅是面向uWSGI的Nginx?另外,对于静态内容,ec2单元为什么要移动而不是仅仅在s3上托管?是否有性能影响? – jvc26 2012-02-27 21:31:22

+2

伟大的一点。我们从Apache/ModWSGI开始,然后将NginX添加到混合中,出于可预测性原因,我们希望将Apache保留在我们的PROD环境中。 S3真棒,完全。我们在Cloudfiles(S3等价物)上获得了大部分内容。但是有些静态文件对我们而言经常发生变化,CloudFiles不允许您在<20分钟的CDN上设置缓存TTL。 – Michael 2012-02-27 23:20:11

3

正如迈克尔Klockel已经陈述取决于你的配置,我有:

  • 的Ubuntu 10.04 LTS
  • Nginx的
  • Uwsgi
  • Git版本控制
  • 蟒蛇的virtualenv和PIP

您可以检查她的部署设置E: Django, Virtualenv, nginx + uwsgi import module wsgi error

,为什么我使用nginx的和uwsgi这里: http://nichol.as/benchmark-of-python-web-servers

而且我用的面料为应用程序的部署和厨师独奏http://ericholscher.com/blog/2010/nov/8/building-django-app-server-chef/

约翰尼拉缓存SQL查询和乌鸦和哨兵记下应用程序正在发生的事件。

2

从性能的角度来看,我会使用uWSGI+Nginx(我认为比较已经在另一个答案中链接了),pip和virtualenv用于部署,因为这样可以保持独立性,并且便于使用结构或类似工具进行干净部署。使用git进行版本控制。 Jenkins可以处理持续集成。我会在您的EC2实例前使用AWS load balancer (ELB)来实现平衡 - 做这项工作时不必担心太多。 django-storages用于将您的静态文件上传到s3,这可以节省您让另一台服务器分发静态文件的工作量。

但是,这取决于您的管理开销。如果您正在寻找干净且简单的部署和扩展方法,那么我会废弃整个AWS EC2堆栈,使用Heroku作为前端,使用s3作为您的静态文件。这可以节省维护盒子的所有管理时间,并让您专注于开发。

相关问题