前回(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
---
- name: nginx setup #実行するタスク名
hosts: all #対象ホスト(今回は特に指定する必要がなかったのでallとした)
sudo: True #sudoするかどうか
roles: #タスクを記述しているディレクトリ
- role: vagrant_nginx
rolesとは?
- nginxインストールや各種タスクを書いたファイルを配置しておく場所
-
nginx setup
というタスクがplaybookで実行されるとroles/以下のファイルに記載されている各種タスクを実行していく
roles/以下にtasksとtemplate, handlersというディレクトリを作成する
そして各ディレクトリにタスクを記載したファイルを作成していく
tasks
- 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 が実行される仕組みになっている
---
- name: restart nginx
service:
name: nginx
state: restarted
templates
- テンプレートモジュールは、指定したテンプレートのファイルを設置する
- テンプレートはJinja2というテンプレート言語で記述される
- 今回はnginxのversionを表示させないようにnginx.confのデフォルトのファイルを編集する
# 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>
ちゃんとかくされてる〜〜!
まだまだわからないことが多い…さらにこれからもキャッチアップを続けていこうと思います。
ありがとうございました!