これは何?
vagrantを使ってansibleをちょっと試してみたメモです。
試す
作るもの
サーバ自体はvagrantで作り、web,dbサーバの初期設定をansible-playbook
で行う。
- サーバA:ansibleホスト
- サーバB:web ansible管理対象サーバ
- サーバC:DB ansible管理対象サーバ
構築する
vagrantでhost,web,dbをup
vagrant init bento/centos-6.8
-
vagrantfile
を編集- 3台上げたいので、↓も部分をIP変えながら3つにコピーする
config.vm.define "host" do |node|
node.vm.box = "bento/centos-6.8"
node.vm.hostname = "host"
node.vm.network :private_network, ip: "aaa.bbb.ccc.ddd"
end
vagrant up
hostへのansible導入
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
yum -y install ansible
ansibleホスト-対象サーバへのSSH接続設定
vagrant ssh host
-
vi .ssh/config
- ↓のような感じでweb,dbのIP,hostnameなど設定
Host web
HostName xxx.xxx.xxx.xxx
Host db
HostName yyy.yyy.yyy.yyy
ssh-keygen -t rsa
chmod 777 ~/.ssh/config
ssh-copy-id web
-
ssh-copy-id db
- ホストで秘密鍵・公開鍵を作ってweb、dbに公開鍵を置いているところです
- 何も考えずに
777
にしたので意味はありません
インベントリの作成
-
vi hosts
- ↓みたいな感じでホストのサーバでhostsファイルを設定
[web]
xxx.xxx.xxx.xxx
[db]
yyy.yyy.yyy.yyy
-
ansible all -i hosts -m ping
- とりあえずansibleコマンドを試す
- -i : インベントリファイルの指定
-
vi ansible.cfg
- hostfile = ./hosts
-
ansible.cfg
上でインベントリを指定しておく
-
ansible all -m ping
- インベントリの指定なしでansibleコマンドが実行可能になっている確認
playbookをいじりながら試す
準備は終わったので、ansibleホストからansible-playbook
で命令を試す
playbookを書いて実行する
- ↓みたいな感じでuserをaddするplaybookを書いてみる
ansible-playbook.yml
---
- hosts: all
tasks:
- name: addUser
user: name=newUser
-
ansible-playbook playbook.yml
- 冪等性があるため、「毎回新しいユーザーが増える」わけではない
webにapacheをinstallしてみる
-
ansible-playbook.yml
に追記する
ansible-playbook.yml
- hosts: web
tasks:
- name: installApache
yum: name=httpd
- name: startApache
service: name=httpd
apache越しにファイルを確認してみる
vi index.html
index.html
<html>
ansible test.
</html>
- 下記のことを
ansible-playbook.yml
に追記する- 所有者をvagrantに変更し、
index.html
をcopyする - libselinuxをインストールさせる
- 所有者をvagrantに変更し、
ansible-plaobook.yml
- name: installLibselinux
yum: name=libselinux-python
- name: chown
file: dest=/var/www/html owner=vagrant recurse=yes
- name: copyHtml
copy: src=./index.html dest=/var/www/html/index.html owner=vagrant
web側でphpインストール
- 下記のことを
ansible-playbook.yml
に追記する-
hello.php
を作成 - webサーバでphpをインストールして、
hello.php
を表示させる
-
ansible-plaobook.yml
- name: installPhp
yum: name={{item}}
with_items:
- php
- php-devel
- php-mbstring
- php-mysql
notify:
- notify
handlers:
- notify
service: name=httpd state=restarted
db側でmysqlインストール
- 下記のことを
ansible-playbook.yml
に追記する- dbサーバにmysqlをインストール
- database作成、ユーザ作成、password設定
ansible-plaobook.yml
- hosts: db
tasks:
- name: installMysql
yum: name=mysql-server
- name: startMysql
service: name=mysqld state=started enabled=yes
これでansible-playbook
コマンドで、
- webへのapacheのインストール
- 自動起動設定
- index.htmlの準備
- 必要なPHPパッケージのインストール
- DBへのmysqlのインストール
- 自動起動設定
ができるはず。
所感
- 冪等性が保たれるおかげで、
ansible-playbook.yml
を試しながら少しずつ書き足せる。- webにapacheをインストールするのを書いて
ansible-playbook
実行、OKそうだったらdbにmysqlをインストールするのを書き足して、またansible-playbook
実行。と試せる。 - この時、webはapacheインストールがもう終わっているので、新しく無駄なことをしない。
- webにapacheをインストールするのを書いて
おまけ
- mysqlでの確認
ssh db
mysql -u dbuser -p mydb
show databases;