VagrantとItamaeを使って5分でmysqlサーバー構築

普段はほぼモノシリックなサービスしか開発していないんだけど、去年の暮れぐらいからちょくちょく関わらせている案件がマイクロサービスで、新しい人が入るということで構築手順のまとめがてらVagrant + Itamaeで環境構築してみた。

複数サーバーインスタンスを立ち上げて、各サーバーから一つのmysqlに接続できたらいいな。 (この構成ならdockerでやれという話もあるけど。先にvagrantを勉強してみたかったので)

とりあえず192.168.55.55で接続可能なmysqlのvagrant(なんていうんだろう。dockerだとコンテナに相当するやつ)を作成してみます。

1
2
vagrant init
vagrant plugin install vagrant-itamae

vagrant initして作成されたVagrantfileを編集します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "centos65"
  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box"

  config.vm.define "db" do |db|
    db.vm.hostname = "db"
    db.vm.network :private_network, ip: "192.168.55.55"

    config.vm.provision :itamae do |config|
      config.sudo = true
      config.recipes = ['./recipe.rb']
      config.json = './node.json'
    end
  end

  config.ssh.forward_agent = true

end

Itameのレシピ
Vagrantfileと同じディレクトリにrecipe.rbという名称でおきます。

recipe.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package "epel-release"
package "gcc"
package "openssl-devel"
package "libyaml-devel"
package "readline-devel"
package "zlib-devel"
package "vim"

# mysql
package 'http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm' do
  not_if 'rpm -q mysql-community-release-el6-5'
end

%w( mysql-community-server mysql-community-devel ).each do |pkg|
  package pkg
end

utf8mb4_settting = <<"EOS"

[mysqld]
character-set-server = utf8mb4
character-set-client-handshake  = FALSE
character_set_server            = utf8mb4
collation_server                = utf8mb4_unicode_ci
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix

[client]
default-character-set=utf8mb4

EOS

execute "set db charset to utf8mb4" do
  command <<-EOF
    echo '#{utf8mb4_settting}' >> /etc/my.cnf
  EOF
end

service 'mysqld' do
  action [:start, :enable]
end

execute "allow remote host access" do
  # MySQLにリモートホストから接続できるようにする
  command "mysql -e \"grant all privileges on *.* to root@'192.168.%'\"";
end

レシピから参照するnode
これもVagrantfileと同じ場所にnode.jsonという名前でおきます。

1
2
3
4
5
{
  "mysql": {
    "password": ""
  }
}

そしたらvagrantを起動しましょう。

1
vagrant up

無事に起動したらItamaeで環境構築です。

1
vagrant provision

無事に終了したらホストから接続してみます。

1
mysql -uroot -h 192.168.55.55

で繋がれば完成です。

Comments