12

I've recently started playing around with Mezzanine, a django-based CMS. I recently just managed to configure Fabric to get it uploading to my host, webfaction.com, as its a bit more involved automatically creating the website on the shared hosting, and I wanted to automate that process.

Altogether, that system uses Fabric for template uploads of config files, and pip + virtualenv for handling the python packages.

However, I just recently read about buildout, and how some people swear by it for deployment, and others don't. See here: Django remote deployment with buildout and Fabric and here: http://labs.creativecommons.org/2011/07/29/not-panicking-switching-to-virtualenv-for-deployment/

While I've googled and found a ton of results for buildout vs. pip, there's not much information about buildout + fabric vs. pip + fabric. It seems like some of the features of buildout (uploading config templates, handling supervisor) can be done through fabric. Can someone tell me the advantages and disadvantages of either approach?

Note: As I'm using shared hosting for the foreseeable future, I can't sudo, which it seems buildout may require for a number of existing recipes.

4

2 回答 2

17

总结:Pip 只安装 python 包,显然你还需要做更多的事情。您可以在 buildout 中完成大部分额外工作,其优势在于 buildout 在本地和服务器上都可以为您完成。这样,织物必须做的更少。缺点是构建的额外复杂性,所以如果几个自定义结构命令对您来说就足够了,那可能更适合您。那么:权衡如何为您服务?

长版:

Pip 擅长为您的项目安装 python 包。Buildout 擅长为项目设置几乎所有内容(包括 python 包)。这就是目标的不同。

现在......你把织物带入混合物中。使用 pip+fabric,您可以从 fabric 中调用 pip 来获取所有 python 包,然后使用 fabric 本身来设置其他所有内容。一个 apache/nginx 配置文件,创建几个目录(“var/log/”)等。

使用 buildout+fabric,您将已经配置 buildout 来执行许多操作,例如创建目录和从模板生成文件以及设置主管和设置 cronjob 以启动主管@reboot。所以fabfile必须做的更少。

所以...你交换职责。您可以在构建中做的所有事情,都可以在织物中做。您可以在 buildout 中做的所有事情,都可以使用自定义 python(或 shell)脚本与 pip 结合使用(“阅读 README 以了解您必须执行的额外命令”)。

如果 Buildout 是您项目不可或缺的一部分,那么它是一个做事的好地方。可以这样想:如果您在服务器上的生产和开发机器上的本地都需要它,那么最好在构建中进行。否则,您也必须在本地机器上运行 fabric。你可以做到,但是...

我自己将织物与扩建结合使用。Buildout 用于设置项目本身,以及围绕它的所有内容的结构。一些例子:

  • 实际上从生产服务器上的 git 克隆构建。

  • Git pull(并检查正确的标签)。

  • 重新启动主管。

我的建议:在 pypi 上查找构建食谱,看看它们是否对你有用。它们是否为您节省了足够的工作量,从而值得深入研究完整扩展配置意味着的额外复杂性?如果你没有从构建中得到足够的东西,你最好只使用 fabric+pip 和你的结构文件中的一堆自定义命令。

于 2013-09-19T13:17:55.497 回答
3

看看fabtools ,它在你的 fabfile中添加了很多不错的构建功能。我曾与各种厨师、Puppet(核桃大锤)Ansible 和 Fabric 合作过。我发现 Ansible 非常适合陷入困境但不想学习语言的 devops 团队,但就个人而言,组织良好的 Fabric 项目会胜出。

于 2013-09-23T17:00:58.640 回答