2021年12月13日月曜日

ORDSとOracle RDF Graph Serverを同居させる

 Oracle RDF Graph Serverを少し長い期間運用するため、すでにOracle REST Data Servicesを稼働させているコンピュート・インスタンスに同居させることにしました。ARMアーキテクチャのVM.Standard.A1.Flexのインスタンスがターゲットです。これもAlways Free枠で使用しています。

同居させる方法として、以下の2つの方法があるかと思います。

  1. TomcatにORDSとOracle RDF Graph Serverの両方をデプロイする。
  2. 別のサーバーにしてロード・バランサーで振り分ける。
今回は2番目の方法を採用しています。すでに実装済みのORDSは変更せずに、Oracle RDF Graph Serverをインストールします。SSLはロード・バランサにオフロードします。Oracle RDF Graphs Serverの環境構築についてはこちらの記事と同じ手順ですが、自動起動の設定も追加で行います。

ロード・バランサでリクエストをそれぞれのサーバーに振り分けるために、ルーティング・ポリシーを設定します。

Oracle RDF Graph Serverのセットアップ


Oracle RDF Graph Serverは、ユーザーoracleで動作させます。Jettyも含め、インストール先は/home/oracle以下とします。前提となる作業は以下になります。

  1. ユーザーoracleの作成
  2. Jetty 9.x(今回はjetty-distribution-9.4.44.v20210927.zip)の/home/oracleへの配置
  3. orardf-21.4.0.warの/home/oracleへの配置
  4. ディレクトリ/home/oracle/rdf-docの作成と、orardf_swagger.jsonorardf_doc_url.txtの配置
以下、実施する作業を列記します。それぞれの手順については(自動起動関連を除き)、以前の環境構築の記事で説明しています。

1. JDK1.8のインストール

ユーザーopcで実施します。Oracle REST Data ServicesはJDK17で動かしていますが、Oracle RDF Graph Serverはそれでは動かなかったので、JDK1.8をインストールします。

sudo dnf -y install jdk1.8


複数のJDKがインストールされている場合、デフォルトの/usr/bin/javaのバージョンがJDK 1.8に変わっていないか確認します。

/usr/bin/java -version

インストール前のバージョンと同じであれば、問題ありません。

2. Jetty 9.xの展開

ユーザーoracleで実施します。以下を実行します。Jettyの細かいバージョンは、Jettyのダウンロードする時期で変わってくるかと思います。

/home/oracleで実行します。

cd /home/oracle
unzip jetty-distribution-9.4.44.v20210927.zip

作成されたディレクトリjetty-distribution-9.4.44.v20210927にjettyでアクセスできるよう、ディレクトリの名称をjettyに変更します。

mv jetty-distribution-9.4.44.v20210927 jetty

3. orardf-21.4.0.warをjetty/webapps以下にコピー

Oracle RDF Graph ServerのWebアプリケーション・アーカイブをJettyにデプロイします。

cp orardf-21.4.0.war jetty/webapps/orardf.war

4. Basic認証を使ったorardf.xmlの配置

webapps以下にorardf.xmlを作成します。Basic認証を使います。

5. jetty/etc以下にrealm.propertiesを作成

ユーザー名、パスワードおよびロールの割り当てを記載したファイルrealm.propertiesを、jetty/etc以下に作成します。ユーザー名はadminで決めうちにしていますが、パスワードはそれぞれ設定します。

echo "admin=" `java -cp jetty/lib/jetty-util-9.4.44.v20210927.jar org.eclipse.jetty.util.security.Password admin パスワード |& grep CRYPT`",rdf-admin-user" > $HOME/jetty/etc/realm.properties

6. ディレクトリ/home/oracle/workspaceの作成

Oracle RDF Graph Serverの構成情報を保存するディレクトリを作成します。

mkdir /home/oracle/workspace

複数のサーバーでロード・バランスをさせる場合、最低限、このディレクトリはサーバー間で共有する必要があります。今回はそこまでの用途ではないのでロード・バランサは構成しますが、バックエンドのサーバーとしては1台だけにOracle RDF Graph Serverを実装します。

7. ポート番号の変更

ポート8080番はOracle REST Data Servicesがすでに使用しているため、Oracle RDF Graph Serverには8081番を割り当てます。jetty/start.iniの以下の部分を変更します。

## Connector port to listen on

jetty.http.port=8081


8. 起動オプションの設定

ファイル/home/oracle/.orardfrcに、以下のようにJettyの起動オプションを記述します。この後でOracle RDF Graph Serverの起動スクリプトの名称をorardfとするため、設定ファイルが.orardfrcとなっています。
export JAVA=/usr/java/jdk1.8.0_311-aarch64/bin/java
export JAVA_OPTIONS="-Doracle.rdf.workspace.dir=/home/oracle/workspace -Dfile.encoding=UTF-8"
export JETTY_HOME=/home/oracle/jetty
export JETTY_PID=/home/oracle/jetty/jetty/orardf.pid

9. firewalldの接続許可

ユーザーopcにて実施します。firewalldにて、ポート8081番への接続を許可します。

sudo firewall-cmd --add-port=8081/tcp
sudo firewall-cmd --list-all
sudo firewall-cmd --runtime-to-permanent

[opc@cmordsa1 ~]$ sudo firewall-cmd --add-port=8081/tcp

success

[opc@cmordsa1 ~]$ sudo firewall-cmd --list-all

public (active)

  target: default

  icmp-block-inversion: no

  interfaces: enp0s3

  sources: 

  services: ssh

  ports: 443/tcp 80/tcp 8081/tcp

  protocols: 

  forward: no

  masquerade: no

  forward-ports: 

port=443:proto=tcp:toport=8443:toaddr=

