# chef-server
这种方式,意味着你需要自己去架设一个Chef Server。
Chef Server分为企业版和开源版。我们以开源版本为示例。
#### 介质准备
从 Chef 官网([http://www.opscode.com/chef/install)下载](http://www.opscode.com/chef/install)下载) Chef Server 和 Chef Client 的安装包以及 Chef Repository 包。
-
Chef Server 安装包
打开[http://www.opscode.com/chef/install,](http://www.opscode.com/chef/install,) 点击"Chef Server"页,选择合适的操作系统,版本等,选择最新的 Chef Server 版本下载。
-
Chef Client 安装包
打开[http://www.opscode.com/chef/install,](http://www.opscode.com/chef/install,) 点击"Chef Client"页,选择合适的操作系统,版本等,选择最新的 Chef Client 版本下载。
-
从[https://github.com/opscode/chef-repo下载](https://github.com/opscode/chef-repo下载) Chef Repository (chef-repo-master.zip )
一个空的git库,用来构建你自己的chef。
#### 安装Server
Chef Server分为两种,一种是企业版,一种是开源版本,我们用开源版本做示例。[开源版本下载地址](http://www.getchef.com/download-open-source-chef-server-11/)
目前最新版本为Chef11, 是OpsCode和Facebook合作开发的,Chef Server的核心Api也用Erlang进行了重写,所以Chef11开始,Chef是Ruby+Erlang的混合体。
这里我推荐大家使用vagrant。 我是以vagrant + VirtualBox + ubuntu12.04 x86_64版本来做示例的, Vagrantfile配置如下。
~~~
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.hostname = "chef-server"
config.vm.network "public_network"
# ...
end
~~~
对于vagrant,本书不做介绍, 大家可以去网上搜罗各种相关文章。
安装:
~~~
1 Install the file using the correct method for your system (i.e. "dpkg -i chef-server.deb" for Debian)
因为我用的是ubuntu, 所以我执行命令安装 Chef Server 安装包:
sudo dpkg -i chef-server_11.1.4-1_amd64.deb
2 sudo chef-server-ctl reconfigure
此命令会创建 Chef Server11.x 的所有必需组件,包括 Erchef、RabbitMQ,、PostgreSQL 等。
~~~
验证 Chef Server 11.x 是否安装成功。可通过两种方式验证:
- 一是在 Chef Server 上运行"$ sudo chef-server-ctl test"命令,此命令会运行 chef-pedant 的测试组件并报告所有组件正常工作,安装正确。
-
二是直接在浏览器中打开 Chef Server 的页面:
安装好以后, 在本地机器设置hosts:
~~~
192.168.33.11 local.chef.com
~~~
[https://local.chef.com](https://local.chef.com) ,若能出现登录界面,说明 Chef Server 已经正确启动。
-
还有种方式,就是执行ps -ef|grep chef, 看看Chef Server相关的进程是否启动。
![Chef Server UI](https://box.kancloud.cn/2015-08-23_55d9d7ad67b9d.png)
*chef server UI*
![Chef Server UI](https://box.kancloud.cn/2015-08-23_55d9d7ad7ba14.png)
*chef server UI*
#### 安装 Chef Workstation
经过较长的等待,我们的Chef Server安装好了之后,就可以配置我们的Chef Workstation环境了。
Chef Workstation,就是我们的工作台。它包含一系列工具,比如chef client、Ruby、Knife等。
-
安装Chef Client
安装chef-client有很多种方式:
-
**第一种**: 安装[omnibus installer](http://docs.getchef.com/install_omnibus.html)
Ominibus Installer是一个Chef的安装脚本。执行命令:
~~~
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
~~~
以上命令不只会在机器上安装chef-client,还会安装Ruby语言,Knife等一系列工具,安装结束后输入以下命令来确认安装没有问题:
~~~
$ chef-client -v
Chef: 11.12.8
~~~
chef-client安装完成之后,会在/opt生成如下的目录结构:
~~~
/opt
/chef
/bin
/embedded
/bin
/include
/lib
/share
/ssl
~~~
-
**第二种方法**,直接下载Chef Client 安装包。
-
**第三种方法**, 先安装Ruby, 然后执行gem install chef
因为我是一个Rubyist,所以我倾向于第三种方法。
-
配置chef repo
- 直接使用opscode的chef-repo就可以了。
~~~
```
mkdir chef-repo
cd chef-repo
git clone https://github.com/opscode/chef-repo.git .
```
- 在chef-repo目录下创建.chef目录
- 将 Chef Server 上的 admin.pem 和 chef-validator.pem 文件(位于/etc/chef-server) 拷贝到.chef 目录中
- 运行"knife configure --initial" 命令配置 Chef Workstation, 根据提示来输入配置信息。
~~~
-
验证Chef Workstation是否配置成功
~~~
# knife client list
chef-validator
chef-webui
# knife user list
admin
vagrant
~~~
~~~
说明:knife,是Chef提供的命令行工具,用于对集群中节点进行管理。此命令在后面还会有介绍。
~~~
### 注册一个node
现在我们已经装好了Chef Server和Chef Workstation, 我们接下来就可以创建一个Chef node, 也就是你要用chef来管理配置的那台机器。
我们使用另外一台vagrant虚拟机来当作node
~~~
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.hostname = "chef-node"
config.vm.network :private_network, ip: "192.168.33.12"
# ...
end
~~~
执行命令:
~~~
knife bootstrap 192.168.33.12 --sudo -x vagrant -P vagrant -N node2
~~~
这样,我们就把这个虚拟机注册为名叫node2的Chef节点。
![Chef Node](https://box.kancloud.cn/2015-08-23_55d9d7ad8ce73.png)
*chef node - node2*
### 总结
到此为止,我们就装好了Chef 的整个环境。就可以使用Chef来管理各个node了。
在安装的过程中有一些需要注意的地方:
-
执行knife configure --initial的时候, 要注意你的配置。
因为knife是通过pem文件和Chef Server交互的,以及要注意knife.rb中设置的登陆用户名,可以执行knife user list命令查看
-
如果Chef Server Webui有错误,可以去查看日志:
~~~
sudo vi /var/log/chef-server/chef-server-webui/current
~~~
如果要重启Chef Server Webui,可以去 /opt/chef-server/init目录下, 使用命令
~~~
sudo ./chef-server-webui restart
~~~
- 序
- Chapter 1: 初识Chef
- 一些背景
- Chef vs Puppet
- Chapter 2: Chef应用
- Chef架构
- Chef能做什么
- Chef组件
- Chef环境安装
- chef-server
- opscode-chef
- chef-solo
- Chef实战
- 实战前的必修理论
- 使用Chef
- Chapter 3: Ruby基础
- 对象与方法
- 标识符
- 类与模块
- 数据类型
- 真与假
- 控制语句
- 代码块
- Chapter 4: Chef源码架构
- Rubygems与gem
- bundler
- Chef源码组织
- Chapter 5: Rails基础
- Rails是什么
- MVC架构
- Restful
- Rails组成与项目结构
- Chapter 6: Chef Server WebUI
- Chef Server Webui组织结构
- Chef Rest API
- 参考