検証環境としての Management Console インストール・フリー構築法 ～ 超簡単 ～

## はじめに

前回までに紹介した Tomcat9 と MySQL8 構築を前提にして、今回は BizRobo! 11.3.0.2 の Management Console（以降、MC） を構築していきます。

https://qiita.com/ParakeetOnTheHead/private/317598fb34af24633867

https://qiita.com/ParakeetOnTheHead/items/ec3821d2bc1f9c905716

:::note 
本ブログは、BizRobo! v11.3.0.2 の利用を前提に解説します。
:::

## 環境の準備

MCの構築に必要なファイルやリソースを準備します。細かい調達方法は省略します。

### MC構築のための調達リソース

| # | リソース | 準備方法 |
|:-:|:-|:-|
| 1  | mc.war  | BizRobo!のインストールフォルダ配下の`📁WebApps` から `ManagementConsole.war` をコピーし、ファイル名を `mc.war` に変更  |
| 2  | mc.xml  | ファイルを新規作成  |
|3|mysql-connector-java-8.0.22.jar|「[公式サイト](https://downloads.mysql.com/archives/c-j/)」から 検証用のバージョンの `Platform Independent` ZIP をダウンロードします。[^2]|

[^2]: 以下が画面のイメージ。下段のZIPをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/207b700b-39d2-28f8-f764-528d3698e282.png)

### 環境構築におけるパラメータ一覧

以下を前提として構築作業を実行

| パラメータ | 設定値 |
|:-|:-|
| DBのホスト名  |  localhost |
|  DB接続ポート |  3306 |
|  接続先DB | bizrobo_mc  |
| 接続ユーザー名  | bizrobo  |
|接続パスワード|brpassword|

### 構築する環境のサーバー構成

ちょっとした検証作業用に、単体のPCへ一式セットアップします。すべてローカルでのアクセス前提なので、通信ポートの解放など細かいことについては考えません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/de1debaf-b4cb-0c3a-f637-550e2f384ee4.png)


### 構築環境のフォルダ構成

```bash
📁 apache-tomcat-9.0.x
 ├─ 📁 conf        # Tomcatの設定ファイルが格納されています。
 │  └─ 📁 Catalina
 │      └─ 📁 localhost
 │          └─ 📄 mc.xml 
 ├─ 📁 lib         # Tomcatが必要とするライブラリやクラスが格納されています。
 │  └─ 📄 mysql-connector-java-8.0.22.jar
 ├─ 📁 webapps     # TomcatにデプロイするWebアプリケーションが格納されています。
 │  ├─ 📁 mc
 │  └─ 📄 mc.war
 :
```

## 環境構築の流れ

細かい設定・調整をし始めるときりがないですが、最低限動くものを構築するには以下の４ステップで完了です。

1. アプリケーションで利用するデータベースとユーザーの作成
1. アプリケーションで利用するコンテキストファイルの作成（主にDBへの接続設定）
1. アプリケーションファイルのサーバへの配置
1. JDBCコネクターのサーバへの配置

## 構築手順

### サーバ状態の確認

環境セットアップに先駆けて以下を確認します。

- MySQL8 サーバーが**起動**していること
- Tomcat9 サーバーが**停止**していること

***

### 1．MySQL8 へのデータベースの作成

`root` ユーザで MySQL8 サーバにログインし、以下の SQL を実行します。

```sql:DBとユーザの一括作成
CREATE DATABASE bizrobo_mc CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'bizrobo'@'localhost' IDENTIFIED BY 'brpassword';
GRANT ALL PRIVILEGES ON bizrobo_mc.* TO 'bizrobo'@'localhost';
```
- `bizrobo_mc` という名前のデータベースを作成
- localhost からのみアクセス可能な `bizoro` というユーザを作成
- `bizoro_mc` データベースに対してすべての権限を付与

***

### 2．Tomcat コンテキストファイルの作成

`📁 conf\Catalina\localhost` 配下に `📄 mc.xml` という名前でファイルを生成し、テキストエディタで以下記述します。（UTF-8で保存）

**BOM** なし保存が必須。[^3]

[^3]: https://uxmilk.jp/48923

