ラボ環境の確認

本ラボ環境は予めセットアップが完了しています。
セットアップ手順をご覧になりたい方は、 Tips1. 各種アプリケーションのデプロイ を参照してください

ラボ環境の各種構成について示します。動作を優先して確認されたい方はこのステップを飛ばして頂いて問題ありません。

1. ラボ環境構成

ラボ環境は以下のような構成となっています

../../_images/lab-diagram.png
  • Locust: 10.1.1.7

    • パフォーマンステストツール

    • コンテナで実行する

    • CLIやWebUIを用いて操作する

  • monitor: 10.1.1.8

    • Grafana , Prometheus を監視サーバとして実行する

    • コンテナで実行する

    • 各HostにNode Exporterを実行し、そこからステータスを取得する

  • Webサーバ: 10.1.1.4, 10.1.1.5, 10.1.1.6

    • WebサーバとWordPress、MariaDBをデプロイ、コンテンツを応答する

    • Webサーバとして、10.1.1.4 が NGINX Unit、 10.1.1.5 が NGINX Plus、 10.1.1.6 が Apache を利用する

  • スペック

    Host

    OS

    vCPU

    Memory

    locust

    Ubuntu20.04

    8

    16GB

    monitor

    Ubuntu20.04

    4

    8GB

    Webサーバ

    Ubuntu20.04

    2

    2GB

2. NGINX Unit + PHP

NGINX Unit

NGINX Unit と Unit PHP のパッケージをインストールします。サンプルのセットアップ手順で利用しているAnsible Playbookは以下です。

NGINX Unit をInstallする Ansible Playbook
1- name: Install NGINX Unit
2  include_role:
3    name: nginxinc.nginx_unit
4  vars:
5    nginx_enable: false
6    nginx_unit_enable: true
7    nginx_unit_modules:
8      - unit-php

NGINX Unitと、このラボでPHPを利用するため unit-php をインストールします。

設定ファイルは以下の内容です。 外部からのリクエストに対し、NGINX Unit が PATHに応じて、静的HTMLファイルの応答と、WordPressのPHPを実行する構成とします。

NGINX Unit の設定ファイル
 1{
 2    "listeners": {
 3        "*:80": {
 4            "pass": "routes"
 5        },
 6        "*:443": {
 7            "pass": "routes",
 8            "tls": {
 9                "certificate": "bundle"
10            }
11        }
12
13    },
14
15    "routes": [
16        {
17            "match": {
18                "uri": [
19                    "/html/*"
20                ]
21            },
22            "action": {
23                "share": "/var/www/$uri",
24                "index": "index.html"
25            }
26        },
27        {
28            "match": {
29                "uri": [
30                    "*.php",
31                    "*.php/*",
32                    "/wp-admin/"
33                ]
34            },
35
36            "action": {
37                "pass": "applications/wordpress/direct"
38            }
39        },
40        {
41            "action": {
42                "share": "/var/www/wordpress$uri",
43                "fallback": {
44                    "pass": "applications/wordpress/index"
45                }
46            }
47        }
48    ],
49
50    "applications": {
51        "wordpress": {
52            "type": "php",
53            "targets": {
54                "direct": {
55                    "root": "/var/www/wordpress/"
56                },
57
58                "index": {
59                    "root": "/var/www/wordpress/",
60                    "script": "index.php"
61                }
62            }
63        }
64    }
65}
  • 2行目の listeners により、通信を待ち受けるポート番号を指定します

  • TCP/80TCP/443 の双方で通信を受け付けた場合には routes に従って処理するよう指定します

  • TCP/443 では HTTPS で通信を受け付ける想定のため、利用する 証明書・鍵のBundleを指定しています。このBundleは別途NGINX Unitに設定済みのオブジェクト名を指定します

  • 15行目の routes で、通信を転送するルールを指定します。こちらで、静的HTMLファイルやどのプログラムを実行するか指定します

  • match が PATH の条件を指定し、そちらに該当した場合に実行する内容を action に指定します

  • /html/ 宛の通信は、 /var/www/html/index.html を応答します

  • *php/wp-admin/ に該当した場合には、 50行目に示した applications 配下の wordpresstargetsdirect に従って処理します

  • それ以外の内容は 41行目の内容に従って処理します

改めて通信がどの様に処理されるか以下の表にまとめます

URL

実行される内容

参照するホスト上のパス

/html/

静的HTMLの応答

/var/www/html/

*php等

WordPressの応答

/var/www/wordpress/

実際にホスト上のPATHを確認しファイルが配置されていることを確認してください

NGINX Unitは、NGINX Unitをデプロイしたホスト上のSocketに対しリクエストを実行することで設定を行います
環境のセットアップは Ansible URI module を利用します。Playbookの内容は setup-nunit.yaml を参照してください

NGINX Unit に対し、HTTPSで利用する 証明書・鍵 をアップロードする参考手順を以下に示します

NGINX Unitへ証明書・鍵を登録する方法
1# 証明書、Root証明書、秘密鍵を一つのファイルにまとめます
2cat cert.pem ca.pem key.pem > www.example.com.rsa2k.pem
3# 以下Curlコマンドで、一つにまとめたファイルを bundle という名称でNGINX Unitにストアします
4# PATH: /certificates/<NGINX Unit ストア内の証明書名>
5curl -X PUT --data-binary @www.example.com.rsa2k.pem --unix-socket /var/run/control.unit.sock http://localhost/certificates/bundle

