我从未真正为一家部署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(生产)。
这似乎对我有用,但我想知道这个过程有什么问题,我怎么能改进它。
谢谢
答案 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来进行部署是很好的