VagrantコマンドでVirtualBoxの仮想環境を立てよう
この記事ではCentOS6.5、PHP5.6、Mysql5.6、HTTPD2.2の環境にMYSQLのテストDBとテストユーザー作成をansibleで一発で作成します。
Vagrant ダウンロード
http://www.vagrantup.com/downloads.html
VirtualBox ダウンロード
https://www.virtualbox.org/wiki/Downloads
Vagrantを立ち上げます。
まずはネットに上がっているbox(仮想環境)をvagrantに追加しましょう。
例ではCentOS6.5のboxをネットから引っ張ってきました。
vagrant box add CentOS6.5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box
作業ディレクトリに仮想環境置き場を作成します。
また、ローカルとシンクするファイルを置くフォルダを作成します。
cd ~/Documents/
mkdir local.example.com
cd local.example.com
mkdir www
仮想環境の設定ファイルを自動生成します。
vagrant init CentOS6.5
自動生成されたファイルを編集します。
vim Vagrantfile
ローカルのIPを設定します。
複数の仮想環境を立ち上げる時のことを考えて、IPは他と被らないものを設定すると良いです。
# config.vm.network "private_network", ip: "192.168.33.10"
config.vm.network "private_network", ip: "192.168.33.10"
先ほど作成した、仮想環境とシンクさせるディレクトリの設定をします。
WEB上で表示するものを作成するので、例ではApacheのルートディレクトリっぽく設定してみます。
# config.vm.synced_folder "../data", "/vagrant_data"
config.vm.synced_folder "./www", "/var/www"
メモリのサイズを設定します。
config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
vb.memory = "1024"
end
後ほどAnsibleを使うのに(この例の場合は)必要な設定です。
Vagrant1.7以降から使用するkeyを自動生成するようになりましたが、ローカルなので従来のままでいいと思います。
config.ssh.insert_key = false
他にもホスト名なども追加しておくといいかもしれません。
起動時に/etc/hosts
に書き込んでくれるのでURLでアクセスできるようになります。
config.vm.hostname = "local.example.com"
Vagrantを立ち上げます。
vagrant up
これで仮想環境が出来ました。
先ほど作ったVagrantにsshで入れます。
vagrant ssh
Macに戻ってくるときはexitです。
exit
Ansibleをインストールして仮想環境にコマンドを打ってみよう
環境構築はコマンドをいちいち打っていると日が暮れるので、Ansibleを採用します。
brew install ansible
VagrantサーバーにMacからAnsibleが実行出来るように設定します。
ファイルが無ければ新規作成、あれば追記して下さい。
vim ~/.ssh/config
Host 192.168.33.*
User vagrant
IdentityFile ~/.vagrant.d/insecure_private_key
ホスト管理ファイルを作成します。
mkdir /usr/local/etc/ansible
vim /usr/local/etc/ansible/hosts
[local.example.com]
192.168.33.10
pingを実行して返って来れば成功です!
ansible local.example.com -m ping
192.168.33.10 | success >> {
"changed": false,
"ping": "pong"
}
AnsibleのPlaybookで仮想環境を構築しよう
仮想環境にインストールするものをPlaybookに記述していきます。
例ではphp5.6、mysql5.6、httpd2.2をインストールし、mysqlのユーザを作成します。
mysqlのDB名はtest、ユーザはtest、パスワードはpassで作成しています。
本当は細かいお作法がありますが今回は無視して1枚に書きます。
vim site.yml
---
- hosts: local.example.com
sudo: yes
vars:
mysql_url: http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6
mysql_ver: "5.6.26-1"
mysql_items:
- rpm: MySQL-client-{{ mysql_ver }}.el6.x86_64.rpm
- rpm: MySQL-devel-{{ mysql_ver }}.el6.x86_64.rpm
- rpm: MySQL-server-{{ mysql_ver }}.el6.x86_64.rpm
- rpm: MySQL-shared-{{ mysql_ver }}.el6.x86_64.rpm
- rpm: MySQL-shared-compat-{{ mysql_ver }}.el6.x86_64.rpm
tasks:
- name: install httpd
yum: name=httpd state=installed
- name: install remi
yum: name=http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
- name: install php
yum: pkg={{ item }} state=installed enablerepo=remi,remi-php56
with_items:
- php
- php-cli
- php-common
- php-devel
- php-fpm
- php-json
- php-mbstring
- php-mcrypt
- php-mysql
- php-pdo
- php-process
- php-xml
- name: install mysql
yum: name={{ mysql_url }}/{{ item.rpm }} state=present
with_items: mysql_items
- name: install python-mysql
yum: name=mysql-connector-python state=installed
- name: stop iptables
service: name=iptables state=stopped enabled=false
- name: start php-fpm
service: name=php-fpm state=started enabled=yes
- name: start httpd
service: name=httpd state=started enabled=yes
- name: start mysql
service: name=mysql state=started enabled=yes
- name: get mysql password
shell: cat /root/.mysql_secret | awk '{print $18}'
register: mysql_root_password
- name: setup mysql root
command: mysqladmin -u root password {{ mysql_root_password.stdout }}
- name: copy .my.cnf
template: src=.my.cnf.j2 dest=/root/.my.cnf owner=root mode=0600
- name: setup mysql database
mysql_db: name=test state=present
- name: setup mysql user
mysql_user: name=test password=pass priv=*.*:ALL,GRANT state=present
続いてmysqlの設定に必要なテンプレートファイルを作成します。
vim .my.cnf.j2
[client]
user = root
password = {{ mysql_root_password.stdout }}
Playbookを実行するには以下のコマンドを入力します。
ansible-playbook -l local.example.com site.yml
以下が返って来れば成功です。
PLAY RECAP ********************************************************************
192.168.33.10 : ok=12 changed=0 unreachable=0 failed=0
apacheのアクセス先をローカルで作成しよう
先ほど、Vagrantfileに書いたconfig.vm.synced_folder
の中身を用意します。
最初にlocal.example.com
直下に作成したwww
内に、index.html
を用意します。
touch www/index.html
echo hello world! > www/index.html
下記にアクセスし、hello world!が表示されれば成功です。
http://local.example.com/
以上となります。
以降はwww以下にgit cloneしてきたり、ansibleで作成したDBにdumpしたsqlを流し込めばローカルのみで開発環境が整います。