HULFT10 Smart Proxy の導入を行ってみた

# はじめに
こんにちは、すぎもんです:grinning:

今回は 2024年12月にリリースを予定している **HULFT10 Smart Proxy** を先行で触ってみました！

**HULFT10 Smart Proxy** は、HULFT通信を中継したり、外部ネットワークからHULFT10 Smart Proxyを経由してオンプレミスのHULFTに配信要求や送信要求できます。

※　HULFT10 Smart Proxyの他にNginxとPostgreSQLのインストールが必要です。


HULFT10 について紹介している公式サイトもあわせてご覧ください。

**■ HULFT10 製品紹介ページ**

https://www.hulft.com/software/hulft-10


<font color="Red">**【公式】HULFT10 Smart Proxy ガイド**</font>
　※2024年11月11日以降公開予定
 
:::note warn
本資料は2024年9月開発中時点のリリース前モジュールでの環境構築ナレッジです。
設定内容等の細かい部分は変更になる可能性がある点、ご留意ください。
:::


# 今回やること
HULFT10 Smart Proxy とNginx、PosgreSQLを導入して環境構築を行います。
最初に、WebサーバーアプリケーションのNginxの導入とモジュールの追加と証明書の配置、ファイルの設定等を行います。
次に、PosgreSQLの導入とデータベースの新規作成を行います。
最後に、HULFT10 Smart Proxyを任意のディレクトリーに展開し、各ファイルの設定と、セットアップコマンドの使用を行っていきます。

それでは早速やってみましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/21487980-c5ad-9a4a-57d0-9500a9b41bc7.png)

# 実施手順

以下の流れでHULFT10 Smart Proxyの環境構築を行っていきます。

<dl>
  <dt>① Nginxの導入</dt>
  <dd>1. Nginxの導入</dd>
  <dd>2. 追加パッケージ</dd>
  <dd>3. 追加モジュール</dd>
  <dd>4. 証明書の配置</dd>
  <dd>5. Nginxの設定</dd>
  <dt>② PosgreSQLの導入</dt>
  <dd>1. PosgreSQLの導入</dd>
  <dd>2. データベースの作成</dd>
  <dt>② HULFT10 Smart Proxyの導入</dt>
  <dd>1. HULFT10 Smart Proxyの導入</dd>
  <dd>2. 環境変数</dd>
  <dd>3. APIサーバー設定ファイル</dd>
  <dd>4. WSSサーバー設定ファイル</dd>
  <dd>5. セットアップコマンド</dd>
  <dd>6. 実行ファイルの作成</dd>
</dl>


## ① Nginxの導入
先ずはWebサーバーアプリケーションの Nginx の導入から始めます。

Nginxの導入は、下記の手順で行っていきます。
1. Nginxの導入
1. 追加パッケージ
1. 追加モジュール
1. 証明書の配置
1. Nginxの設定

### 1. Nginxの導入
nginx.org のサイトからバージョン1.24以降のNginxソースコードをダウンロードします。

```
wget http://nginx.org/download/nginx-1.24.0.tar.gz
```

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/f4677b20-9b02-061a-c3f1-d33ce3c2df3b.png)


ダウンロードしたNginxを任意のディレクトリーに導入します。

```ruby:例
./configure --prefix=/usr/local --conf-path=/（導入ディレクトリー）/nginx/conf/nginx.conf
```


このとき、必要なパッケージが不足しているとエラーが表示される場合があります。

```ruby:
./configure: error: the HTTP rewrite module requires the PCRE library.
```

:::note warn
上記の場合は、Nginxの導入に **必要なパッケージ** を追加してください。
パッケージを追加したら、Nginxを導入し直してください。
:::


### 2. 追加パッケージ
先述の **Nginxの導入** で必要なパッケージが不足のエラーが表示された場合、パッケージの追加を行ってください。

#### ■ openssl-devel 導入例

```ruby:サンプル
yum install openssl-devel
```

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/41e1e261-a271-5d86-ed1d-6dd31968fbe4.png)

#### ■ pcre-devel 導入例

```ruby:サンプル
yum install pcre-devel 
```

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/ffce7631-db9d-e228-8099-1f8ce324b83e.png)

#### ■ zlib-devel 導入例

```ruby:サンプル
yum install zlib-devel
```

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/b0972758-2d08-0770-a85c-e531c5c95b07.png)


### 3. 追加モジュール
Nginx にTCPを透過するためのモジュールを組み込みます。

```ruby:
./configure --with-http_ssl_module --with-stream
make
make install
```

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/0d5f5f44-3f46-e843-1127-10cc17205921.png)


### 4. 証明書の配置

TLS 通信を行うために、サーバー証明書を任意のディレクトリーに配備します。
サーバー証明書については、正規のサーバー証明書を入手する必要があります。

```ruby:入力例
mkdir /etc/certs
openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -keyout /etc/certs/server.key -out /etc/certs/server.crt -subj "/CN=localhost" -addext "subjectAltName = DNS:localhost“
openssl genrsa -out cert.key 2048
openssl req -subj /CN=localhost -key cert.key -out cert.pem -new -x509
cp cert.key cert.pem /usr/local/nginx/conf
```


