Oracle Container RegistryにはOracle Database 23c FreeとOracle REST Data Servicesのコンテナ・イメージが登録されています。Oracle REST Data Servicesのコンテナ・イメージにはOracle APEXの全言語版が含まれていて、初回起動時にデータベースにOracle APEXとOracle REST Data Servicesを構成するようにコンテナ・イメージが作られています(ただし、データベースにインストールされるのは英語のみ)。
コンテナ・イメージからOracle APEXが動作する環境を作成するには、Oracle Database 23c FreeとOracle REST Data Servicesの2つのコンテナが必要です。podmanにはYAML形式の構成ファイルを読み込み、podとそれに含まれるコンテナを作成する機能があります。この機能を使って、色々なCloudの仮想マシンにOracle APEXを実装してみます。
podmanに与えるYAMLファイルを生成するスクリプトは以下です。
Oracle Cloud、Microsoft Azure、AWS、Google Cloudの仮想マシン上にOracle APEXの環境を作成します。
仮想マシンは少なくてもスレッドが2つ(オラクルであれば 1OCPU、その他は 2vCPU)、メモリは最低限 8GB は必要です。 4GB だとスワップが発生しパフォーマンスが悪化します。
データベースのイメージにORDSをインストールする(同居させる -
こちらの記事)と、メモリ要件を下げることができる可能性があります。
Oracle Cloud
仮想マシンはイメージとしてOracle Linux 9、Shapeは 1OCPU、メモリ8GBを選択して作成しました。
仮想マシンのIPアドレスは、手元のPCにホスト名
oci-apexで参照できるように登録しておきます。接続に使用する秘密キーのファイルは
oci-apex.keyとして保存しています。
Oracle Cloudに作成した仮想マシンに接続します。
ssh -i oci-apex.key opc@oci-apex
podmanのインストールとfirewalldの設定を行います。
以下のコマンドを実行します。podmanを含むcontainer-toolsをインストールしたのち、firewalldにポート8181、8443、1521への接続許可とポート80への接続を8181へ、ポート443への接続を8443へ転送する設定を行なっています。今回はHTTPで構成するため、HTTPS関連の設定は実際は不要です。その後にグループoinstallをGID:54321、ユーザーoracleをUID:54321で作成します。
作成したユーザーoracleで作業を行います。
sudo su - oracle
[opc@apex ~]$ sudo su - oracle
[oracle@apex ~]$
コンテナ・イメージが無ければpod作成時にダウンロードされますが、ポッドの作成に時間がかかります。作業の進捗が分かりにくくなるため、あらかじめコンテナ・イメージをダウンロードしておくことをお勧めします。
podman pull container-registry.oracle.com/database/free:latest
podman pull container-registry.oracle.com/database/ords:latest
記事に先頭に示したスクリプトinstall_apex.shを仮想マシン上に配置します。
引数にデータベースのSYSのパスワードを指定します。
sh install_apex.sh パスワード
[oracle@apex ~]$ sh install_apex.sh パスワード
apex.yaml is generated. please run
podman kube play apex.yaml
To monitor the progress
podman logs apex-db
podman exec -it apex-ords tail -f /tmp/install_container.log
[oracle@apex ~]$
構成ファイルが
apex.yamlとして出力されます。
podmanにこのファイルを渡し、Oracle Database 23c FreeとOracle REST Data Servicesの2つのコンテナを含むポッドapexを作成します。Oracle APEXとOracle REST Data Servicesの構成は、Oracle REST Data Servicesのコンテナ起動時に自動的に行われます。
podman kube play apex.yaml
[oracle@apex ~]$ podman kube play apex.yaml
Pod:
de1381c11f990c81c2c348a5fe11654e4fb9963a373216d54ccc3083ab515ec6
Containers:
66bac5230fe5f745e5dd1a822b3728ffb9f1cdbebbf42c944fd22b25d369e2da
a305fdf18191eb184892fc9180cb88cd420b280a2d530b72715eb26df62c70f3
[oracle@apex ~]$
データベースのコンテナが作成された後に、Oracle APEXのインストールが開始します。
進捗は、以下のコマンドで確認できます。
podman exec -it apex-ords tail -f /tmp/install_container.log
大体30分弱でOracle APEXの構成が終了します。
--application/pages/page_00206
--application/end_environment
... elapsed: 4.8 sec
...done
Adjust instance settings
PL/SQL procedure successfully completed.
Disconnected from Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.3.0.23.09
構成が終了すると、以下のURLからORDSのランディング・ページにアクセスできます。
Oracle APEXを開くと日本語のリソースもインストールされていることが確認できます。
Microsoft Azure
Azureの仮想マシンではイメージとしてOracle Linux 9が選択できるので、それを選択します。OSが同じなので、Oracle Cloudと同じ手順でOracle APEXを構成できます。
サイズはStandard_D2s_v3(2 vcpu数、8GiBのメモリ)を選択します。
受信ポートを選択で、HTTP (80), HTTPS (443), SSH (22)を選択します。
以上の条件で仮想マシンを作成します。
仮想マシンのIPアドレスは、手元のPCにホスト名
azure-apexで参照できるように登録しておきます。接続に使用する秘密キーのファイルは
apex_key.pemとして保存しています。
Microsoft Azureに作成した仮想マシンに接続します。
ssh -i apex_key.pem azureuser@azure-apex
これ以降の作業はOracle Cloudと同じです。
大体30分弱でOracle APEXの構成が終了しました。
構成が完了すると、以下のURLでORDSのランディング・ページに接続できます。
Google Cloud
Google Cloudではマシンの構成にe2-standard-2 (2vCPU、1コア、8GBメモリ)を選択します。
ブートディスクにRocky Linux 9 optimized for GCPを選択しました。
ファイアウォールの
HTTPトラフィックと
HTTPSトラフィックを許可するにチェックを入れます。
以上の条件で仮想マシンを作成します。
Google Cloudでは秘密鍵の扱いが少々異なるため、Google Cloudの仮想マシンはブラウザウィンドウから操作することにしました。
Rocky Linux 9をブートイメージとして選択しているため、以降の作業はOracle Linux 9と同じです。
仮想マシンのIPアドレスは、手元のPCにホスト名gcp-apexで参照できるように登録しておきます。
大体30分弱でOracle APEXの構成が終了しました。
構成が完了すると、以下のURLでORDSのランディング・ページに接続できます。
Amazon Lightsail
インスタンスイメージにCentOS 9 Streamを選択します。
サイズは
8GBメモリ、2仮想CPUの
$40を選択します。
接続に使用するSSHキーペアの変更を行います。
作成されたインスタンスの接続に使えるSSHキーファイルを、aws-key.pemとして保存しておきます。
以上の条件でインスタンスを作成します。
ネットワーキングのIPv4ファイアウォールについて、HTTPはデフォルトで許可されているため、特に変更しません。プロトコルTCPのポート番号1521と443(HTTPS)は、必要に応じて追加します。
仮想マシンのIPアドレスは、手元のPCにホスト名aws-apexで参照できるように登録しておきます。
Amazon Lightsailに作成した仮想マシンに接続します。
ssh -i aws-key.pem ec2-user@aws-apex
これ以降の作業はOracle Cloudと同じです。
大体40分弱でOracle APEXの構成が終了しました。
構成が完了すると、以下のURLでORDSのランディング・ページに接続できます。
色々なCloudの仮想マシンにOracle APEXを実装する手順の紹介は以上です。
RHEL9系列のOracle Linux 9、Rocky Linux 9、CentOS 9 Streamを選んでいるので、仮想マシンを準備した後の作業手順は基本同じです。
ポッドapexを作成するためにYAML形式の構成ファイルを使用しています。パスワードについてはKubenetes secretとして保存し、ポッドを作成するapex.yamlにパスワードの記述を含めないようにしています。ords_secrets/conn_string.txtおよびords_custom/01_install_language.shには、APEXおよび言語リソースをインストールするためにSYSのパスワードが記載されています。
ords_custom/01_install_language.shおよびords_secrets/conn_string.txt(このファイルはインストールが終了すると削除されます)は削除すればよいのですが、環境変数ORACLE_PWDに与えたパスワードはpodman generate kube apexを実行すると取り出すことができます。
そのため、安全のためにOracle APEXの環境構築後はsetPassword.shを呼び出して、SYS、SYSTEM、PDBADMINのパスワードの変更を変更しておくことが推奨されます。
podman exec apex-db ./setPassword.sh <your_password>
最後に、install_apex.shを実行すると以下のようなYAMLファイルが生成されています。