初期化された状態で仮想環境を立ち上げてください。

今回の目標を確認

今回の目標を確認します。

  • rootパスワードの変更
  • SSH接続の設定変更
  • sudoの設定
  • 一般ユーザーの追加
  • システムのアップデート
  • iptablesの設定
  • WEBサーバーの設定
  • WEBページの設定
  • マルチドメインの設定
  • PHPの設定
  • MySQLの設定
  • Postfix/Dovecot/Postfix Adminの設定

WEBサーバーの設定

WEBサーバーは、Apacheを選びます。
CentOSからインストールすると、yumを使用されるので、yumのアップデートも一緒に行います。

  • システムのアップデート
  • WEBサーバーの設定
  • WEBページの設定
  • マルチドメインの設定

仮インストール

以下の設定ファイルを手に入れるために、とりあえずにインストールします。

/etc/httpd/conf/httpd.conf

httpdというCookbookを作って、そこに書いていきましょう。

knife cookbook create httpd -o site-cookbooks

httpdのrecipeを書きます。
yumのアップデートは、参考サイトから頂きました。

chef – 今日作りたくなる簡単cookbook [Kim'sキッチン] yumsetup(yum-fastestmirrorにyum update添え) – Qiita

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/httpd/recipes/default.rb

yum_package "yum-fastestmirror" do
  action :install
end

execute "yum-update" do
  user "root"
  command "yum -y update"
  action :run
end

package "httpd" do
  action :install
end

service "httpd" do
  supports :restart => true
  action [ :enable , :start ]
end

sakuravps.jsonに追記します。

~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.json

(略)
    "recipe[httpd]"
(略)

準備ができたらrecipeを反映します。

$ vagrant destroy -f
$ vagrant up
$ knife solo bootstrap sakuravps

設定ファイルの取得と書き換え

仮想環境にログインして、httpd.confを取得します。

$ ssh -l morisan 192.168.33.10 -p 61234 -i ~/id_rsa_open.ppk
[morisan@localhost ~]$ sudo cp /etc/httpd/conf/httpd.conf /vagrant

コピーしてきたhttpd.confをhttpd.conf.erbとして、templatesに移動させ、以下の書き換えを行います。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/httpd/templates/default/httpd.conf.erb

ServerTokens Prod
ServerSignature Off
Options -Indexes FollowSymLinks

マルチドメイン(バーチャルホスト)の設定

マルチドメイン(バーチャルホスト)の設定をします。
ユーザーと同じようにdata_bagを使ってみます。

~/vagrantdir/sakuravps/chef-repo/data_bags/sites/exmaple.json

{
    "id":"exmaple.com"
}

vhosts.confは以下のような感じにします。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/httpd/templates/default/vhosts.conf.erb

<% @sites.each do |site| %>

    ServerAdmin webmaster@<%= site %>
    DocumentRoot /var/www/html/<%= site %>
    ServerName <%= site %>
    ErrorLog logs/<%= site %>-error_log
    CustomLog logs/<%= site %>-access_log common

<% end %>

httpdのrecipeに追加します。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/httpd/recipes/default.rb

template "httpd.conf" do
  path "/etc/httpd/conf/httpd.conf"
  source "httpd.conf.erb"
  mode 0644
  notifies :restart, "service[httpd]"
end

s = []
data_ids = data_bag("sites")
data_ids.each do |site|
  s.push(data_bag_item("sites",site)["id"])
end
u = data_bag_item("account","webmaster")

template "vhosts.conf" do
  path "/etc/httpd/conf.d/vhosts.conf"
  source "vhosts.conf.erb"
  mode 0644
  variables({
     :sites => s
  })
  notifies :restart, "service[httpd]"
end

data_ids.each do |site|
s = data_bag_item("sites",site)
  directory "/var/www/html/#{s["id"]}" do
    owner u["name"]
    group "apache"
    mode 0755
    action :create
  end
end

execute "chown" do
    command "chown -R #{u["name"]}.apache /var/www/html"
    action :run
end

これでhttpdのrecipeは完成です。

$ vagrant destroy -f
$ vagrant up
$ knife solo bootstrap sakuravps

仮想環境に反映したらhttp://192.168.33.10/にアクセスしたり、/var/www/htmlにファイルをアップして確認してみましょう。

PHPの設定

PHPをインストールします。
yumからインストールできれば楽なのですが、そうするとバージョンが5.3なってしまいます。
今回は、5.5を入れたいと思います。

  • PHPの設定

以下のサイトを参考にさせて頂きました。

vargrant+chefでつくるPHP5.5+MySQL5.6+CakePHP3環境 – たけまるの日記

仮インストール

以下の設定ファイルを手に入れるために、仮インストールします。

/etc/php.ini

php55というCookbookを作ります。

knife cookbook create php55 -o site-cookbooks

modulueを追加していますが、それ以外は、ほとんど参考サイトの通りです。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/php55/recipes/default.rb

remote_file "/tmp/#{node["remi"]["file_name"]}" do
  source "#{node["remi"]["remote_uri"]}"
  not_if { ::File.exists?("/tmp/#{node["remi"]["file_name"]}") }
end

package node["remi"]["file_name"] do
  action :install
  provider Chef::Provider::Package::Rpm
  source "/tmp/#{node["remi"]["file_name"]}"
end

%w{php php-xml php-pdo php-imap php-gd php-devel php-mbstring php-mcrypt php-mysql php-phpunit-PHPUnit php-pecl-xdebug}.each do |p|
  package p do
    action :install
    options "--enablerepo=remi --enablerepo=remi-php55"
  end
end

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/php55/attributes/default.rb

default["remi"]["file_name"]  = "remi-release-6.rpm"
default["remi"]["remote_uri"] = "http://rpms.famillecollet.com/enterprise/remi-release-6.rpm"

sakuravps.jsonに追記します。

~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.json

(略)
    "recipe[php55]"
(略)
$ vagrant destroy -f
$ vagrant up
$ knife solo bootstrap sakuravps

php.iniの設定

php.iniを取得します。

$ ssh -l morisan 192.168.33.10 -p 61234 -i ~/id_rsa_open.ppk
[morisan@localhost ~]$ sudo cp /etc/php.ini /vagrant

php.ini.erbとして、templatesに置き、以下の部分を変更します。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/php55/templates/default/php.ini.erb

expose_php = Off
error_reporting = E_ALL & ~E_STRICT
error_log = /var/log/php.log
default_charset = "UTF-8"
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.substitute_character = none

php.ini用にrecipeを追加します。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/php55/recipes/default.rb

template "php.ini" do
  path "/etc/php.ini"
  source "php.ini.erb"
  mode 0644
  notifies :restart, "service[httpd]"
end

仮想環境に反映したら

$ vagrant destroy -f
$ vagrant up
$ knife solo bootstrap sakuravps

phpinfo();と書いたファイルを/var/www/htmlにアップして、確認してみましょう。

MySQLの設定

MySQL新しいバージョンインストールしたいと思います。
サードパーティCookbookがシンプルで使いやすかったので、こちらを使いたいと思います。

mysql Cookbook – Chef Supermarket

インストール

Berksfileに追記します。

~/vagrantdir/sakuravps/chef-repo/Berksfile

(略)
cookbook 'mysql'
$ berks install

Cookbook作成

mysqlsetというCookbookを作ります。

knife cookbook create mysqlset -o site-cookbooks

以下の場所に新規ファイルとして、作成します。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/mysqlset/recipes/templates/default/mysite.cnf.erb

[mysqld]
character-set-server = utf8
[mysql]
character-set-server = utf8
skip-character-set-client-handshake

recipeを書きます。

~/vagrantdir/sakuravps/chef-repo/site-cookbooks/mysqlset/recipes/default.rb

template '/etc/mysql/conf.d/mysite.cnf' do
  owner "mysql"
  group "mysql"
  notifies :restart, "mysql_service[default]"
end

sakuravps.jsonに追加します。
バージョンは5.6にします。
password系は適宜変更してください。

~/vagrantdir/sakuravps/chef-repo/nodes/sakuravps.json

(略)
  "recipe[mysql::server]",
  "recipe[mysql::client]",
  "recipe[mysqlset]"
],
"mysql":{
  "version": "5.6",
  "server_root_password":"morisan",
  "server_debian_password":"morisan",
  "server_repl_password":"morisan",
  "allow_remote_root":true,
  "remove_anonymous_users": false,
  "remove_test_database": false
},
(略)

反映したら、

$ vagrant destroy -f
$ vagrant up
$ knife solo bootstrap sakuravps

仮想環境にアクセスして、MySQLにログインできるか確認してみましょう。

$ ssh -l morisan 192.168.33.10 -p 61234 -i ~/id_rsa_open.ppk
[morisan@localhost ~]$ mysql -u root -p

次回は、メールです。