经验丰富的Web开发人员如何在EC2上部署Django?

时间:2011-04-14 18:45:50

标签: django amazon-s3 amazon-ec2 amazon-web-services

我从未真正为一家部署Django App(拥有庞大的用户群)的公司工作,并且很好奇这是做什么的最好方法。

现在我正在EC2上主持一个Django应用程序。该应用程序的代码位于我的github帐户中。我有nginx服务静态内容,后面是一个运行django + mod_wsgi的apache服务器。

我正在努力弄清楚最佳做法是什么"持续部署"。现在,在我添加了其他功能后,我在EC2上执行以下操作:

1)git reset HEAD --hard

2)git pull

3)重启apache

4)重启nginx

我在settings.py文件中有自定义逻辑,这样如果我在EC2上运行,debug会设置为False,我的数据库会从sqlite3(开发)切换到mysql(生产)。

这似乎对我有用,但我想知道这个过程有什么问题,我怎么能改进它。

谢谢

4 个答案:

答案 0 :(得分:6)

我使用过使用Fabric部署到多台服务器的系统

答案 1 :(得分:2)

我是The Texas Tribune的前首席开发人员,这是100%的Django。我们使用RightScale部署到EC2。我没有亲自编写部署脚本,但它允许我们非常快速地将新实例转换为轮换,并按需扩展。它不便宜,但在我看来值得每一分钱。

答案 2 :(得分:1)

我同意John的观点,并说Fabric是轻松做这类事情的工具。您可能不希望将git配置为使用post commit钩子自动部署,但您可能希望配置fabric命令以在本地运行测试套件,然后在通过时推送到生产。

许多人运行单独的开发和生产设置文件,而不是在那里使用自定义逻辑来检测它是否在生产环境中。您可以从统一文件继承,然后覆盖开发和生产之间不同的位。然后使用生产文件启动服务器,而不是依赖单个统一的settings.py。

如果您只是使用apache来托管应用程序,那么您可能会从轻量级解决方案中受益。使用fastcgi和nginx可以让你完全消除apache的开销。还有一个用于nginx的wsgi模块,但我不知道它现在是否已准备就绪。

答案 3 :(得分:1)

还有一种更好的方法来管理它。对于ubuntu / debian amis,管理版本并通过将应用程序打包成.deb来进行部署是很好的