你如何使用pip,virtualenv和Fabric来处理部署?

时间:2010-03-14 09:23:20

标签: python deployment virtualenv fabric pip

您的设置,技巧,最重要的是您的工作流程是什么?

这些工具很棒但是仍然没有附加其使用的最佳实践,因此我不知道使用它们的最有效方法是什么。

  • 您是使用pip捆绑还是始终使用 下载?
  • 你手动设置Apache / Cherokee / MySQL还是做 你有一个脚本吗?
  • 您是否将所有内容都放在virtualenv并使用--no-site-packages
  • 您是否在一些项目中使用了一个virtualenv?
  • 你使用Fabric做什么(哪一部分 您的部署是否有脚本)?
  • 您是将Fabric脚本放在客户端还是服务器上?
  • 您如何处理数据库和媒体文件迁移?
  • 您是否需要构建工具,例如SCons
  • 您的部署步骤是什么?你多久经常表演一次?

2 个答案:

答案 0 :(得分:79)

“最佳做法”非常依赖于背景,所以我不会声称我的做法是最好的,只是因为它们适合我。我的工作主要是小型网站,所以没有多服务器部署,CDN等。我确实需要支持Webfaction共享主机部署,因为一些客户需要他们能找到的最便宜的主机。我经常需要在不同的环境中多次部署站点,因此可重复的脚本部署非常重要。

  • 我不使用pip包,我从requirements.txt安装。我使用我需要的所有内容运行自己的chishop服务器,因此构建过程中没有多个单点故障。我还在我的开发机器上使用PIP_DOWNLOAD_CACHE来加速引导项目环境,因为我的大多数项目的需求都相当重叠。
  • 我有Fabric个脚本,可以在Ubuntu VPS上自动设置和配置nginx + Apache / mod_wsgi,或者在Webfaction共享主机上配置等价物,然后部署项目。
  • 我不使用带有virtualenv的--no-site-packages,因为我更喜欢在系统级安装缓慢移动的编译包(Python Imaging Library,psycopg2);在每个virtualenv内部做太慢和麻烦。我没有遇到污染系统站点包的问题,​​因为我一般不会污染它。无论如何,你可以在virtualenv中安装不同版本的东西,它将优先。
  • 每个项目都有自己的virtualenv。我有一些bash脚本(不是virtualenvwrapper,虽然很多人使用它并喜欢它),它可以自动将给定项目的virtualenv部署到已知位置并将该项目的需求安装到其中。
  • 整个部署过程,从裸Ubuntu服务器VPS或Webfaction共享主机帐户到正在运行的网站,使用Fabric编写脚本。
  • Fabric脚本是项目源代码树的一部分,我从本地开发结帐中运行它们。
  • 我不需要SCons(我知道)。

部署

目前,新的部署分为以下几个步骤:

  • fab staging bootstrap(服务器设置和初始代码部署)
  • fab staging enable(启用此站点的Apache / nginx配置)
  • fab staging reload_server(重新加载Apache / nginx配置)。

当然可以将它们组合成一个命令行fab staging bootstrap enable reload_server

完成这些步骤后,使用新代码更新部署只是fab staging deploy

如果我需要回滚更新fab staging rollback。回滚中没有什么特别神奇的东西;它只是将代码回滚到最后部署的版本并将数据库迁移到以前的状态(这需要记录一些关于部署后数据库迁移状态的元数据,我只是在文本文件中执行此操作)。

实施例

我几年没有使用过这个答案中描述的Fabric脚本,因此根本没有维护它们,我对它们的质量不承担责任:-)但是你可以在https://bitbucket.org/carljm/django-project-template看到它们 - 在repo根目录的fabfile.pydeploy/子目录中。

答案 1 :(得分:9)

我使用fabric来构建和部署我的代码,并假设已经为此设置了一个系统。我认为像puppet这样的工具更适合自动安装apache和mysql之类的东西,尽管我还没有真正将它包含在我的工作流程中。

另外,我通常每个项目都有不同的virtualenv。它们是从python的“基础”安装创建的 - 正如Carl指出的那样 - 你可以留下一些全局的python库。

因此,就工作流而言:

  1. puppet安装所需服务(Web服务器,数据库,ssh服务器......)
  2. 用于设置所需用户和基本文件夹的木偶
  3. fabric为应用程序创建virtualenv
  4. fabric to pip install from requirements.txt
  5. 面料来部署您的应用
  6. fabric用于部署配置文件(Web服务器,...)