ラボ環境の確認
ラボ環境の各種構成について示します。動作を優先して確認されたい方はこのステップを飛ばして頂いて問題ありません。
1. ラボ環境構成
ラボ環境は以下のような構成となっています
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は以下です。
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を実行する構成とします。
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/80とTCP/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配下のwordpress、targetsがdirectに従って処理しますそれ以外の内容は 41行目の内容に従って処理します
改めて通信がどの様に処理されるか以下の表にまとめます
URL |
実行される内容 |
参照するホスト上のパス |
|---|---|---|
/html/ |
静的HTMLの応答 |
/var/www/html/ |
*php等 |
WordPressの応答 |
/var/www/wordpress/ |
実際にホスト上のPATHを確認しファイルが配置されていることを確認してください
NGINX Unit に対し、HTTPSで利用する 証明書・鍵 をアップロードする参考手順を以下に示します
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 が上記で紹介した設定ファイルとなります。
1curl -X PUT --data-binary @wordpress.json --unix-socket /var/run/control.unit.sock http://localhost/config/
Wordpress + MariaDB
3. NGINX Plus + PHP
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/80、TCP/443で通信を待ち受ける設定をし、 SSLに用いる証明書ファイルを指定します31行目に示す location で、
.php宛の通信を PHP-fpm に転送するようfastcgi_passでphp(upstream)を指定しています。その他必要な設定、パラメータを指定します43行目で、静的HTMLファイルを対象とした通信を受け付け、応答を返します
Wordpress + MariaDB の基本的な構成は NGINX Unitで記載した内容(Wordpress + MariaDB) と同様です
4. Apache + PHP
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
ログインが求められる場合には、 user:admin , password:admin でログインしてください
Prometheus
node-exporter
各ホストで実行しています。対象となるホストのIPアドレスを指定してください
各WebServer
各WebサーバでWordpress(PHP)、静的HTMLを応答する構成となります。対象となるホストのIPアドレスを指定してください
Wordpress: http://10.1.1.4/ (対象ホスト 10.1.1.4 の例)
静的HTML: http://10.1.1.4/html/ (対象ホスト 10.1.1.4 の例)
Locustサーバ Webページ
このラボでは、LocustのWebUI、CLI双方でコマンドを実行します。テスト内容に応じて以下の内適切な内容を閲覧ください
Locust WebUI: http://10.1.1.7:8089/
- CLIで実行したレポートを確認するWebページ: http://10.1.1.7/画面左側のメニュー
Locust WebUIをクリックすることで、Locust WebUI を開くことが可能です。