:::note 
配備したサーバー証明書は、**Nginxの設定ファイル（nginx.conf）** で指定します。
:::

### 5. Nginxの設定
NginxからHULFT10 Smart Proxy（Web API）またはHULFT10 Smart Proxy（WSS）に処理を振り分けるための設定を行います。
設定は、**Nginxの設定ファイル （/（導入ディレクトリー）/nginx/conf/nginx.conf）** にて行います。

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/9ae4d8fb-7752-aa72-40e4-e43145837ad2.png)

:::note 
**Web APIまたはWSSへの振り分け**
本記事では、**https 標準待ち受けポート（443）で受信した要求の振り分け** について記載しています。

```ruby:設定例
# HTTPS server
#
server {
    listen   443 ssl;
    server_name  localhost;
    
    ssl_certificate      cert.pem;
    ssl_certificate_key  cert.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;
#
    # bind to api-server port
    location /api/ {
       proxy_pass   https://sp-api-server-001:41000;
    }
    # bind to wss-server port
    location /wss/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_pass   https://sp-wss-server-001:42000/;
    }
}
```

:::



## ② PosgreSQLの導入
続いてPosgreSQLの導入を下記の手順で行っていきます。

1. PosgreSQLの導入
1. データベースの作成


### 1. PosgreSQLの導入

postgresql.orgのサイトからバージョン16以降のPostgreSQLをダウンロードします。
ダウンロードしたPostgreSQLを任意のディレクトリーに導入します。

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/1aff4a23-f37c-f0a2-c4aa-427ad5d6af16.png)



### 2. データベースの作成

導入したPostgreSQL に任意の名称でデータベースを作成します。

```ruby:入力例
CREATE DATABASE hulsp;
```

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2cc6f1b9-32ab-b5da-9f71-116a3c78ee40.png)


## ③ HULFT10 Smart Proxy の導入
最後に下記の手順で HULFT10 Smart Proxy の導入を行っていきます。

1. HULFT10 Smart Proxyの導入
1. 環境変数
1. APIサーバー設定ファイル
1. WSSサーバー設定ファイル
1. セットアップコマンド
1. 実行ファイルの作成


### 1. HULFT10 Smart Proxyの展開

任意のディレクトリーに **HULFT10 Smart Proxy（hulft-smart-proxy-v100200.tar.gz）** を展開します。

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/742ef65c-ec40-05ca-cb54-dedc474a93ad.png)


### 2. 環境変数

HULFT10 Smart Proxyを導入したディレクトリーを **環境変数（HULFT_SMART_PROXY_HOME）** に設定します。

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/79b2db27-36dd-c29d-4fd0-695655561b2b.png)



### 3. APIサーバー設定ファイル
<font color="blue">**APIサーバー設定ファイル（api-config.yml）**</font>では、HULFT10 Smart Proxy（Web API）を使用するために、サーバー関連の情報、ログおよびデータベース関連の項目を設定します。

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/689f0f50-24c5-fd11-8292-42059fdbc164.png)

設定ファイルの更新は **テキストエディタ** で行います。

```ruby:
$HULFT_SMART_PROXY_HOME/etc/api-config.yml
```

**■ APIサーバー設定ファイルの設定例**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a07e58dd-2420-92ca-141b-377ad324290f.png)


下記が設定項目になります。（※一部抜粋）

**■ サーバー関連定義（server）**
| 項目 | 内容 | 備考 |
|:-|:-|:-|
| port | 41000 | APIサーバーが起動する際に使用するポート番号 |
| tls-cert-path | /etc/certs/server.crt | TLS通信を行うためのサーバー証明書のファイルパス |
| tls-key-path | /etc/certs/server.key | サーバー証明書に対応する秘密鍵のファイルパス |

***

**■ データベース関連定義（database）**
| 項目 | 内容 | 備考 |
|:-|:-|:-|
| driver | postgres | データベースへの接続に使用するドライバー名 |
| dbname | <font color="blue">**hulsp**</font> | アプリケーションで使用するデータベース名 |
| user | postgres | データベースへの接続に使用するユーザー名 |
| password | postgres | データベースへの接続に使用するパスワード |
| host | localhost | 接続するデータベースのホスト名 |
| port | 5432 | 接続するデータベースのポート番号 |



### 4. WSSサーバー設定ファイル

<font color="blue">**WSSサーバー設定ファイル（wss-config.yml）**</font>では、HULFT10 Smart Proxy（WSS）を使用するために、識別情報、通信、セキュリティ、ログおよびデータベース関連の項目を設定します。

※ 実行例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/a88dfc04-8419-f6cc-433d-df2281296ba5.png)

設定ファイルの更新は**テキストエディタ**で行います。

```ruby:
$HULFT_SMART_PROXY_HOME/etc/wss-config.yml
```

**■ WSSサーバー設定ファイルの設定例**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/357a436a-3e29-4530-3e04-792c48c00f6a.png)


