Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
经验丰富的Web开发人员是如何在EC2上将Django部署到生产环境中的?_Django_Amazon S3_Amazon Ec2_Amazon Web Services - Fatal编程技术网

经验丰富的Web开发人员是如何在EC2上将Django部署到生产环境中的?

经验丰富的Web开发人员是如何在EC2上将Django部署到生产环境中的?,django,amazon-s3,amazon-ec2,amazon-web-services,Django,Amazon S3,Amazon Ec2,Amazon Web Services,我从来没有为一家部署Django应用程序(拥有大量用户群)的公司工作过,我很好奇这样做的最佳方式是什么 现在我正在EC2上托管一个Django应用程序。应用程序的代码位于我的github帐户中。我让nginx提供静态内容,在它后面是一台运行django+mod_wsgi的apache服务器 我试图找出“持续部署”的最佳实践是什么。现在,在添加其他功能后,我在EC2上执行以下操作: 1) git复位头——硬 2) 吉特拉力 3) 重新启动apache 4) 重新启动nginx 我在settings

我从来没有为一家部署Django应用程序(拥有大量用户群)的公司工作过,我很好奇这样做的最佳方式是什么

现在我正在EC2上托管一个Django应用程序。应用程序的代码位于我的github帐户中。我让nginx提供静态内容,在它后面是一台运行django+mod_wsgi的apache服务器

我试图找出“持续部署”的最佳实践是什么。现在,在添加其他功能后,我在EC2上执行以下操作:

1) git复位头——硬

2) 吉特拉力

3) 重新启动apache

4) 重新启动nginx

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

这似乎对我现在起作用了,但我想知道这个过程有什么问题,我该如何改进它


感谢

我曾经使用过用于部署到多台服务器的系统

我是100%Django的前首席开发人员。我们使用部署到EC2。我没有亲自编写部署脚本,但它允许我们非常、非常快地将新实例引入轮换,并按需扩展。这并不便宜,但在我看来是物有所值的。

我同意约翰的观点,并说这是舒适地做这类事情的工具。您可能不想将git配置为使用post-commit钩子自动部署,但您可能希望配置一个fabric命令在本地运行测试套件,然后在通过测试后推送到生产环境

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


如果您只是使用apache托管应用程序,那么您可能会受益于一个更轻的解决方案。在nginx中使用fastcgi将允许您完全消除apache的开销。nginx还有一个wsgi模块,但我不知道它现在是否已经可以投入生产了。

还有一个很好的方法来管理它。对于ubuntu/debian amis来说,通过将应用程序打包到中来管理版本和进行部署是很好的。deb

+1 fabric使部署逻辑可重复、可版本化,并保持它的简单性就像fabric一样。我这个周末去看看。谢谢你们的帮助,伙计们(包括下面的每个人)我在用ubuntu吗?我对它的好处有点困惑?我不确定你是否在使用ubuntu或其他一些目标。好处在于易于代码管理,可以管理配置选项的合并,自动管理依赖项。可以运行前/后。。安装用于更新配置/数据库等的脚本。这是一个可怕的想法。这根本不是人们部署Python和Django项目的方式。我们使用pip和virtualenv,以及south进行迁移。我认为这取决于项目,在许多情况下,这必须作为项目的一部分来完成。@PaulMcMillan仅仅因为“这不是人们如何部署Python和Django项目”并不意味着这是一个可怕的想法。精英主义态度阻碍了进步、潜在的富有成效的讨论和创新。完全取消apache有什么好处?我可以想象它可能会加快请求的速度,因为它们不会通过nginx重定向到不同的端口(可能)?我的印象是,与nginx相比,apache是一个更成熟的产品,这就是为什么人们继续使用它?apache是一个更具特色的产品,这就是为什么人们继续使用它。消除堆栈中不必要的层是提高速度的一个好方法,同时,nginx还可以为它能够完成的任务杀死apache。用户可配置。htaccess可能是人们使用apache最常见的原因。降低内存使用率是消除apache的另一个原因。此外,如果您的堆栈中已经有了nginx,我不清楚“成熟产品”的评论。如果nginx失败,apache不会介入并接管。谢谢。我也会检查这一点,虽然我正在寻找一个免费的解决方案,如果可能的话