在aws上运行django项目的最佳方法是什么?

时间:2012-02-24 00:27:49

标签: python django deployment amazon-web-services

如何部署和运行项目。这个空间里有很多工具。应该使用哪个以及为什么?

  • Gunocorn
  • Ngnix
  • 织物
  • 宝途
  • VIRTUALENV
  • 负载平衡器

3 个答案:

答案 0 :(得分:11)

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

  • Ubuntu 11.04
  • Varnish(在内存缓存中)以避免磁盘搜索
  • NginX到服务器静态内容
  • Apache到服务器动态内容(MOD-WSGI)
  • 使用Django的Python 2.7.2
  • Jenkins为我们的持续构建
  • GIT for version control
  • 用于部署的结构。

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

希望这有帮助。

答案 1 :(得分:3)

正如迈克尔·科克尔已经说过的,取决于你的配置,我有:

  • Ubuntu 10.04 LTS
  • Nginx
  • Uwsgi
  • git版本控制
  • python virtualenv和pip

您可以在此处查看部署设置: 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/

johny缓存sql查询和raven和sentry来记录应用程序上的最新情况。

答案 2 :(得分:2)

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

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