chef でゼロからサーバ構築をやってみる
サーバ構築は開発マシンであるmacから「knife-solo」でサーバ構築を行います
※knife-soloの設定は以下の記事をに書いています
knife-soloを設定して開発マシン(mac)からchef-soloを実行する
設定を行うサーバは「sakura vps 1G」です、osはデフォルトの「centos6.3 x86_64」です
サーバは単純なLAMP環境です
以下構築のログになります、なお今回はできるだけopscode communityに公開されているcookbookを使っていこうかと思います
またサーバにログインするのは確認のみで設定をするのはすべてchefで行う予定です
構築ログ
chef を実行するユーザを作成
この作業のみサーバで実行する
$ ssh [ipaddress] -l root # useradd chef # passwd chef ユーザー chef のパスワードを変更。 新しいパスワード: 新しいパスワードを再入力してください: passwd: 全ての認証トークンが正しく更新できました。
sudo の設定を行う
# visudo chef ALL=(ALL) ALL
上記を追加する
対象サーバにchefを設定する
knife solo prepare で楽する
$ knife solo prepare chef@[IP address]
途中passwordを聞かれるので入力を行う
cookbook を作る
$ knife solo init [chef-repo]
※cookbookはローカルPCに作成するので管理しやすい場所に作って下さい
yum の設定
opscodeに公開されているcookbookを使う
cookbooksの中にcloneする
$ cd [chef-repo]/cookbooks $ git clone https://github.com/opscode-cookbooks/yum.git
上記の作業で「cookbooks」の中にyumディレクトリが作成されています
runlistにrecipeを追加
$ cd [chef-repo] $ vim node/node.json { "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]" ] }
userの作成/設定
いきなりですが、ユーザ追加のレシピは自分で用意します
group / userの追加を行う
$ cd [chef-repo] $ knife cookbook create users -o site-cookbooks $ vim site-cookbooks/users/recipes/default.rb # create group dm_user group 'dm_user' do group_name 'dm_user' gid 999 action :create end # create user dm_user user 'dm_user' do comment 'dm_user' group 'dm_user' home '/home/dm_user' shell '/bin/bash' password 'hogefuga' supports :manage_home => true action :create end
password の項目に指定する文字列は、設定したい値のhash値になります、以下のコマンドでhash値を求めます
$ sudo openssl passwd -1 "[password]" $1$8R8ZFsYI$2IcbmAyCsBfe4NbdwM/gW.
group にユーザを追加
$ cd [chef-repo] $ vim site-cookbooks/users/recipes/default.rb # group add user group 'dm_user' do action :modify members ['dm_user'] append true end
runlistにrecipeを追加
$ cd [chef-repo] $ vim node/node.json { "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]", "recipe[users]" ] }
sudo の設定
opscodeに公開されているcookbookを使う
cookbooksの中にcloneする
$ cd [chef-repo]/cookbooks $ git clone https://github.com/opscode-cookbooks/sudo.git
上記の作業で「cookbooks」の中にsudoディレクトリが作成されています
sudoの設定を行う、cloneしたcookbookの中にあるattributes/default.rbを編集
$ cd cookbooks/sudo/attributes $ vim default.rb default['authorization']['sudo']['groups'] = ['dm_user', 'chef'] ← 対象のグループを設定 default['authorization']['sudo']['users'] = ['dm_user', 'chef'] ← 対象のユーザを設定 default['authorization']['sudo']['passwordless'] = false default['authorization']['sudo']['include_sudoers_d'] = false default['authorization']['sudo']['agent_forwarding'] = false default['authorization']['sudo']['sudoers_defaults'] = ['!lecture,tty_tickets,!fqdn']
runlistにrecipeを追加
$ cd [chef-repo] $ vim node/node.json { "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]", "recipe[users]", "recipe[sudo]" ] }
rootログインの禁止
ここも自前で用意するのでとりあえずcookbookを作成
$ cd [chef-repo]/ $ knife cookbook create setting -o site-cookbooks
sshd_configのtemplateを用意して、templates/default/ に設定する
templates/default/ にファイルを置いたら sshd_config のファイル名を sshd_config.erbに変更する
$ cd [chef-repo]/site-cookbooks/setting/templates/default/ $ mv sshd_config sshd_config.erb
ファイル名の変更が完了したら、sshd_config.erbの中を編集する
$ vim sshd_config.erb #PermitRootLogin yes 以下のように編集 PermitRootLogin no
recipeを作成
$ cd [chef-repo]/site-cookbooks/setting/recipes $ vim default.rb service "sshd" do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end template "/etc/ssh/sshd_config" do source "sshd_config.erb" owner "root" group "root" notifies :reload, "service[sshd]" end
runlistにrecipeを追加
$ cd [chef-repo] $ vim node/node.json { "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]", "recipe[users]", "recipe[sudo]", "recipe[setting]" ] }
mysql の設定
opscodeに公開されているcookbookを使う
cookbooksの中にcloneする
$ cd [chef-repo]/cookbooks $ git clone https://github.com/opscode-cookbooks/mysql.git
上記の作業で「cookbooks」の中にmysqlディレクトリが作成されています
mysql の cookbookの中でincludeしているcookbookがあるのでcookbooksにcloneする
$ cd [chef-repo]/cookbooks $ git clone https://github.com/opscode-cookbooks/build-essential.git $ git clone https://github.com/opscode-cookbooks/openssl.git
runlistにrecipeとattributeを追加
$ cd [chef-repo] $ vim node/node.json { "mysql": { "server_root_password": "hogefuga", "server_repl_password": "hogefuga", "server_debian_password": "hogefuga" }, "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]", "recipe[users]", "recipe[sudo]", "recipe[setting]", "recipe[mysql::server]" ] }
追加しているattributeはmysqlのrootのパスワードを設定しています
php を設定
以前に作ったcookbookを使う
recipeをsite-cookbooksにコピーする
以下 recipe 単純にpackage でphpをinstallしているだけです、php.iniをtemplateで置き換え
%w{php php-pear php-cli php-common php-devel php-gd php-mbstring php-mysql php-pdo php-xml php-pecl-apc}.each do |suffix| package suffix do action :install end end template "/etc/php.ini" do source "php.ini.erb" owner "root" group "root" mode 0644 end # httpd の再起動処理を追加 service "httpd" do action [ :enable, :restart ] end
runlistにrecipeとattributeを追加
$ cd [chef-repo] $ vim node/node.json { "php": { "extension_dir": "/usr/lib64/php/modules", "upload_max_filesize": "16M", "post_max_size": "16M", "enable_dl": "On", "timezone": "date.timezone = Asia/Tokyo" }, "mysql": { "server_root_password": "hogefuga", "server_repl_password": "hogefuga", "server_debian_password": "hogefuga" }, "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]", "recipe[yum::epel]", "recipe[yum::remi]", "recipe[users]", "recipe[sudo]", "recipe[setting]", "recipe[php]", "recipe[selinux::disabled]" ] }
httpd を設定
以前に作ったcookbookを使う
recipeをsite-cookbooksにコピーする
以下 recipe 単純にpackage でhttpdをinstallしているだけです
変更する可能性が高いのでhttpd.confをtemplate化しておく
package "httpd" do action :install end service "httpd" do action [ :enable, :start] end template "/etc/httpd/conf/httpd.conf" do
source "httpd.conf.erb" owner "root" group "root" mode 0644 end
runlistにrecipeとattributeを追加
$ cd [chef-repo] $ vim node/node.json { "php": { "extension_dir": "/usr/lib64/php/modules", "upload_max_filesize": "16M", "post_max_size": "16M", "enable_dl": "On", "timezone": "date.timezone = Asia/Tokyo" }, "mysql": { "server_root_password": "hogefuga", "server_repl_password": "hogefuga", "server_debian_password": "hogefuga" }, "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]", "recipe[yum::epel]", "recipe[yum::remi]", "recipe[users]", "recipe[sudo]", "recipe[setting]", "recipe[php]", "recipe[httpd]", "recipe[selinux::disabled]" ] }
selinux を設定
opscodeに公開されているcookbookを使う
cookbooksの中にcloneする
$ cd [chef-repo]/cookbooks $ git clone https://github.com/opscode-cookbooks/selinux.git
上記の作業で「cookbooks」の中にselinuxディレクトリが作成されています
runlistにrecipeとattributeを追加
$ cd [chef-repo] $ vim node/node.json { "php": { "extension_dir": "/usr/lib64/php/modules", "upload_max_filesize": "16M", "post_max_size": "16M", "enable_dl": "On", "timezone": "date.timezone = Asia/Tokyo" }, "mysql": { "server_root_password": "hogefuga", "server_repl_password": "hogefuga", "server_debian_password": "hogefuga" }, "run_list":[ "recipe[yum::epel]", "recipe[yum::remi]", "recipe[users]", "recipe[sudo]", "recipe[setting]", "recipe[mysql::server]", "recipe[php]", "recipe[httpd]", "recipe[selinux::disabled]" ] }
以上で構築は終了です、opscodeに公開されているcookbookをもっと使っていきたい所ですが、時間が足りませんでした
apache,phpは公開されているcookbookを使いたいです、今度個人のサーバで使ってみようかと思います
でわでわ