首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Chef 自动化部署一个 Web 服务器(1)

使用 Chef 自动化部署一个 Web 服务器(1)

这是一个最好的时代,也是一个最坏的时代。他们都在直奔天堂,而我们都在直奔相反的方向。”“ ”的超级课程表融资千万美元、WhatsApp 被 Facebook 以 190 亿美元收购……这个时代仿佛到处都充满了机会。现在假设我们也决定放弃朝九晚五的工作,要开发出一款 Web 应用改变这个世界,顺便当上总经理、出任 CEO、赢取白富美、走向人生巅峰。七拼八凑,我们的应用做出来了。它的架构非常简单,如果非要描述的话,它的架构如图 1 所示:
图 1. 应用架构这么简单的应用,我们上网浏览一下资料,随便租个服务器,安装一个 Web 服务器,配置一下,应用顺利上线。
幸福总是来得太快,很快我们的应用就火了。随着访问量的增大,我们需要单独的数据库服务器,一个都不够,得来俩;应用服务器也不够用了,再多添几台,上一个负载均衡;对数据库的访问又成了性能瓶颈,增加些数据库缓存吧,最终,应用的架构变成了如下的样子:
图 2.    演进的应用架构现在问题来了,面对如此复杂的架构,怎么安装和配置这些服务呢?Chef 就是用来解决这个问题的。
第一份“菜谱”(recipe)让我们暂且就此打住,先来看看怎么使用 Chef。首先需要在一台 Linux 机器上安装 。如果您实在找不到一台 Linux 机器也没有关系,可使用一个用于教学用途的 ,该虚拟机上已经预装了 Chef Development Kit,可以直接使用。
Recipe 是 Chef 中主要执行任务的地方,翻译成中文是“菜谱”的意思。我们的第一份“菜谱”的主要功能是使用 Chef 生成一个文本文件,其内容为:Hello Chef。让我们先新建一个 chef-repo 目录,用来存放“菜谱”,然后在该目录下创建第一个“菜谱”:hello.rb,其内容如下:
清单 1. hello.rb
1
2
3
file 'motd' do
content 'Hello Chef’
end




在命令行中执行:chef-client --local-mode hello.rb,输出如下:
图 3. 输出可以看到,命令执行后生成 motd 文件,该文件的内容为字符串:Hello Chef。这就是我们的第一份“菜谱”,虽然简单,但是却概括了 Chef 的基本工作原理:使用一个 Ruby 文件,即“菜谱”描述服务器应有的状态,然后执行 Chef 命令配置服务器。
您可尝试再次执行 chef-client --local-mode hello.rb,Chef 会检测到 motd 文件已经存在,且文件内容和“菜谱”中所描述的一致,因此不进行任何操作;您还可尝试手动删除 motd 文件,再次执行 chef-client --local-mode hello.rb 后,又重新生成了 motd 文件。这正是配置服务器所需要的,每次配置都能保证状态一致。
当然,我们的第一份“菜谱”只是一道开胃小菜,下面我们看看如何使用 Chef 部署一个 Web 服务器。
部署 Web 服务器部署一个 Web 服务器比生成一个文件复杂,但道理却是相同的,让我们先来看看代码:
清单 2. webserver.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package 'httpd'
service 'httpd' do
    action [:start, :enable]
end

file '/var/www/html/index.html' do
  content '<html>
  <body>
    <h1>hello world</h1>
  </body>
</html>'
end

service 'iptables' do
  action :stop
end




这段代码总共分成四部分:第一部分安装 Apache HTTP Server;第二部分启动 HTTP 服务;第三部分生成主页面;第四部分停用 iptables 服务,这一步主要是因为有些 Linux 安装后,默认只打开 22 端口,其他端口是被禁止的,停用 iptables 服务后,就可以顺利访问 80 端口了,即 HTTP 协议所使用的端口。聪明的您朋友们,您能将这四部分和代码对应起来吗?
这里要注意的是,这四部分的顺序非常重要,必须先安装 Apache HTTP Server,然后启动它,这一点也不难想象,我们手动配置服务器时不也如此吗?
将文件保存后,让我们再来运行 sudo chef-client --local-mode webserver.rb,因为脚本里包含安装软件包的操作,所以需要 root 权限,如果您不是以 root 账号登录(相信您不会真的这样做吧?),务必在命令行前加 sudo,否则,Chef 会报错。如果得到类似下面的输出,就证明服务器配置成功,打开浏览器,输入 ,可以看到刚才定制的主页了吧?
图 4. 输出然而,作为有“洁癖”的程序员,不难发现“菜谱”的第二部分好像混入了什么奇怪的东西:一段 HTML 代码。这段 HTML 代码明显和其他部分不协调,如果网页再变得复杂点,这份“菜谱”会变得很难管理。因此,我们得想点什么办法,管理“菜谱”。方法就是“烹饪手册”(cookbook)。
返回列表