NGINX Unit に対し、上記設定ファイル を反映する方法を示します。wordpress.json が上記で紹介した設定ファイルとなります。

NGINX Unitへ設定を反映する方法
1curl -X PUT --data-binary @wordpress.json --unix-socket /var/run/control.unit.sock http://localhost/config/

Wordpress + MariaDB

MariaDB及び各種必要となるファイルは install-mariadb.yaml に記載の通り設定します
Wordpressは install-wordpress.yaml に記載の通り設定します
Wordpressを実行するユーザなど各Webサーバごとに異なりますが、基本的な設定内容は同様です。

3. NGINX Plus + PHP

NGINX Plus の場合、Webサーバとして NGINX Plusが動作します。
NGINX Plus はPHPを実行できないため、PHP-fpm を動作させ、Wordpressを実行します。NGINX Plus は Wordpress宛の通信を受け取ると、PHP-fpm が待ち受けるSocketに対し通信を転送し、その後PHP-fpmからの応答を返します。
NGINX Plus の設定ファイル(defaultc.conf)
 1upstream php {
 2    server unix:/run/php/php7.4-fpm.sock;
 3}
 4
 5server {
 6
 7    listen 80;
 8    listen 443 ssl;
 9
10    ssl_certificate     /var/www/ssl/www.example.com.pem ;
11    ssl_certificate_key /var/www/ssl/www.example.com.key ;
12
13    root /var/www/wordpress;
14    index index.php;
15
16    location = /favicon.ico {
17        log_not_found off;
18        access_log off;
19    }
20
21    location = /robots.txt {
22        allow all;
23        log_not_found off;
24        access_log off;
25    }
26
27    location / {
28        try_files $uri $uri/ /index.php?$args;
29    }
30
31    location ~ \.php$ {
32        include fastcgi_params;
33        fastcgi_intercept_errors on;
34        fastcgi_pass php;
35        fastcgi_param  SCRIPT_FILENAME ${document_root}$fastcgi_script_name;
36    }
37
38    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
39        expires max;
40        log_not_found off;
41    }
42
43    location /html {
44        root   /var/www/;
45        index  index.html index.htm;
46    }
47
48}
  • 1行目に upstream を指定し、 PHPの転送先となる PHP-fpm が待ち受ける Socket を転送先として指定しています

  • 7-8行目で TCP/80TCP/443 で通信を待ち受ける設定をし、 SSLに用いる証明書ファイルを指定します

  • 31行目に示す location で、 .php 宛の通信を PHP-fpm に転送するよう fastcgi_passphp(upstream) を指定しています。その他必要な設定、パラメータを指定します

  • 43行目で、静的HTMLファイルを対象とした通信を受け付け、応答を返します

Wordpress + MariaDB の基本的な構成は NGINX Unitで記載した内容(Wordpress + MariaDB) と同様です

4. Apache + PHP

Apacheでは必要となるパッケージをインストールし、指定のフォルダにWordpress、静的HTMLファイルを配置しています。
Wordpress + MariaDB の基本的な構成は NGINX Unitで記載した内容(Wordpress + MariaDB) と同様です

5. Locust / Grafana + Prometheus / node-exporter

  • Locust / Grafana + Prometheus / node-exporter はそれぞれ個別にインストールする方法もありますが、今回のラボではDocker Imageを実行しアプリケーションを利用しています

  • Locust は WebUI や、予め設定したシナリオをCLI(厳密にはDocker Runで対象シナリオのファイルを指定)を用いて通信を実行します

  • それらの結果を、node-exporter で取得し、Prometheus にてメトリクスを取りまとめ、Grafana のダッシュボードで確認します

6. 踏み台ホストから各種コンテンツへのアクセス

上記で示した手順によりデプロイしたコンポーネントに以下URLよりアクセスいただけます

  • Grafana

    • http://10.1.1.8:3000/

    • ログインが求められる場合には、 user:admin , password:admin でログインしてください

    ../../_images/grafana-top.png
  • Prometheus

    ../../_images/prometheus-top.png
  • node-exporter

    • 各ホストで実行しています。対象となるホストのIPアドレスを指定してください

    • http://10.1.1.4:9100/

    ../../_images/nodeexporter-top.png
  • 各WebServer

    • 各WebサーバでWordpress(PHP)、静的HTMLを応答する構成となります。対象となるホストのIPアドレスを指定してください

    • Wordpress: http://10.1.1.4/ (対象ホスト 10.1.1.4 の例)

    ../../_images/web-wp-top.png ../../_images/web-html-top.png
  • Locustサーバ Webページ

    • このラボでは、LocustのWebUI、CLI双方でコマンドを実行します。テスト内容に応じて以下の内適切な内容を閲覧ください

    • Locust WebUI: http://10.1.1.7:8089/

    ../../_images/locust-webui-top.png
    • CLIで実行したレポートを確認するWebページ: http://10.1.1.7/
      画面左側のメニュー Locust WebUI をクリックすることで、Locust WebUI を開くことが可能です。
    ../../_images/locust-cliresult-top.png