LoginSignup
5
3

More than 5 years have passed since last update.

Ansible入門 ③ Ansibleのplaybookを書いてwebサーバにnginxを入れるところまで

Posted at

今回はAnsible Playbookを書いてwebサーバにnginxを導入するところまでやっていきます。

ちなみに前回の記事は以下をご覧ください。
- Ansible入門 ① vagrantでhost, web, dbの環境を作ってsshで接続するまで
- Ansible入門 ② webとdbの環境に対して、Ansibleコマンドを実行してみる

image.png

Playbookを書いてwebとdbにuserを追加する

まずは簡単なplaybookの文法を紹介します。
↓のようなplaybookを作成しました。

playbool.yml
---                         # "---"をつけることでplaybookのファイルであることを意味します。
- hosts: all                # 実行するhostを宣言します。今回はwebとdbどちらにも以下のtasksを実行します。 
  sudo: yes                 # sudo コマンドで実行しますか? yes or no
  tasks:                    # 実行するtasksを宣言します。
    - name: add a new user      # taskの名前です。任意ですが、分かりやすいようにしておくといいでしょう。
      user: name=awaji          # userというモジュールを使ってuserを追加していきます。

playbookは.yml形式で保存する必要があります。
今回はwebとdbに"awaji"というuserを追加するtaskを書いています。

userというモジュールを使用していますが、実行したい内容に応じてAnsible公式ページ
から選んで使用しましょう。

それでは実行して確認してみましょう。

[vagrant@host ~]$ ansible-playbook playbool.yml 
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' 
(default).
This feature will be removed in a future release. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.

PLAY [all] ***********************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]

TASK [add a new user] ************************************************************************************************
changed: [192.168.43.52]
changed: [192.168.43.53]

PLAY RECAP ***********************************************************************************************************
192.168.43.52              : ok=2    changed=1    unreachable=0    failed=0   
192.168.43.53              : ok=2    changed=1    unreachable=0    failed=0

上手くできていますね。
192.168.43.52と192.168.43.53のそれぞれに対してchanged=1となっていればOKです。

ちなみになんですが
もう一度実行してみるとどうなるでしょうか?

[vagrant@host ~]$ ansible-playbook playbool.yml 
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo' 
(default).
This feature will be removed in a future release. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.

PLAY [all] ***********************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]

TASK [add a new user] ************************************************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]

PLAY RECAP ***********************************************************************************************************
192.168.43.52              : ok=2    changed=0    unreachable=0    failed=0   
192.168.43.53              : ok=2    changed=0    unreachable=0    failed=0

192.168.43.52と192.168.43.53のそれぞれに対してchanged=0となっていますね。
このタスクは毎回実行するたびに awaji ユーザがどんどん追加されていくのではなくて、もし awaji ユーザがあった場合には何もしないというものになります。
これは「冪等性(べきとうせい)」というのですが、Playbookは「サーバのあるべき状態を記述したもの」であって、常にその状態にすることができるのだと認識しておいてください。

さて、ここまででplaybookは使えるようになりました。
実際にplaybookにいろいろと書いてnginxを入れていきましょう。

nginxを導入する

結論から先に
nginxをインストールして起動状態にするplaybookです。

playbook.yml
---
- hosts: db
  sudo: True

  vars_prompt:
    - name: yum_update
      prompt: "Do you accept updates ?"
      private: no
      default: Y

  tasks:
    - name: Yum update packages
      yum: name=* state=latest
      when: yum_update == "Y"

    - name: install epel repository
      yum: name=http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm state=present

    - name: install nginx
      yum: name=nginx state=present

    - name: nginx start
      service: name=nginx state=started enabled=yes

Ansible doc (yum)にそのまま書いてあったりするので一度見てみるといいでしょう。

さて、解説していきます。

playbook.yml(一部)
  vars_prompt:
    - name: yum_update
      prompt: "Do you accept updates ?"
      private: no
      default: Y

vars_promptはコマンド入力を受け付けることができます。
今回nginxを入れるのに必須ではないですが、参考までに付けてみました。
yum updateする必要はありますか?に対して [ Y / N ] を聞いているだけですね。
コマンドから入力した値は yum_update という変数に格納されます。
この変数を使って分岐などができますね。

playbook.yml(一部)
    - name: install epel repository
      yum: name=http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm state=present

    - name: install nginx
      yum: name=nginx state=present

    - name: nginx start
      service: name=nginx state=started enabled=yes

nginxをインストールするにはepelリポジトリが必要なので入れてやります。
その後は普通にyumモジュールでnginxをインストールすればOKです。

簡単ですね。

最後に確認だけしておきましょう。
ブラウザを開いてwebのIPにアクセスしてみましょう。
今回はwebサーバは192.168.43.52でしたね。

image.png

この画面まで表示できれはOKです。
いい感じですね。

あとはrailsにunicornを入れて…
dbにmysqlを入れて…
などなどやっていけば一通りの環境構築はできますね。

次はアプリケーション(Ruby on Rails)をgitからクローンしてくるところまで書いてみようと思います。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3