KAROUSHI -Japanese Engineer Blog-

KAROUSHI -Japanese Engineer Blog-

Web、ネットワーク構築関連で仕事している、器用貧乏エンジニア。最近はAWS関連の勉強をしています。

Ansibleでnginxを簡単インストール

前回Amazon LinuxにAnsibleをインストールしてpingを送信するところまでやりました。今回は続きですのでAnsibleをインストールしていない人はまずは前回のインストールから実施してください。
Amazon LinuxでAnsibleを簡単インストール~ping送信まで - KAROUSHI -Japanese Engineer Blog-

今回はAnsibleでNginxをインストールしてみようと思います。これができれば環境構築のたびにインストールコマンドを繰り返す必要がなくなります。

目次

Ansible実行ユーザの用意

実行ユーザの作成

まずはAnsibleでログインするためのユーザを作成しましょう。
ログインできれば何でもいいので、すでにログインユーザがある場合は読み替えてください。

$ sudo useradd ansible
$ sudo passwd ansible
Changing password for user ansible.
New password: <任意>(今回はpasswd)
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

BAD PASSWORDと怒られますが気にしない。

実行ユーザのsudo権限付与

sudo権限でyumなどを実行する必要があるため、権限を付与しましょう。
以下コマンドを実行して★の行を追記してください。

$ sudo visudo

----------ファイルの中身----------
# Defaults specification
Defaults:ansible !requiretty ★

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
ansible ALL=(ALL)       NOPASSWD:ALL ★

ユーザパスワードログインの許可

Amazon Linuxではデフォルトでユーザのパスワードログインができないようになっているので許可しておきましょう。
以下PasswordAuthenticationのnoをyesに変えましょう。設定を変更したらsshdを再起動するのを忘れずに。

$ sudo vim /etc/ssh/sshd_config 
PasswordAuthentication no
→PasswordAuthentication yes

$ sudo service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

ユーザログインの確認

最後にansibleでログインできることを確認しましょう。パスワードは先ほど作成した時に入力したものです。(今回はpasswd)

$ ssh ansible@localhost
ansible@localhost's password: 
$ exit

プレイブックでNginxをインストールする

インベントリファイルの作成

Ansibleでは接続先情報をインベントリファイルに記載します。
インベントリファイルに複数のサーバ情報を記述する際に便利な記載方法があるが今回は説明しません。
今回は自サーバに接続するのでlocalhostと先ほど作成したansibleユーザの情報です。

$ mkdir -p ~/samplebook
$ cd samplebook/
$ vi hosts.yml 

----------中身----------
[localhost]
localhost

[all:vars]
ansible_ssh_user=ansible
ansible_ssh_pass=passwd

プレイブックの作成

ようやくプレイブックの作成です。今回行っているのは以下です。

  1. yumでNginxのインストール
  2. Nginx起動と自動起動化(chkconfigに登録)
  3. Nginxの起動確認
$ vim main.yml 

----------中身----------
- hosts: all
  become: yes
  tasks:
  - name: Nginxインストール
    yum: name=nginx state=latest
  - name: Nginx起動
    service: name=nginx state=started enabled=yes
  - name: Nginxの起動確認
    shell: ps aux | grep nginx
    register: ps_result
    changed_when: false
  - debug: var=ps_result.stdout_lines
    when: ps_result | success

プレイブックの実行

これで準備完了です。作成したインベントリと、プレイブックを指定したAnsibleコマンドを実行し、Nginxをインストール&起動しましょう。

$ ansible-playbook -i hosts.yml main.yml 

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

TASK [setup] *******************************************************************
ok: [localhost]

TASK [nginxインストール] *************************************************************
ok: [localhost]

TASK [nginx起動] *****************************************************************
ok: [localhost]

TASK [nginxの起動確認] **************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "ps_result.stdout_lines": [
        "root      4374  0.0  0.0  58084  1016 ?        Ss   14:14   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf", 
        "nginx     4376  0.0  0.3  58456  3932 ?        S    14:14   0:00 nginx: worker process                   ", 
        "root      8086  0.0  0.2 113084  2776 pts/3    S+   16:21   0:00 /bin/sh -c ps aux | grep nginx", 
        "root      8088  0.0  0.1 110460  2020 pts/3    S+   16:21   0:00 grep nginx"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0   

Nginxの画面確認

最後にhttp://へアクセスし、以下の画面が表示されれば正常にインストールして起動されています。
f:id:jainders:20170101012414j:plain