你使用什么工具部署Web应用程序?

6
我们希望能够自动化部署Web应用程序,特别是当从本地开发转移到远程服务器时。
我们目前的技术堆栈是在远程使用LAMP,在本地使用MAMP,但是无论环境如何,我都对人们在此任务中使用的技术感兴趣。
我不仅指移动文件,还包括考虑其他任务,例如:
- 设置数据库模式 - 管理配置 - 部署所需的其他任务(创建日志文件等)

Mercurial - Aaron Maenpaa
7个回答

3

尽可能地,在可行的情况下,我更喜欢自动化部署,比如使用Ant,即使FTP部署也可以相对容易地处理。 自动化部署,就像自动化构建一样,消除了猜测和错误,并且通过定义提供至少新程序员理解过程所必需的最低限度文档(即构建脚本)。


3
在以前的公司中,我们使用的一个东西是 RPM 文件。当我们构建软件时,所有不同部分都会被打包成 RPM 文件,然后部署到服务器上。
以下是具体步骤:
  1. 集群中的主服务器有一个包含所有服务器及其角色的列表,用于确定每个服务器需要哪些软件包。
  2. 部署阶段将检查每个服务器上的版本,并确定哪些服务器需要升级。每个服务器都将获得它所需的任何新软件包的副本。
  3. 部署脚本将安装每个服务器的软件包,并管理预安装和后安装的检查和任务。
  4. 部署系统将触发一个单独的配置管理系统进程,读取配置模板以为每个服务所需的服务器(基于其角色列表)生成配置文件,并将其分配给服务器。
  5. 部署系统将为每个系统生成需要执行的操作列表(需要重新启动的服务),并将其呈现给管理更新的操作员。操作员将根据情况执行重启操作(如果更新发生在客户端计划维护窗口期间或者我们有一个中午服务重启的工作订单),或者创建一个夜班人员的工单列表,列出需要完成的任务。
RPM 是一个可怕的 hack,但由于我们的客户都在运行 Red Hat Linux(按照我们的要求),所以它非常合理。如果我有选择,我会选择像 Debian 或 Ubuntu 这样的系统,并设置一个仓库,让所有系统都可以从中拉取。尽管如此,它对数百个客户,总共数千台服务器都运行良好。相当不错。

2

当我们需要上线时,我们使用“svn export”。这样可以使我们的代码处于版本控制下,并让我们在测试环境或本地计算机上积极开发。


2

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

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

它被设计用于并行或串行地上传文件并在多台服务器上运行shell命令。这些命令被分组为任务(常规Python函数)并在“fabfile”中指定。

它有点像一个简化版的Capistrano,除了它是用Python编写的,不需要您部署Rails应用程序,并且“put”命令有效。

与Capistrano不同,Fabric希望保持小巧、轻便、易于更改,而不绑定到任何特定的框架。


有关 Fabric 的更多详细信息:https://dev59.com/9nM_5IYBdhLWcg3wyWOt - hughdbrown

1

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

在不需要额外设置的情况下,Capistrano:

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

所有这些都具有回滚功能。

另一个好的选择是使用操作系统的打包系统(RPM、deb/apt等)。这往往需要熟悉您的操作系统及其政策,但如果您知道该做什么,它会非常适合其他工具。


0

rsync是一个很好的工具。

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

一个 web 服务器的部署只不过是一个“cp”命令,这取决于哪些文件发生了变化。您需要建立一个过程来跟踪更改的文件,从源代码控制中提取这些文件,然后推送这些更改。当您处理 PHP 文件时,如何知道要推送哪些文件?这就是问题所在。解决这个问题,您就会做得很好。复制文件并“部署”它们的工具是简单的一部分。


0

我是一个.NET开发者,所以对于我们来说,使用的是CruiseControl + Nant

不过,我听说Jet Brains TeamCity非常棒。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接