15

2021 年更新

今天我将Ansible用于这个和其他 devops 任务。在此过程中,我尝试了 Chef、Puppet、Saltstack 和 Docker 图像,但我发现对于我来说,作为一个在较小项目中工作的独立开发人员,像 Ansible 这样的轻量级工具非常适合。

原始问题(从 2011 年开始)

我刚开始是一名独立的 Web 开发人员,最近我为一个相当简单的网站提供了一个报价,该报价比他们预期的要高很多,从而吓跑了一位客户。它基本上是宣传册软件,他们可以在 Wordpress.com 或 Google 网站等托管解决方案中自己完成。除了一个关键特性之外,这让我认为 Django 非常适合,并且可以激发一些适当的 Web 开发。

在查看我在粗略估计中列出的任务时,对我来说很明显,其中大部分时间都不是特定于该客户网站的内容。这让我想到我应该有一个脚本来自动化设置和部署新 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 框架

  • 添加 jQuery

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

  • 设置新的 Google 分析配置文件。

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

  • 设置 Pingdom 监控

过去我曾将RakeFabric用于一些类似(但不那么雄心勃勃)的东西,我认为 Fabric 可能也非常适合这项任务,但我仍然希望您的意见。还有其他我应该研究的工具吗?我听说过关于Puppet的好消息,但仅查看他们的网站(其中包含 Enterprise 一词)就让我觉得这对于单人操作来说可能是矫枉过正。

4

4 回答 4

8

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

查看learning puppet以快速入门,包括示例和 VM 操场。您可以使用独立运行的简单 Puppet 脚本(清单)完成真正有用的事情,然后在需要时开始学习所有高级功能。

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

于 2011-05-04T05:52:49.133 回答
4

我们目前使用fabric+buildout。其他人说 Chef 或 Puppet 更适合(如果你想做服务器级的事情,可能不仅仅是应用级的)。

同样对于 Django,有一些专门的托管程序可以减轻您的负担,我特别喜欢http://ep.io ,我们使用它来为django-cms演示的全自动部署提供动力,所以也许您应该看看也进入这些托管服务提供商,而不是将自己限制在对您来说开销更大的 VPS。

于 2011-03-30T11:04:07.147 回答
4

作为一个处于类似位置的人,我最近一直在考虑很多这样的事情。

通过设置一些可以从 git 为每个新项目提取的良好骨架代码,可以帮助您提到很多内容。

看看这个作为通用 django 项目骨架代码的一个很好的起点

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

我将类似的东西放在一起,让我可以快速启动和运行,但也可以将服务器的东西与项目的东西分开。这非常重要,因为它允许您在不包括系统/服务器文件的情况下对每个项目进行版本控制。它就在这里(仍在进行中)。这需要处理文件夹布局、额外的 css、样板 html 内容、grid/960 内容、jquery、开发与生产设置、数据库设置(主要)、默认安装的应用程序等。这是布局解释

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

在数据库方面,我已经不再尝试在不同的机器上拥有开发数据库和生产数据库,导入/导出夹具太难了。现在我在 VPS 上有单独的生产和开发数据库,​​并在开发时远程(通过 ssh)连接到开发数据库。您可以轻松地将一个复制到另一个,这也很好。

当一切准备就绪后,您可以使用结构从开发部署到生产(我还没有陷入这个问题,所以我不确定它的易用性)

我很想听听其他人对此的想法,因为我正要发布类似的东西!

于 2011-03-30T12:14:37.127 回答
2

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

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

于 2011-04-14T04:25:48.010 回答