2015/10/14 (Wed)
Vagrantで起動したCentOS6.7にMySQL5.6をAnsibleでインストール
VirtualBoxにCentOSのインスタンスを作って、Vagrantで起動し、それにMySQLをインストールして、ローカル試験環境として使ってるのですが、誤って vagrant destroy してしまうこともありますよね…?*1
折角の仮想環境なので、すぐに作ったり壊したり出来たほうがいいよなぁ、と言うことで、手順をここに書いておきます。
方針
- ホストOSはWindows7、ゲストOSはCentOS6.7
- Vagrant で VirtualBox を起動
- 仮想環境にSSHでログイン
- Ansibleをインストール
- Ansible Playbookをコピー
- hosts設定
- AnsibleでMySQLをインストール
お仕事でMacじゃなくてWindowsマシンの人、多いでしょう? で、WindowsにAnsible入れるのってのも無謀な気がしましたし。 試験環境として、MySQLだけ動けば良いわけですので、ベストプラクティス*2は無視して、一枚ペラのPlaybookをローカル実行、と言う方針で。
環境
- ホストOS
- 仮想化ツール
- VirtualBox 5.0.6
- Vagrant 1.7.4
Vagrant で VirtualBox を起動
- Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define :server_db do |node| node.vm.box = "box-cutter/centos67" node.vm.box_version = "2.0.5" node.vm.network :private_network, ip:"192.168.33.15" end config.vm.provider "virtualbox" do |v| v.gui = true end end
Vagrantfileはこんな感じで。 boxは、Atlas上にあるミニマムなCentOS環境 box-cutter/centos67 v2.0.5 を使い、固定IPは 192.168.33.15 で。
vagrant up
で起動します。
仮想環境にSSHでログイン
仮想環境へSSHでログインします*3 ユーザー:vagrant / パスワード:vagrant でログインできます。
Ansibleをインストール
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm sudo yum -y install ansible
ミニマム過ぎて、EPELリポジトリも入ってないので、まずEPELリポジトリをインストール。 その後でAnsibleをインストールします
[vagrant@localhost ~]$ ansible --version ansible 1.9.4 configured module search path = None
この時点でのAnsibleのバージョンは 1.9.4
Ansible Playbookをコピー
- playbook.yml
- hosts: all remote_user: vagrant sudo: yes tasks: - name: yum update all yum: name=* state=latest - name: install MySQL Yum Repository yum: name=https://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm state=present - name: install MySQL/MySQL-python/libselinux-python yum: name={{ item.name }} enablerepo={{ item.repo }} state=present with_items: - { name: "mysql-community-libs-compat", repo: "mysql56-community" } - { name: "mysql-community-client", repo: "mysql56-community" } - { name: "mysql-community-server", repo: "mysql56-community" } - { name: "MySQL-python", repo: "epel" } - { name: "libselinux-python", repo: "epel" } - name: add my.cnf character-set-server replace: dest=/etc/my.cnf regexp="^\[mysqld\]$" replace="[mysqld]\ncharacter-set-server=utf8" - name: start MySQL service service: name=mysqld enabled=yes state=started - name: add MySQL work user mysql_user: name=dbuser password=dbpassword1 host={{ item }} priv=*.*:ALL,GRANT state=present with_items: - "localhost" - "%"
hosts設定
echo "127.0.0.1" | sudo tee /etc/ansible/hosts > /dev/null
/etc/ansible/hostsにローカルIPだけ設定*5
AnsibleでMySQLをインストール
sudo ansible-playbook playbook.yml -c local
playbookが反映され、MySQLが起動されている(はずです)
*1:本日のワタクシがそうでした…
*2:Best Practices — Ansible Documentation http://docs.ansible.com/ansible/playbooks_best_practices.html
*3:クライアントは TeraTerm 等で https://osdn.jp/projects/ttssh2/
*4:本当はGitHubとかにコミットしておいて、git cloneで持ってくるのが良いのかもですけど
*5:sudo でリダイレクトが Permission denied になる件 | CUBE SUGAR STORAGE http://bit.ly/1VSAkPS