自动设置和部署Django项目的好工具

时间:2011-03-30 10:53:09

标签: django deployment installation fabric puppet

我最初是一名独立的网络开发人员,最近我通过给出一个相当简单的引用来吓跑客户 网站比他们预期的要高得多。基本上就是这样 他们可以在托管解决方案中完成自己的宣传册 像Wordpress.com或谷歌网站。除了一个关键功能之外,那个 让我觉得Django会很合适,而且还有一些合适的网页 发展可能是有动力的。

在查看我在粗略估计中列出的任务时,它很漂亮 对我来说很明显,那里的大部分时间都不是 特定于此客户网站。这让我觉得我应该 有一个脚本来自动化设置和部署新的过程 Django项目。

还有一些事情需要手动完成,如:

  • 设置新的VPS(或者在大多数情况下只使用现有VPS上的虚拟主机)。

  • 编辑DNS设置以指向clientsdomain.com和test.clientsdomain.com 到新的VPS。

  • 设置SSH密钥

  • 编辑配置文件。

然后脚本会执行以下操作:

  • 在新VPS上安装一些必需的软件包

  • 在新VPS上安装默认的iptables防火墙

  • 为clientsdomain.com和test.clientsdomain.com添加nginx / apache配置

  • 为VPS上的生产和测试以及本地计算机上的开发设置新的数据库。

  • 创建一个新的Django项目并将其放在Bitbucket上。

  • 为生产,测试和开发设置settings.py和local_settings.py

  • 为生产数据库和上传文件目录设置非现场备份例程。

  • 启用一些默认应用:flatpages,admin

  • 添加一些样板模板,一些样板平板和导航栏。

  • 添加960.gs CSS-framework

  • 添加jQuery

  • 为搜索设置djapian或Haystack(包括用于自动更新的cron作业)。

  • 设置新的Google分析个人资料。

  • 包括在生产,测试和开发之间复制数据库的可能性

  • 设置Pingdom监控

我过去曾使用RakeFabric来做一些类似(但不那么雄心勃勃)的事情,我认为Fabric也可能非常适合这项任务,但是我仍然喜欢你的意见。还有其他工具我应该研究一下吗?我听说很好 关于Puppet的事情,但只是查看他们的网站(它包含企业一词)让我觉得一个人操作可能有点过分。

4 个答案:

答案 0 :(得分:8)

对于小型项目来说Puppet可能看起来令人生畏和过度,因为它经常用于大型部署,但是我使用它来管理standalone mode中的一台机器而没有客户端服务器设置,这样我就不必处理了使用SSL证书和多台机器,这使事情变得更加简单,但仍然给我带来的好处,我可以做很快的灾难恢复或移动我的托管而不需要很多努力。有一些great reasons(幂等,跨平台支持,完整生命周期管理,抽象,简洁的DSL),用于在系统上使用现代配置管理系统,这些系统本质上是在循环中执行ssh或依赖于锁定您的平台的脚本。

查看learning puppet以获得快速提升,包括示例和VM游乐场。您可以使用独立运行的简单Puppet脚本(清单)完成非常有用的操作,然后在需要时开始学习所有高级功能。

另一个好处是很多Puppet清单和模块已经由其他人编写,并且它们在Puppet Forge和许多其他advanced Puppet users上共享。

答案 1 :(得分:4)

我们目前正在使用fabric + buildout。其他人说Chef或Puppet更适合(如果你想做服务器级别的东西,不仅仅是应用程序级别)。

同样对于Django,有一些专门的托管服务器会给你带来很大的负担,我特别喜欢http://ep.io我们用来为django-cms演示的全自动部署提供支持,所以也许你应该调查那些托管服务提供商,而不是将自己局限于VPS,这对你来说是更多的开销。

答案 2 :(得分:4)

我最近一直在考虑将其作为类似职位的人。

你提到的很多内容都可以通过设置一些好的框架代码来帮助,这些代码可以从每个新项目的git中提取出来。

看看这是一个通用django项目框架代码的良好起点

http://blog.zacharyvoase.com/2010/02/03/django-project-conventions/

我把类似的东西放在一起,让我能够快速启动和运行,同时也将服务器内容与项目内容分开。这非常重要,因为它允许您在不包含系统/服务器文件的情况下对每个项目进行版本控制。 It's here(仍在进行中)。这需要处理文件夹布局,额外的CSS,样板html东西,grid / 960东西,jquery,开发与生产设置,数据库设置(mostely),默认安装的应用程序等。这里是the layout explained

使用VirtualenvVirtualenvwrapper& pip允许您设置独立的,封装的python环境,非常适合在一个VPS上运行多个项目。 Pip允许您将软件包安装到特定的virualenv,并将所有软件包输出到稍后可以导入的文本文件。这使得从开发到生产的代码重新快速地重新部署。它还允许您在骨架代码中编写一个通用的需求文件,该文件会自动安装所有正常的django应用程序,即django-tagging等。

就数据库而言,我已经停止尝试在不同的机器上安装开发数据库和生产数据库,导入/导出灯具太难了。现在我只有单独的生产和在VPS上开发数据库,​​并在开发时远程(通过ssh)连接到开发人员。你可以轻松地将一个复制到另一个也很好。

当一切准备好之后,你可以使用面料从开发部署到生产阶段(我还没有陷入困境,所以我不确定它的易用性)

我非常有兴趣听到其他人对此的想法,因为我要发布一些类似的东西!

答案 3 :(得分:2)

查看Silk Deployment,它基于Fabric,用于部署Django(或任何WSGI)+ Nginx + Gunicorn:

http://pypi.python.org/pypi/silk-deployment/