2025年11月14日金曜日

ngrokを使って外部からローカルPCで実行しているAPEXアプリにアクセスする

最近はローカルPCのコンテナ環境でOracle APEXを動かしていることが多いのですが、Always FreeのAutonomous Databaseとは異なり、作成したAPEXアプリケーションを他の人にアクセスさせることができません。ローカルPCで開発している方が応答速度が速いので作業は捗るのですが、他の人にアプリケーションを使って欲しいときに、共有できる環境にアプリケーションをコピーするのは手間がかかります。

以前から気になっていましたが、ngrokというトンネリングサービスがあります。このサービスを使うと、ローカルで動作するアプリケーションをインターネット経由でアクセスできます。

このngrokを使って、ローカルのコンテナ環境で実行しているOracle APEXのアプリケーションを、インターネット経由でアクセスできるようにしてみます。

作業環境は以下です。手元のブラウザからは、http://localhost:8181/ords/apexでAPEXにアクセスします。


ngrokのFreeプランで検証します。ngrokにユーザー登録を行い、ngrokのエージェントのセットアップを実施します。



ngrokのエージェントをインストールすると、ngrokコマンドを実行できるようになります。

ローカルPCで、プロトコルがhttp、ポート番号が8181で待ち受けしているアプリケーションをインターネットに公開します。

以下のコマンドを実行します。

ngrok http 8181

コマンドを実行したターミナルに、トンネルの稼働状況が表示されます。

Forwardingに表示されているホスト名を確認します。


ブラウザからこのホストにアクセスします。Freeプランの場合、最初に確認画面が表示されます。Visit Siteをクリックします。


Oracle REST Data Servicesのトップ画面が表示されます。

Oracle APEXを実行します。


APEXのワークスペースへのサインイン画面が表示されます。ローカル環境に作成したワークスペースおよびユーザーでサインインします。


CORSのエラーが発生し、サインインできません。


調査したところ、ブラウザは以下のURLでAPEXにアクセスしていると認識しています。

https://ホスト名.ngrok-free.app/...

APEXは以下のサイトからリクエストが送信されていると認識しています。認識しているプロトコルが異なります。

http://ホスト名.ngrok-free.app/...

CORDSのエラーを返しているのはAPEXではなくORDSなので、ORDSにhttps://ホスト名.ngrok-free.app/からのリクエストを信頼するように設定します。

ORDSを実行しているコンテナ(apex-ords)に接続します。

podman exec -it apex-ords sh

% podman exec -it apex-ords sh  

sh-5.1$ 


以下のコマンドを実行し、security.externalSessionTrustedOriginsの設定を追加します。

ords --config /etc/ords/config config set security.externalSessionTrustedOrigins https://ホスト名.ngrok-free.app

sh-5.1$ ords --config /etc/ords/config config set security.externalSessionTrustedOrigins https://c1e7a3247247.ngrok-free.app


ORDS: Release 25.3 Production on Fri Nov 14 07:39:25 2025


Copyright (c) 2010, 2025, Oracle.


Configuration:

  /etc/ords/config


The global setting named: security.externalSessionTrustedOrigins was set to: https://c1e7a3247247.ngrok-free.app

sh-5.1$ 


コンテナを再起動します。

exit
podman restart apex-ords

sh-5.1$ exit

exit

% podman restart apex-ords

apex-ords

% 


最初からアクセスし直すと、今度はアプリケーション・ビルダーにサインインできます。


Freeプランの場合、ngrokを起動するたびに新たなホスト名が割り当たります。そのため、ngrokを起動するたびに、ORDSのsecurity.externalSessionTrustedOriginsを更新する必要があります。無料なので致し方ありません。有料プランに移行すると、エンドポイントのホスト名を固定できます。

今回の記事は以上になります。