如何使用 pip、virtualenv 和 Fabric 来处理部署?
-
19-09-2019 - |
题
你的设置、你的技巧是什么,最重要的是你的工作流程是什么?
这些工具很棒,但仍然没有关于它们的使用的最佳实践,所以我不知道使用它们的最有效的方法是什么。
解决方案
“最佳实践”非常依赖于上下文,因此我不会声称我的实践是最好的,只是它们对我有用。我主要在小型网站上工作,因此没有多服务器部署、CDN 等。我确实需要支持 Webfaction 共享托管部署,因为某些客户需要他们能找到的最便宜的托管。我经常需要在不同的环境中多次部署站点,因此可重复的脚本化部署至关重要。
- 我不使用 pip 捆绑包,我从requirements.txt 安装。我自己经营 奇肖普 服务器包含我需要的所有内容,因此构建过程中不会出现多个单点故障。我还在我的开发计算机上使用 PIP_DOWNLOAD_CACHE 来加速引导项目环境,因为我的大多数项目的需求有相当多的重叠。
- 我有 织物 可以在 Ubuntu VPS 上自动设置和配置 nginx + Apache/mod_wsgi 的脚本,或在 网派 共享托管,然后部署项目。
- 我不将 --no-site-packages 与 virtualenv 一起使用,因为我更喜欢在系统级别安装缓慢移动的编译包(Python 成像库、psycopg2);在每个 virtualenv 中执行起来太慢且麻烦。我没有遇到污染系统站点包的问题,因为我通常不会污染它。无论如何,您可以在 virtualenv 中安装不同版本的东西,它将优先。
- 每个项目都有自己的 virtualenv。我有一些 bash 脚本(不是 虚拟环境包装器, (尽管很多人使用它并且喜欢它)自动将给定项目的 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 - 在 fabfile.py
在 repo 根目录中,以及 deploy/
子目录。
其他提示
我使用 Fabric 来构建和部署我的代码,并假设已经为此设置了系统。我认为像这样的工具 木偶 更适合自动安装 apache 和 mysql 之类的东西,尽管我还没有真正将它包含在我的工作流程中。
另外,我通常每个项目都有不同的 virtualenv。它们是从 python 的“基本”安装创建的,正如 Carl 指出的那样,您可以保留一些全局 python 库。
因此,就工作流程而言,将是:
- puppet 安装所需的服务(Web 服务器、数据库、ssh 服务器...)
- puppet 设置所需的用户和基本文件夹
- Fabric 为应用程序创建 virtualenv
- 从requirements.txt 进行fabric 到pip install
- Fabric 来部署您的应用程序
- Fabric 部署配置文件(Web 服务器,...)