Oracle RDF Graph Serverを少し長い期間運用するため、すでにOracle REST Data Servicesを稼働させているコンピュート・インスタンスに同居させることにしました。ARMアーキテクチャのVM.Standard.A1.Flexのインスタンスがターゲットです。これもAlways Free枠で使用しています。
同居させる方法として、以下の2つの方法があるかと思います。
- TomcatにORDSとOracle RDF Graph Serverの両方をデプロイする。
- 別のサーバーにしてロード・バランサーで振り分ける。
今回は2番目の方法を採用しています。すでに実装済みのORDSは変更せずに、Oracle RDF Graph Serverをインストールします。SSLはロード・バランサにオフロードします。Oracle RDF Graphs Serverの環境構築については
こちらの記事と同じ手順ですが、自動起動の設定も追加で行います。
ロード・バランサでリクエストをそれぞれのサーバーに振り分けるために、ルーティング・ポリシーを設定します。
Oracle RDF Graph Serverのセットアップ
Oracle RDF Graph Serverは、ユーザーoracleで動作させます。Jettyも含め、インストール先は/home/oracle以下とします。前提となる作業は以下になります。
- ユーザーoracleの作成
- Jetty 9.x(今回はjetty-distribution-9.4.44.v20210927.zip)の/home/oracleへの配置
- orardf-21.4.0.warの/home/oracleへの配置
- ディレクトリ/home/oracle/rdf-docの作成と、orardf_swagger.json、orardf_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の配置
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/tcpsudo 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、ステータス・コードは302、URLパス(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の環境構築の参考になれば幸いです。
完