概要
ホストPCから環境構築したいゲストPC2台に対してApacheをインストールしてみます。
環境
事前準備1(VMの用意)
Vagrantで3台まとめてUbuntuを起動します。
Vagrant で複数VMを一度に立ち上げるを参考に、Vagrantfileに以下を追記します
config.vm.define :host do |node| node.vm.hostname = "host" node.vm.network :private_network, ip: "192.168.33.11" end config.vm.define :guest1 do |node| node.vm.hostname = "guest1" node.vm.network :private_network, ip: "192.168.33.12" end config.vm.define :guest2 do |node| node.vm.hostname = "guest2" node.vm.network :private_network, ip: "192.168.33.13" end
追加したら
$ vagrant up
で全て起動してください。
事前準備2(SSHの設定)
起動できたら
Host -> Guest x2
にSSHでアクセスできるように、公開鍵の登録を行います。
まずはホスト用VMにログインします。
$ vagrant ssh host
ログインしたら鍵を作成します。
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): ←そのままEnter Enter passphrase (empty for no passphrase): ←パスワードもなしでそのままEnter Enter same passphrase again: ←同じくそのままEnter Your identification has been saved in /home/vagrant/.ssh/id_rsa. Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub. The key fingerprint is: 7f:a1:7e:a3:1e:93:1a:e0:ca:3a:0e:a4:d5:64:9a:dd vagrant@host The key's randomart image is: +--[ RSA 2048]----+ | | | | | o | | B . | | .+ o E S . | |o. . . . o . | |o . . * . | | ... . + +o | | .ooo ..+o . | +-----------------+
作成できたら各ゲストVMに公開鍵をコピーします。
$ ssh-copy-id 192.168.33.12 The authenticity of host '192.168.33.12 (192.168.33.12)' can't be established. ECDSA key fingerprint is 3d:72:a3:75:be:64:42:01:22:79:6e:e0:bd:3e:9e:9e. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
vagrant ユーザのパスワードはvagrant
です。
vagrant@192.168.33.12's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '192.168.33.12'" and check to make sure that only the key(s) you wanted were added.
もう一方も登録しておきます。
$ ssh-copy-id 192.168.33.13
これで下準備は完了しました。
Ansibleインストール(Host)
$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible
Ansibleで必要なものは
名前 | 機能 |
---|---|
inventory | 対象サーバのアドレスを登録&グルーピング |
ansible.cfg | 設定ファイル。inventoryの場所とか指定。なくてもOK |
モジュール | コマンド群。インストールやサービスの設定などができる。冪等性 |
playbook | モジュールをまとめたタスクランナー。形式はyaml |
ということなのでまずはinventory
を用意します。ファイル名はhosts
とでもします。
$ vim hosts
グループ名はそれぞれweb1, web2
とかにでもしておきましょう。好きに付けられます。
[web1] 192.168.33.12 [web2] 192.168.33.13
動作確認
先ほどのグループを指定して実行したければ第一引数にグループ名
を、全体に実行したければall
と入力します。
また実行する命令は確認用のping
というものを使います。
$ ansible all -i hosts -m ping 192.168.33.12 | success >> { "changed": false, "ping": "pong" } 192.168.33.13 | success >> { "changed": false, "ping": "pong" }
inventory
の指定が面倒であれば、
$ vim ansible.cfg
[defaults] hostfile = ./hosts
というファイルを作成すれば-i hosts
の部分を書かなくて済みます。
ここまででテスト動作はできたので、次はモジュールをまとめたplaybook
を作成して実行します。
Apacheのインストール
yaml
形式のファイルを作成します。
$ vim sample.yml
ではApacheをインストールするためのモジュールを登録します。
せっかくグルーピングしているので、
- ユーザ作成は両方
- Apacheのインストールは
web1
だけ
という方針で登録します。
--- - hosts: all sudo: yes tasks: - name: add a new user user: name=test - hosts: web1 sudo: yes tasks: - name: install apache apt: name=apache2 state=latest - name: start apache and enabled service: name=apache2 state=started enabled=yes
注意としてインデントがズレていたり、タブ
を使ってインデントすると実行時に怒られます。
では実行します。
$ ansible-playbook sample.yml PLAY [all] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.33.12] ok: [192.168.33.13] TASK: [add a new user] ******************************************************** changed: [192.168.33.12] changed: [192.168.33.13] PLAY [web] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.33.12] TASK: [install apache] ******************************************************** changed: [192.168.33.12] TASK: [start apache and enabled] ********************************************** ok: [192.168.33.12] PLAY RECAP ******************************************************************** 192.168.33.12 : ok=5 changed=2 unreachable=0 failed=0 192.168.33.13 : ok=2 changed=1 unreachable=0 failed=0
curl
でインストールされてるか確認できます。
$ curl 192.168.33.12
以上です。お疲れ様でした。