我们使用什么来部署Web应用程序?

时间:2020-03-06 14:38:11  来源:igfitidea点击:

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

我们当前的堆栈是远程的LAMP,本地的MAMP,但是我对人们在什么环境下使用什么来完成此任务感兴趣?

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

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

解决方案

rsync->伟大的工具

但是,答案取决于环境。我们使用什么进行源代码控制?我们对构建系统使用什么?等等。

根据更改的文件,部署Web服务器不过是一个" cp"命令。我们需要构建一个过程来跟踪更改的文件,将这些文件从源代码管理中拉出,然后推送这些更改。在处理PHP文件时,如何知道要推送哪些文件?那就是问题所在。我们解决了,就可以了。 cp文件并"部署"它们的工具很容易。

我们需要在需要上线时使用" svn导出"。使我们的代码受版本控制,并让我们在测试盒或者本地计算机上积极开发代码。

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

我是一个.NET专家,所以对我们来说是CruiseControl + nant

我已经听到关于Jet Brains TeamCity的好消息。

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

Fabric is a simple pythonic remote deployment tool.
  
  It is designed to upload files to, and run shell commands on, a number of servers in parallel or serially. These commands are grouped in tasks (regular python functions) and specified in a 'fabfile'.
  
  It is a bit like a dumbed down Capistrano, except it's in Python, dosn't expect you to be deploying Rails applications, and the 'put' command works.
  
  Unlike Capistrano, Fabric want's to stay small, light, easy to change and not bound to any specific framework.

以前的公司中使用的一件事是信不信由RPM文件。构建软件时,软件的所有各个部分都将打包到RPM文件中,然后将其部署到服务器中。

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

RPM是一个骇人听闻的技巧,但是由于我们的客户都在运行Red Hat Linux(根据我们的要求),所以这很合理。如果可以选择的话,我会选择Debian或者Ubuntu这样的系统,并建立一个系统可以从中提取的存储库。尽管如此,它对于数百个客户端(总共有数千台服务器)仍然有效。挺整洁的。

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

无需额外设置,Capistrano:

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

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

另一个不错的选择是使用操作系统的打包系统(RPM,deb / apt等)。这往往要求我们对操作系统及其策略有很好的了解,但是如果我们知道自己在做什么,则可以与其他工具很好地配合。