1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AnsibleでNginxをデプロイしてHello Worldを表示する方法とroles/nginxの各ディレクトリの解説(初心者向け)

Last updated at Posted at 2024-10-14

AnsibleでNginxをデプロイしてHello Worldを表示する方法

Ansibleの操作方法が少しずつわかってきたので、整理するためにブログを書いてみました。特に、templateモジュールとtasksの使い方がよくわかっていなかったので、今回はAnsibleを使ってNginxの設定をデプロイし、"Hello World"を表示するまでの流れを紹介します。

今回やりたいこと

  • /etc/nginx/nginx.confをカスタムした設定でデプロイ
  • /etc/nginx/conf.d/test.confを作成
  • "Hello World"を表示

※今回はAnsibleの初期設定は紹介しません。デプロイ部分からの内容になります。

ディレクトリ構造

# roles/nginx の抜粋
nginx
├── defaults
├── files
│   └── index.html  # Hello World!!
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
└── templates
    ├── nginx.conf.j2
    └── test.conf.j2

上記ディレクトリの簡単な解説

  • defaults: ロール内で使用する変数のデフォルト値を設定
  • files: リモートホストにそのままコピーする静的ファイルを配置
  • handlers: タスクの変更時に実行されるアクションを定義
  • tasks: 実行する具体的な処理を順序立てて記述
  • templates: 変数を埋め込んだ設定ファイルのテンプレートを配置

設定内容

nginx/templates/ ディレクトリ内の情報

nginx.conf.j2 の設定内容

/etc/nginx/conf.d/ 配下の .conf ファイルを読み込む設定にします。

# nginx.conf.j2
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 768;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/conf.d/*.conf;
}

test.conf.j2 の設定内容

# test.conf.j2
server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

server_namelocalhost に設定しています。これにより、http://localhost にアクセスすることでページを表示可能。実際の環境に合わせて server_name を変更してください。

表示させるfiles/index.html の内容

<html>
<head>
    <title>Welcome to test</title>
</head>
<body>
    <h1>Hello World!!</h1>
</body>
</html>

ハンドラーの設定

handlers/main.yml に Nginx をリロードするための設定を記載します。

# handlers/main.yml
- name: Reload nginx
  service:
    name: nginx
    state: reloaded

デプロイの場所などを指定する

何をどこにデプロイするかは、tasks/main.yml に記載します。

tasks/main.yml の内容

- name: Nginxをインストール
  apt:
    name: nginx
    state: present
    update_cache: yes

- name: nginx.conf をデプロイ
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'
  notify:
    - Reload nginx

- name: test.conf をデプロイ
  template:
    src: test.conf.j2
    dest: /etc/nginx/conf.d/test.conf
    owner: root
    group: root
    mode: '0644'
  notify:
    - Reload nginx

- name: ドキュメントルートディレクトリを作成
  file:
    path: /var/www/html
    state: directory
    owner: www-data
    group: www-data
    mode: '0755'

- name: index.html を配置
  copy:
    src: index.html
    dest: /var/www/html/index.html
    owner: www-data
    group: www-data
    mode: '0644'

- name: Nginxサービスを起動し、有効化
  service:
    name: nginx
    state: started
    enabled: yes

タスクの説明

  • Nginxをインストール: apt モジュールを使用して Nginx をインストール
  • nginx.conf をデプロイ: template モジュールを使用し、templates/nginx.conf.j2/etc/nginx/nginx.conf にデプロイ。変更があった場合は Reload nginx ハンドラーを通知します
  • test.conf をデプロイ: 同様に、templates/test.conf.j2/etc/nginx/conf.d/test.conf にデプロイ
  • ドキュメントルートディレクトリを作成: file モジュールで /var/www/html ディレクトリを作成します
  • index.html を配置: copy モジュールで、files/index.html/var/www/html/index.html に配置します。copy モジュールの src はロールの files ディレクトリを基準としています
  • Nginxサービスを起動し、有効化: service モジュールで Nginx を起動し、システム起動時に自動的に開始される設定

まとめ

以上の設定を行うことで、Ansible を使って Nginx の設定をデプロイし、"Hello World" を表示するウェブサーバーを構築することができます。
実際にプレイブックを実行すると、http://localhost にアクセスすることで、"Hello World" と表示されたページを確認できます。
image.png

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?