port=80:proto=tcp:toport=8080:toaddr=

  source-ports: 

  icmp-blocks: 

  rich rules: 

[opc@cmordsa1 ~]$ sudo firewall-cmd --runtime-to-permanent

success

[opc@cmordsa1 ~]$ 


10. gitのインストール

ユーザーopcにて実施します。Swagger UIをインストールするため、gitをインストールします。

sudo dnf -y install git

11. Swagger UIのインストール

ユーザーoracleにて実施します。GitHubにあるSwagger UIをインストールします。

cd /home/oracle
git clone https://github.com/swagger-api/swagger-ui.git

12. Swagger UIの有効化

ユーザーoracleにて実施します。コンピュート・インスタンス上の静的ファイルに外部からアクセスできるように、jetty/webapps以下にswagger-ui.xmlおよびrdf-doc.xmlを作成します。/home/opcと記載されている部分は/home/oracleに書き直します。

13. 自動起動の設定

ユーザーopcにて実施します。/etc/systemd/system/orardf.serviceを作成し、以下の内容を記載します。
[Unit]
Description=Oracle RDF Graph Server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/etc/init.d/orardf start
ExecStop=/etc/init.d/orardf stop
ExecReload=/etc/init.d/orardf restart
User=oracle

[Install]
WantedBy=multi-user.target
/home/oracle/jetty/bin/jetty.sh/etc/init.d/orardfにコピーします。

sudo cp /home/oracle/jetty/bin/jetty.sh /etc/init.d/orardf
sudo chmod 755 /etc/init.d/orardf

自動起動を有効にします。

sudo systemctl enable orardf

以上で、Oracle RDF Graph Serverのインストールと構成は完了です。Oracle RDF Graph Serverを起動します。

sudo systemctl strart orardf

ロード・バランサの設定


構成済みのロード・バランサに、新たにバックエンド・セットを作成します。

ロード・バランサのリソースよりバックセンド・セットを選択し、バックエンド・セットの作成をクリックします。


ドロワーが開きます。名前orardfポート8081ステータス・コード302URLパス(URI)には/orardfを指定します。それ以外はデフォルトの設定(トラフィック分散ポリシー重み付けラウンド・ロビンSSLの使用OFF)とします。

バックエンド・セットの作成をクリックします。


バックエンド・セットが作成されたら、バックエンドの作成を行います。作成されたバックエンド・セットを開きます。


バックエンド・セットのリソースよりバックエンドを選択し、バックエンドの追加をクリックします。


ドロワーが開きます。バックエンドはコンピュート・インスタンスから選択するオプションを選び、Oracle RDF Graph Serverを実装したインスタンスにチェックを入れます。ポート8081に変更します。セキュリティ・リスト・ルールを自動的に追加しますを選択します。追加が必要なイングレス・ルールやエグレス・ルールはネットワークの構成で変わってきます。

追加をクリックします。


Oracle RDF Graph Serverが起動していれば、各種ヘルスチェックがOKに変わります。


Oracle REST Data ServicesとOracle RDF Graph Serverのバックエンド・セットが作成されました。受け付けたリクエストをぞれぞれにバックエンド・セットに振り分けるルーティング・ポリシーを作成します。

ロード・バランサのリソースルーティング・ポリシーを選択し、ルーティング・ポリシーの作成をクリックします。


新たに作成するルーティング・ポリシーの名前ADBとします。

ルール1として、Oracle RDF Graph Serverへのルーティング・ルールを設定します。

名前orardfとします。条件次の条件を満たす場合...いずれかが一致した場合を選択します。すべての条件で、条件タイプとしてパス演算子次で始まるを選択し、URL文字列として/orardf/swagger-ui/rdf-docを指定します。アクションバックエンド・セットとして、Oracle RDF Graph Serverであるorardfを選択します。

Oracle REST Data Servicesへのルーティング・ルールを作成するため、別のルールをクリックします。



Oracle REST Data Servicesのルールの名前ordsとします。次の条件を満たす場合...すべてが一致した場合(条件は一つだけなので、どちらでも結果は同じ)を選び、条件として条件タイプパス演算子次で始まるURL文字列として/ordsを指定します。アクションバックエンド・セットとしてOracle REST Data Servicesのバックエンド・セット(この例ではapexlbbs)を選択します。

に進みます。


セット順序の変更は不要なので、そのままルーティング・ポリシーの作成をクリックします。


ルーティング・ポリシーが作成されます。


作成したルーティング・ポリシーをリスナーに適用します。ロード・バランサのリソースリスナーを開き、作成済みのリスナーの編集を行います。


リスナーの編集を行うドロワーが開きます。その中のルーティング・ポリシーとして、先ほど作成したルーティング・ポリシー(今までの例ではADB)を選択します。

変更の保存をクリックします。


リスナーへのルーティング・ポリシーの適用が完了すると、すべての設定は完了です。

Oracle RDF Graph Serverにアクセスし、動作を確認します。

https://ホスト名/orardf/


Swagger UIにアクセスします。

https://ホスト名/swagger-ui/dist/
https://ホスト名/rdf-doc/orardf_swagger.json


Oracle REST Data Services(Oracle APEX)にアクセスします。(こちらの記事に記載した、外部ネットワークからの管理ツール、開発ツールのアクセスを禁止した環境であるため、サンプル・サプリケーションのサインイン画面が表示されています。)

https://ホスト名/ords/


以上で確認作業も完了です。

SSLのオフロードを行なっていますが、こちらの記事と同様のCSRF対応を行うことにより、Oracle RDF Graph ServerのREST APIの呼び出しは成功しています。

以上になります。

Oracle  APEXの環境構築の参考になれば幸いです。