我们希望了解如何自动将Ubuntu虚拟机configuration为应用程序的登台服务器,testing登台代码,然后将部署脚本部署到生产服务器(而不是通过ssh安装在登台服务器上的所有人,复制文件覆盖,手动编辑configuration等)
如果需要的话,我们可以转移到AWS,但是现在我们可以在Azure上运行 – 我们基本上可以在Azure上获得SSH访问的Ubuntu虚拟机,所以它不应该与其他configuration基于Linux的服务器的方式不同想像
我们想要的脚本基本上是:
如果工作正常,我们希望自动将Git中的新代码推送到我们的生产服务器,而无需手动编辑wordpressconfiguration文件等等。 但是,这与通过脚本设置临时环境的问题有点分离
到目前为止我遇到的工具是这些(由于低代表代表不能提供链接)
在深入研究之前,我想知道是否有人对我们的需求有一个满意的看法。
你真正想要的是解决两个不同(但密切相关)的问题的解决scheme:
这两者之间有一些重叠,而当你刚开始的时候,你的基础架构的哪些部分可能会使用哪些工具。 不过,下面是一些通用的指导原则,
configurationpipe理工具通常遵循资源导向的 幂等模型。 也就是说,您将系统build模为具有状态的一组资源,并持续运行您的configurationpipe理工具,以查看是否有任何外观与规范不同。 如果资源不处于该状态,则有一些types特定的逻辑将资源置于该状态。 软件包或用户帐户是一种简单明显的资源types,但您也可能拥有ElasticSearch模板,SELinux数据库中的条目或Nagios主机,这些主机也可以在您select的configurationpipe理系统中声明为资源。
作为一个简单的例子,一个软件包可能已经安装或者没有安装 ,并且可能会附带一个版本。 一个configurationpipe理工具将能够采取一个configuration规范,说包X应该被安装 ,看到它目前没有安装,并采取正确的步骤,使其从未安装到安装状态(显然,通过安装)。
幂等性意味着你可以应用相同的configuration十,一百或一千次,并得到完全相同的结果 – 只有需要改变的东西实际上改变了。 这与一个脚本相反,比如说,在一个configuration文件中增加一行数百行(这意味着你最终在这个文件中的同一行最多有一百次)。
使用这个模型的configurationpipe理系统的缺点是,你的资源之间的关联是相当松散的,它们不能很好地映射到像数据库导入或模式迁移这样的长时间运行的任务,而且它们通常不会给你控制堆栈中多个系统中应用的顺序。
木偶和厨师是configurationpipe理系统的例子。
部署自动化工具用于执行临时任务。 换句话说,当你需要做某件事时,你明确地运行它们。 (好吧,有时候你可以从一个触发器中隐式地运行它们,比如来自一个持续集成系统)。它们通常以可预测的方式编排多个系统; 例如,您可能只希望其中一台Web服务器在升级期间运行数据库迁移,并且只有在数据库迁移成功时才可以进行应用程序服务器升级,并且您可能希望应用程序服务器在所以在更新过程中,您不会拖延整个应用程序。 最重要的是, 当你告诉它的时候 ,你只希望这个过程开始。
Capistrano和Fabric是部署自动化工具的stream行示例。 对于单个服务器,您可以轻松地在应用程序中使用像Makefiles一样的东西。
在你的情况下,你可能需要一个configurationpipe理系统来处理你的数据库系统和PHP的安装,以及你的web服务器的configuration。 另一方面,您可能需要部署工具来处理数据库的创build以及testing数据的填充。 从Git下载应用程序代码可以通过configurationpipe理或部署自动化工具轻松进行build模,具体取决于哪种方法更适合您的需求。 不pipe你select哪种方法,人们对你的应用程序的configuration文件如何进入服务器有不同的意见。
当你使用类似这样的工具时,最重要的是如果你没有正确地使用它们,那么它们是一个完全的浪费。 换句话说,如果您使用了一种花哨的自动化部署方法来将应用程序放置到舞台上,而您的制作服务器实际上并不完全像您的花哨式舞台服务器,那么您已经花费了大量精力没有收获。 把事情做好,他们会很好地为你服务。
我更像一个RH家伙(我会用kickstart来做基础+傀儡来做剩下的事情),但无论如何,试试傀儡。 维基媒体已经发布了所有他们的木偶configuration文件的GIT应该很容易上手:
http://blog.wikimedia.org/2011/09/19/ever-wondered-how-the-wikimedia-servers-are-configured/
我知道这个答案可能听起来很奇怪,但考虑使用Hudson,你可以做任何你想做的事情,只要调整一下就可以了。
你在看什么是两件事情 –
我会build议使用厨师,你可以使用操作系统不可知论的厨师bootstrap。
第一部分,你只需要设置mariadb,nginx,php和其他包,这是简单的,与厨师简单。
第二部分是第一次设置 – 像导入数据库,设置dns,允许用户login所以设置ssh键,你仍然可以使用厨师,并进行检查,以便我们知道这些脚本需要第一次运行,如第一次启动系统
第三部分是连续部署,你需要弄清楚触发器(比如每个git checkin应该在本地机器上触发git刷新,这可以用简单的计划cron作业来完成,如果它们不匹配,那么它只是一个拉代码的问题)
既然你使用的是PHP,你没有重启服务器或类似的东西,所以它只是做一个git拉。
所以jgoldschrafe说的是有道理的; 我只是用一堆在客户端上运行的厨师脚本来做。 如果你有多个节点,我会设置厨师服务器,并作为厨师客户端运行。
我会使用Ansible – 开始使用Ansible比起Chef,Puppet或者Saltstack要简单得多,它们都做类似的工作,但是学习曲线更加陡峭(因为需要服务器,安装Puppet需要相当长的一段时间,而Ansible只是一个安装命令,不需要服务器。
Ansible可以很好地configuration在Azure上运行的Linux虚拟机,如果你想要的话也可以创buildAzure资源,如虚拟机,networking接口和networking安全组。 如果您更喜欢使用Azure CLI,则只要使用shell模块将CLI命令embedded到Ansible中,只要它们是幂等(即使再次运行,也具有相同的效果)。
查看组件的Ansible angular色 (来自第三方的可重复使用的脚本模块) – 有WordPress,MariaDB / MySQL和CloudFlareangular色。 首先尝试Jeff Geerling的angular色 ,如果他们涵盖了你所需要的,他们往往工作得很好。
然后你可以在这些angular色上面写一些特定的代码来做你想做的事情。
Ansible也适用于部署自动化,取代Fabric Capistrano(如果您喜欢Capistrano模型,请searchAnsistrano)。