```xml:mc.xml （v11.3の場合）
<?xml version='1.0' encoding='utf-8'?>
<Context useHttpOnly="true" mapperContextRootRedirectEnabled="true">
  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <Resource name="jdbc/kapow/platform" auth="Container" 
    type="javax.sql.DataSource" 
    maxTotal="100" maxIdle="30" maxWaitMillis="-1" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
    validationQuery="/* ping */" testOnBorrow="true"
    username="bizrobo" password="brpassword" 
    driverClassName="com.mysql.cj.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/bizrobo_mc?useUnicode=yes&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;serverTimezone=GMT%2B9&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"
  />
</Context>
```
- `useUnicode=yes&amp;characterEncoding=UTF-8`：データベースとの通信にUnicodeを使用し、UTF-8でエンコーディングします。[^4]
- `useSSL=false&amp;allowPublicKeyRetrieval=true`：MySQL8 で推奨の caching_sha2_password という認証プラグインを使用する場合に必要な設定です。`useSSL` については本番環境では `true` にする必要がありますが、サッと作る検証環境では、`false` でいいでしょう。


<details><summary>v11.5のパターンはこちら</summary>

```xml:mc.xml （v11.5の場合）
<?xml version='1.0' encoding='utf-8'?>
<Context useHttpOnly="true" mapperContextRootRedirectEnabled="true">
  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <Resource name="jdbc/kapow/platform" auth="Container"
    type="javax.sql.DataSource"
    maxTotal="100" maxIdle="30" maxWaitMillis="-1"
    validationQuery="/* ping */" testOnBorrow="true"
    username="bizrobo" password="brpassword"
    driverClassName="com.mysql.cj.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/bizrobo_mc?useUnicode=yes&amp;characterEncoding=UTF-8&amp;rewriteBatchedStatements=true&amp;serverTimezone=GMT%2B9&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"
    />
</Context>
```
</details>


[^4]: `characterEncoding` を指定しない場合にはデータベースサーバーの `character_set_server` システム変数の値に依存するようです。厳密には JDBCコネクターのバージョンによっても異なるようですが。。MySQL8では、デフォルトの文字エンコーディングは `utf8mb4` で、MySQL5.7 では `latin1` のようです。併せて、JDBCのバージョンごとに色々と 「[文字セットとユニコードの使用](https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-charsets.html)」には書かれており、結局環境に依存してわけわからなくなってしまいそうなので、いろんな環境で検証的に手軽に使うためには、明示的にパラメータとして設定しておくのがよさそうです。

***

### 3．Web Application aRchive（war）ファイルの配置

`📁 webapps` 配下に `📄 mc.war` を配置します。

***

### 4．jdbc ドライバーの配置

`📁 lib` 配下に `📄 mysql-connector-java-8.0.22.jar` を配置します。

***

### Tomcat の開始

Tomcat を起動して Management Console へアクセスします。以下のログイン画面が表示されれば完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/7a934b9f-2889-d7b9-2cbe-752cb2706ab3.png)

***

### その後、MCの設定

MC の起動を確認したら、ログイン画面から admin でログインし、ライセンスの登録、ログデータベースの設定、その他もろもろ検証に必要な他サーバとの連携や各種設定を MC で実施します。

本項では省略しますが、必要に応じて利用者が判断して実施ください。

## インストール・フリー な MC を使った開発・検証

現場や客先で発生した事象の再現を行う際に、バージョンのそれぞれ異なる MC、RS、DAS などを組み合わせて実行するときなど、手軽に特定バージョンの環境が要素ごとに手早く構築できると便利ですね。

ん？構成自体もインシデントが発生した環境と合わせないと意味がないのではないか？と？
それは、アプリの機能レベルで再現できなかった時の話で、初動で事象と製品の機能的な挙動を確認するのであれば、同一構成の準備に拘って時間を掛けるよりも、インストール・フリーな環境を手早く起動して本来やるべきことに集中した方がいい派です。

## まとめ

事象の確認とその後の調査・対応を別のメンバーが実施するような場合、ポータブルな環境で再現させたうえで、その環境（ファイル）一式を後続ステップのメンバーに渡してあげると、連係プレーで調査が捗りそうですね。