# 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*

*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 - 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
- 參考