LoginSignup
4

More than 5 years have passed since last update.

chef-zeroでRailsが動きそうな環境を構築する

Last updated at Posted at 2016-09-16
1 / 18

やること

vagrantで立てたubuntuサーバにchef-zeroを使って、postgresqlやrbenvをインストールする


準備


vagrantでプロビジョニング対象を構築する

$ vagrant init bento/ubuntu-14.04
$ vim Vagrantfile
# コメントアウトを外す
#  config.vm.network "private_network", ip: “192.168.33.10"
$ vagrant up
$ vagrant ssh
$ ssh-add ~/.vagrant.d/insecure_private_key
$ ssh vagrant@192.168.33.10

chefのインストール

chef-dkをインストールする

knife-zeroをインストールする

$ sudo chef gem install knife-zero

構成

IMG_0921.JPG


プロビジョニングしてみる


repoを作る

$ chef generate repo chef-repo
$ cd chef-repo
$ mkdir .chef

knifeの設定ファイルを作成する

.chef/knife.rb
local_mode true
knife[:automatic_attribute_whitelist] = []
cookbook_path [
  './cookbooks',
  './site-cookbooks'
]

# knife[:ssh_password] = 'vagrant'

bootstrapする

$ chef exec knife zero bootstrap 192.168.33.10 -x vagrant --sudo
$ chef exec knife node list

利用するcookbookを宣言する

Berksfile
source "https://supermarket.chef.io"

cookbook 'postgresql', '~> 4.0.6'
cookbook 'database', '~> 5.1.2'
cookbook 'rbenv', '~> 1.7.1'
cookbook 'imagemagick', '~> 0.2.3'

Chef Supermarket
先人の皆様が作ってくれたcookbookが公開されている


cookbookをダウンロードしてくる

$ chef exec berks vendor cookbooks
$ chef exec knife cookbook list

cookbookを作る

supermarketから持ってきたcookbookを組み合わせて用途に合わせたcookbookを作る。
今回はRailsが動きそうな環境。

$ mkdir site-cookbooks
$ chef exec knife cookbook create app -o site-cookbooks
$ cd site-cookbooks/app

依存するcookbookを書く

site-cookbooks/app/metadata.rb
...

depends 'postgresql'
depends 'database'
depends 'rbenv'
depends 'imagemagick'

サーバの構成を定義する
※現状、database_userが動かない...

site-cookbooks/app/recipes/default.rb
include_recipe 'apt'
include_recipe 'postgresql::client'
include_recipe 'postgresql::server'
include_recipe 'postgresql::contrib'
include_recipe "database::postgresql"

include_recipe 'rbenv::default'
include_recipe 'rbenv::ruby_build'
include_recipe 'imagemagick::default'

# create postgres user
postgresql_connection_info = {
  :host     => '127.0.0.1',
  :port     => node['postgresql']['config']['port'],
  :username => 'postgres',
  :password => node['postgresql']['password']['postgres']
}

postgresql_database_user 'sample-user' do
  connection postgresql_connection_info
  password   'ultra_secret'
  action     :create
end

# install ruby
rbenv_ruby "2.3.1"
rbenv_gem "bundler" do
  ruby_version "2.3.1"
end

# libmagickwand-dev
package 'libmagickwand-dev' do
  action :install
end

run_listを編集

対象のサーバに対してどのrecipeを適用するか指定する。

$ cd [chef-repo-root]
$ EDITOR=vim knife node edit vagrant.vm
...
"run_list": [
  "recipe[app::default]"
]
...

cookbookを適用

$ chef exec knife zero converge name:vagrant.vm --attribute knife_zero.host  -x vagrant --sudo

確認

$ ssh vagrant@192.168.33.10

$ psql
$ rbenv versions

🎉


参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4