【CentOS7】ChefServer構築手順(ChefServerとWorkstationを同一ホストに共存させる場合)


調べても調べてもChefSoloの構築方法ばかり…。
ChefServerを構築したので手順をまとめます。

備忘録です。

# 前提 
 
- CentOS7 
- ChefServer + Client構成 
- Chef-soloじゃないよ 
- Workstationとchefserverを同居させます。 
- Vagrant使います 
- Chef-Server12.6.0でやります。

# 仮想サーバを立てる

```Vagrantfile:Vagrantfile 

Vagrant.configure(2) do |config| 

    $script = <<EOF 
        yum install wget 
        yum -y install ibus-kkc vlgothic-* 
        localectl set-locale LANG=ja_JP.UTF-8 
        source /etc/locale.conf 
    EOF 
 
    config.vm.define "chef-server" do |node| 
        node.vm.box = "CentOS7.0" 
        node.vm.hostname = "chef-server" 
        node.vm.network :public_network 
        node.vm.network :private_network, ip: "192.168.100.5" 
        node.vm.provision :shell, :inline => $script 
    end 
 
    config.vm.define "chef-client01" do |node| 
        node.vm.box = "CentOS7.0" 
        node.vm.hostname = "chef-client01" 
        node.vm.network :public_network 
        node.vm.network :private_network, ip: "192.168.100.6" 
        node.vm.provision :shell, :inline => $script 
    end 
 
end 
 
```

```sh:ローカル 
$ vagrant up 
```


# ChefServerインストール

vagrantで立ち上げたホスト「chef-server」に対してインストールします。

```sh:192.168.100.5 
#chefの動作要件に、sslちゃんとやれと書いてあった気がする 
$ sudo yum install -y wget ntp openssl-devel 
#chefの動作要件に、NTPちゃんとやれと書いてあった気がする 
$ sudo ntpdate ntp.nict.jp 
#chefServerのrpmを落としてくる 
$ wget https://packages.chef.io/stable/el/7/chef-server-core-12.6.0-1.el7.x86_64.rpm 
#ChefServerをインストールする 
$ sudo rpm -Uvh ./chef-server-core-12.6.0-1.el7.x86_64.rpm 
#なんか設定する 
$ chef-server-ctl reconfigure 
#確認する 
$ chef-server-ctl status 
#テストする 
$ chef-server-ctl test 
#ユーザをつくる 
$ chef-server-ctl user-create admin firstname familyname spinach.jp@gmail.com 'P@ssw0rd' --filename /home/vagrant/.chef/admin.pem 
#グループ的なやつを作る 
$ chef-server-ctl org-create chef "Chef" --association_user admin --filename /etc/chef-server/chef-validator.pem 
```

# Workstationのインストール 
ChefServerに対してCookbookをアップロードしたりいろいろするWorkStationをインストールします。

```sh:192.168.100.5 
$ wget https://packages.chef.io/stable/el/7/chefdk-0.14.25-1.el7.x86_64.rpm 
$ rpm -Uvh ./chefdk-0.14.25-1.el7.x86_64.rpm 
 
#workstationのknifeを設定 
$ knife configure 
#適当にEnter連打 
#すると、~/.chef/knife.rbが出力されるので編集する 
$ vi ~/.chef/knife.rb 
```

↓こうする 

```sh:knife.rb 
log_level                :info 
log_location             STDOUT 
node_name                'admin' 
client_key               '/home/vagrant/.chef/admin.pem' 
validation_client_name   'chef-validator' 
validation_key           '/etc/chef-server/chef-validator.pem' 
cookbook_path [ '~/chef-repo/cookbooks'] 
 
chef_server_url          'https://chef-server:443/organizations/chef' 
syntax_check_cache_path  '/home/vagrant/.chef/syntax_check_cache' 
``` 

```sh:192.168.100.5 

#動作確認 
$ cp /var/opt/opscode/nginx/ca/chef-server.crt /root/.chef/trusted_certs/ 
$ knife ssl check 
Connecting to host chef-server:443 
Successfully verified certificates from `chef-server' 
``` 

**注意点**
ChefServerへはIP指定でのアクセスではなく、名前解決できるドメイン名でアクセスする必要があります。
その為、/etc/hostsの中身に、```chef-server``` を記載しておく必要があります。

# ChefClientインストール 
Workstationから、対象のサーバに対してChefClientをインストールします。
ちなみに、この作業と同時に、対象のホスト情報がChefServerに登録されます。

```sh:192.168.100.5 
knife bootstrap 192.168.100.6 -x root -P vagrant --sudo 
```

# Cookbookの作成 

```sh:192.168.100.5 
$ mkdir ~/chef-repo 
$ cd ~/chef-repo 
$ mkdir cookbooks 
$ cd cookbooks 
$ chef generate cookbook create_httpd 
$ chef generate template create_httpd index.html
```

# レシピの反映

```sh:192.168.100.5
#レシピをいじったら、ChefServerに対してアップロード 
$ knife upload cookbook
#対象のホストからchef-clientコマンドを実行
$ knife ssh  192.168.100.6 'sudo chef-client' --manual-list --ssh-user root --ssh-password 'vagrant' 
```