LoginSignup
18
8

More than 5 years have passed since last update.

Ansibleを使ってnginxをインストールする

Last updated at Posted at 2018-04-13

前回(https://qiita.com/takakuda/items/671b25c85378756daa97)
に引き続きAnsibleを使い、nginxをインストールしていきます。以下は作業ログのようなものです。

環境

  • ホスト PC:Mac
  • Ubuntu ver: 16.04.4
  • 仮想環境: VirtualBox
  • Vagrant: 2.0.3
  • ansible: 2.5.0

前回はAnsibleで疎通確認をするところまで行ったので、今回はplaybookを作成していきます。
ansible公式ドキュメント
http://docs.ansible.com/

playbookとは?

  • サーバーの状態を定義したもの

Ansibleのplaybookは、リモートホストの状態を定義したファイルのことです。 ツールの実行が成功した時に、定義ファイルの内容がリモートホストに反映されている状態になります。

前回にVagrantを使い仮想環境でサーバーを2台立て、ホストとなるサーバーにAnsibleをインストールし、疎通確認まで行ったので、今回はnginxのインストールを実行するplaybookを作成する

playbook

nginx.yml
---
- name: nginx setup #実行するタスク名
  hosts: all #対象ホスト(今回は特に指定する必要がなかったのでallとした)
  sudo: True #sudoするかどうか
  roles: #タスクを記述しているディレクトリ
    - role: vagrant_nginx 

rolesとは?
- nginxインストールや各種タスクを書いたファイルを配置しておく場所
- nginx setupというタスクがplaybookで実行されるとroles/以下のファイルに記載されている各種タスクを実行していく

roles/以下にtasksとtemplate, handlersというディレクトリを作成する
そして各ディレクトリにタスクを記載したファイルを作成していく

tasks

roles/vagrant_nginx/tasks/main.yml

- name: nginxの起動ユーザーの追加
  user:
    name: nginx

- name: nginxのインストール
  apt:
    name: nginx
    state: latest
    update_cache: yes
    cache_valid_time: 3600

- name: nginxのサービススタート
  service:
    name: nginx
    enabled: yes

- name: nginx設定ファイルの設置
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/sites-available/default

- name: nginx本体の設定ファイルを変更
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
  notify:
    - restart nginx

handles

タスクに notify を書いておくと、そのタスクで状態に変更があった場合にそれと対応する handlers が実行される仕組みになっている

roles/vagrant_nginx/handlers/main.yml
---
- name: restart nginx
  service:
    name: nginx
    state: restarted

templates

  • テンプレートモジュールは、指定したテンプレートのファイルを設置する
  • テンプレートはJinja2というテンプレート言語で記述される
  • 今回はnginxのversionを表示させないようにnginx.confのデフォルトのファイルを編集する
roles/vagrant_nginx/templates/nginx.conf.j2
# defaultのnginxのnginx.confをそのままコピーしserver_tokenのコメントアウトのみ外しています
events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;
        ....以下省略

playbook実行

playbookを実行します

ansible-playbook nginx.yml

実行後にansibleで操作対象のサーバーのnginxのversionがちゃんと隠されていないかを確認します

$ curl 192.168.100.12
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

ちゃんとかくされてる〜〜!
まだまだわからないことが多い…さらにこれからもキャッチアップを続けていこうと思います。
ありがとうございました!

18
8
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
18
8