下記が設定項目になります。（※一部抜粋）

**■ 識別情報定義**
| 項目 | 内容 | 備考 |
|:-|:-|:-|
| hostname | localhost | 自サーバーのホスト名 |
| servicename | demo | 自サービスのサービス名 |

***

**■ 通信関連定義**
| 項目 | 内容 | 備考 |
|:-|:-|:-|
| inner-bind-ip | 0.0.0.0 | HULFTから接続するためのbind IPアドレス |
| inner-port | 31000| HULFTに接続するための受付ポート |
| outer-bind-ip | 0.0.0.0 | WebSocketから接続するためのbind IPアドレス |
| outer-port | 42000 | WebSocketに接続するための受付ポート |

***

**■ セキュリティ定義**
| 項目 | 内容 | 備考 |
|:-|:-|:-|
| tls-cert-path | /etc/certs/server.crt | サーバーがhttpsサーバーとして利用するSSL証明書 |
| tls-key-path | /etc/certs/server.key | サーバーがhttpsサーバーとして利用するSSL秘密鍵 |

***

**■ データベース関連定義**
| 項目 | 内容 | 備考 |
|:-|:-|:-|
| dbDriver | postgres | データベースの接続に使用するドライバー名 |
| dbname | <font color="blue">**hulsp**</font> | アプリケーションで使用するデータベース名 |
| user | postgres | データベースへの接続に使用するユーザー名 |
| password | postgres | データベースへの接続に使用するパスワード |
| host | localhost | 接続するデータベースのホスト名 |
| port | 5432 | 接続するデータベースのポート番号 |

### 5. セットアップコマンド
HULFT10 Smart Proxy のセットアップは **「初期セットアップ」** と **「ライセンス登録」** で実行し、登録したライセンスを確認する場合は **「ライセンス一覧」** を行います。


***

<dl>
  <dt>■ 初期セットアップ</dt>
  <dd>HULFT10 Smart Proxyの初期セットアップには、initコマンド を使用します。</dd>
</dl>

```ruby:
setup init
```

***

<dl>
  <dt>■ ライセンス登録</dt>
  <dd>HULFT10 Smart Proxyのライセンス登録には、activateコマンド を使用します。</dd>
</dl>

```ruby:
setup activate -p （プロダクトキー） -s （シリアル番号） [-t 期間限定ライセンス]
```

***

<dl>
  <dt>■ ライセンス一覧</dt>
  <dd>登録したライセンスを確認したい場合は、listコマンドを使用します。</dd>
</dl>

```ruby:
setup list
```

```ruby:出力例
$ setup list
HOST_NAME 
PRODUCT_KEY               SERIAL_NUMBER EXPIRY_PERIOD CREATED_AT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ABCDEFG23456789ABCDE23456 1234567891234 ----------    2025-01-23T12:34:56+00:00
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
789DEFG23456789ABCDE23456 9994567891234 ----------    2025-01-23T12:34:55+00:00
```


### 6. 実行ファイルの作成

<font color="Red">**HULFT10 Smart Proxy（Web API）**</font> と <font color="Red">**HULFT10 Smart Proxy（WSS）**</font> の実行ファイルを作成します。


<dl>
  <dt>■ HULFT10 Smart Proxy（Web API）の実行ファイルの作成</dt>
  <dd>$HULFT_SMART_PROXY_HOME/bin/ に、実行ファイルを作成します。</dd>
</dl>

```ruby:サンプル
#!/bin/bash
cd "$HULFT_SMART_PROXY_HOME/bin" || { echo "Failed to change directory.
Exiting.";exit 1;}
if [ ! -x "./hsp-api-server" ]; then
echo "./hsp-api-server is not executable. Exiting."
exit 1
fi
./hsp-api-server > /dev/null
```

***

<dl>
  <dt>■ HULFT10 Smart Proxy（WSS）の実行ファイルの作成</dt>
  <dd>$HULFT_SMART_PROXY_HOME/bin/ に、実行ファイルを作成します。</dd>
</dl>

```ruby:サンプル
#!/bin/bash
cd "$HULFT_SMART_PROXY_HOME/bin" || { echo "Failed to change directory.
Exiting.";exit 1;}
if [ ! -x "./hsp-wss-server" ]; then
echo "./hsp-wss-server is not executable. Exiting."
exit 1
fi
./hsp-wss-server > /dev/null
```

:::note
**POINT**
実行ファイルには、<font color="blue">**実行権限を付与**</font> する必要があります。
:::




# 最後に
HULFT10 Smart Proxy とPostgreSQL、Nginxの導入を行ってみましたが、いかがだったでしょうか。
いよいよ2024年12月にリリースされるHULFT10のラインナップの1つである **HULFT10 Smart Proxy**です！皆様もぜひたくさん触ってみてください。

このブログでは、今後も様々なTopics記事や接続検証等、皆さんの役に立つような記事を投稿していきたいと思います！
ここまで読んでいただきありがとうございました。それでは、また！:raised_hand: