6

我们正在寻求自动化我们的 Web 应用程序部署,特别是在从本地开发到远程服务器时。

我们当前的堆栈是远程的 LAMP,本地的 MAMP,但我很感兴趣的是,不管他们的环境如何,人们都在使用什么来完成这项任务?

我不仅仅是在谈论移动文件,我还意味着考虑其他任务,例如:

  • 设置数据库模式
  • 管理配置
  • 部署所需的其他任务(创建日志文件等)
4

7 回答 7

3

在可能的情况下,我更喜欢使用 Ant 等自动化部署,甚至 FTP 部署也可以相当容易地处理。自动化部署,很像自动化构建,将猜测工作和错误排除在流程之外,并且根据定义,至少为新程序员理解流程提供了最少必要的文档(即构建脚本)。

于 2008-09-24T00:55:52.977 回答
3

以前的公司使用的东西之一是——信不信由你——RPM 文件。当我们构建我们的软件时,它的所有不同部分都将被打包成 RPM 文件,然后部署到服务器上。

  1. 集群中的主服务器具有所有服务器及其角色的列表,用于确定每台服务器需要哪些包。
  2. 部署阶段将检查每台服务器上的版本并确定哪些服务器需要升级。每台服务器都会获得它需要的任何新包的副本,
  3. 每个服务器都将通过部署脚本安装其软件包,该脚本将管理安装前和安装后的检查和任务。
  4. 部署脚本将触发一个单独的进程,即配置管理系统,以读取配置模板以生成服务器所需的任何服务的配置文件(基于其角色列表),并将这些服务发送给服务器
  5. 部署系统将为每个系统生成一个需要采取的操作列表(要重新启动的服务),并将这些操作呈现给管理更新的操作员。然后,操作员将执行重新启动(如果更新发生在客户的计划维护窗口期间,或者我们有一个中午服务重新启动的工作订单),或者为夜间工作人员创建一张包含任务列表的工单做完了。

RPM 是一个可怕的 hack,但由于我们的客户都在运行 Red Hat Linux(根据我们的要求),它非常有意义。如果我有选择,我会选择像 Debian 或 Ubuntu 这样的系统,并设置一个系统都可以从中提取的存储库。尽管如此,它仍然适用于数百个客户端,总共有数千个服务器。挺整洁的。

于 2008-09-24T01:51:29.147 回答
2

当它需要上线时,我们使用“svn export”。将我们的代码保持在版本控制之下,并让我们在测试盒或本地计算机上积极开发它。

于 2008-09-24T00:55:03.167 回答
2

我还没有尝试过,但我正在考虑将来使用Fabric :

Fabric 是一个简单的 Pythonic 远程部署工具。

它旨在将文件上传到并行或串行的多个服务器并在其上运行 shell 命令。这些命令在任务(常规 python 函数)中分组并在“fabfile”中指定。

它有点像一个愚蠢的 Capistrano,除了它是用 Python 编写的,不要指望你要部署 Rails 应用程序,并且“put”命令可以工作。

与 Capistrano 不同,Fabric 希望保持小巧、轻便、易于更改且不受任何特定框架的约束。

于 2008-09-24T01:19:12.657 回答
1

Capistrano非常适合这种事情。它来自 Ruby on Rails 生态系统,最初与部署 Rails 应用程序密切相关。由于很多人注意到它对于远程服务器控制很方便,因此它变得更加通用。

无需额外设置,Capistrano:

  • 使用 SSH 连接到应用服务器
  • 将 Subversion 中的最新源代码签出到一个新的、过时的文件夹
  • 通过更新一个或两个符号链接来激活新版本
  • 重新加载应用程序服务器

所有这一切都具有回滚功能。

另一个不错的选择是使用操作系统的打包系统(RPM、deb/apt 等)。这往往需要对您的操作系统及其策略非常熟悉,但如果您知道自己在做什么,则非常适合其他工具。

于 2008-11-22T11:07:59.473 回答
0

rsync->很棒的工具

但是,答案取决于您的环境。你用什么来控制源代码?你用什么构建系统?等等。

Web 服务器的部署只不过是一个“cp”命令,具体取决于更改了哪些文件。您需要构建一个流程来跟踪更改的文件,从源代码管理中提取这些文件,然后推送这些更改。在处理 PHP 文件时,如何知道要推送哪些文件?那就是问题所在。你解决它,你会没事的。cp 文件和“部署”它们的工具是简单的部分。

于 2008-09-24T00:50:48.980 回答
0

我是 .NET 人,所以对我们来说是 CruiseControl + nant

不过,我听说过关于Jet Brains TeamCity的好消息。

于 2008-09-24T00:56:19.420 回答