Aufgabe
In einer schon bestehenden Podman Oracle 23ai Umgebung soll noch zusätzlich der ORDS und APEX aufgesetzt werden. Das ganze dient als Testumgebung für das Vector Search Feature der 23ai.
Wenn noch keine Datenbank vorhanden ist, lässt sich am elegantesten das auch komplett wie hier beschrieben über einen „Podman compose file“ aufsetzen ⇒ https://blogs.oracle.com/developers/post/fastpath-to-developing-with-oracle-application-express-and-multilingual-engine .
Wir wollen aber hier die bestehende Umgebung erweitern und setzte den ORDS/APEX Container neben der bestehenden 23ai Container auf.
Ablauf:
Am Ende sollten wir eine 24.4.0 - ORDS 24.4.0 and APEX 24.1.0 Umgebung zur Verfügung haben.
Die folgende Version mit dem latest Container (21.03.2025) lag am Ende vor : ORDS = 24.4.0.r3451601 - APEX 24.1.0
Für den Vector Search Einsatz ist das leider aber nicht die richtige Version, in 24.2 gibt es dazu ein eine native Unterstützung ⇒ siehe https://blogs.oracle.com/apex/post/nextgen-data-search-integrating-ai-vector-search-into-search-configurations
Unsere Umgebung steht bereists komplett zur Verfügung, siehe Oracle Datenbank 23ai Free Edition über ein Container Image unter Linux 9 als Testumgebung für AI Vector Search verwenden.
Dort ist podman schon konfiguriert und auf der Maschine wird APEX noch zusätzlich aktiviert.
Auch gibt es dort mit der richtigen UID bereits eine User oracle im Host system, das ist wichtig für das spätere Mappen der Konfigurationsdateien im /etc Verzeichnis.
Notwendige Verzeichnisse anlegen:
ORDS Konfiguration:
mkdir -p /etc/ords/config # im ersten Schritt auch other Schreibrechte geben # Vermutlich ist es der User Oracle aus dem Container der hier die Konfig anleget? chmod -R o+rw /etc/ords
Secrets Verzeichnis:
mkdir /opt/oracle/variables chown -R oracle:oinstall /opt/oracle/variables #auch hier erstmal etwas mehr rechte chmod o+rw /opt/oracle/variables
Als User root:
podman pull container-registry.oracle.com/database/ords-developer:latest
Welche Images stehen nun zur Verfügung:
podman images REPOSITORY TAG IMAGE ID CREATED SIZE container-registry.oracle.com/database/free latest ac5f0e5fb443 6 weeks ago 9.55 GB container-registry.oracle.com/database/ords-developer latest bd4868caeffd 2 months ago 2.22 GB
Ziel ist es APEX in der PDB zu installieren, mal sehen ob das klappt, damit ist der Connect String sys@//10.10.10.118:1521/freepdb1 in meiner Umgebung
Als user oracle:
su - oracle cd /opt/oracle/variables echo 'CONN_STRING=sys/oracle@10.10.10.118:1521/freepdb1' > conn_string.txt
Aus der Doku:
Die Datei conn_string.txt ist obligatorisch und muss in das Verzeichnis /opt/oracle/variables/ des Containers eingebunden werden.
Die CONN_STRING-Variable in dieser Datei muss das folgende Format haben: CONN_STRING=benutzer/kennwort@hostname:port/service_name
Die Datei conn_string.txt wird beim Start des Containers gelöscht.
Die Angaben zur Datenbankverbindung werden nicht in den Umgebungsvariablen des Containers gespeichert.
Die angegebenen Datenbankzugangsdaten müssen SYSDBA-Zugriff haben, da dies das Datenbankkonto ist, das für die Installation/Upgrade der APEX- und ORDS-Datenbankkomponenten verwendet wird.
Container beim Ersten Zugriff starten und konfigurieren:
podman run \ --name ords24 \ --network=host \ -v /opt/oracle/variables:/opt/oracle/variables \ -v /etc/ords/config:/etc/ords/config \ container-registry.oracle.com/database/ords-developer:latest INFO : This container will start a service running ORDS 24.4.0 and APEX 24.1.0. INFO : CONN_STRING has been found in the container variables file. INFO : Database connection established. INFO : Apex is not installed on your database. INFO : Installing APEX on your DB please be patient. INFO : You can check the logs by running the command below in a new terminal window: docker exec -it podman23ai.pipperr.local tail -f /tmp/install_container.log WARN : APEX can be installed remotely on PDBs, If you want to install it on a CDB, install it directly on the Database and not remotely.
( mit der –rm Option aus der Doku wird der Container jedes mal gelöscht und neu initialisiert ,mit -p 8181:8181 \ wird der Port gemappt, allerdings arbeiten wir ja mit der –network Option um gleich auch von außen auf den Container zugreifen zu können ).
Aus der Doku: Wenn auf der Datenbank bereits eine frühere Version des APEX installiert ist, wird sie durch den Container auf die im Container verhandene Version aktualisiert. Aber nur wenn die Hauptversionen übereinstimmt. Sollten die Hauptversionen der APEX-Versionen nicht übereinstimmen, wird der Container aus Kompatibilitätsgründen den Upgradeprozeß abbrechen.
Hat das mit dem Mount geklappt?
podman inspect ords24 --format '{{.Mounts}}' [{bind /opt/oracle/variables /opt/oracle/variables [rbind] true rprivate} {bind /etc/ords/config /etc/ords/config [rbind] true rprivate} ] #Im Container Image prüfen podman exec -it ords24 bash bash-4.4$ cd /etc/ords/config bash-4.4$ ls
Nach dem Start dauert es etwas, Logfile der APEX Installation in einer zweiten Session auswerten:
podman exec -it ords24 tail -f /tmp/install_container.log
Was wurde erzeugt:
# Was läuft gerade podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08107bf58fd7 container-registry.oracle.com/database/free:latest /bin/bash -c $ORA... 6 days ago Up 4 days (healthy) 1521/tcp freeDB 910bc2ffe218 container-registry.oracle.com/database/ords-developer:latest /bin/sh -c bash /... 2 minutes ago Up 2 minutes 8181/tcp ords24 # Configuration des zuletzt gestarteten Images podman inspect -l .. "HostConfig": { "Binds": [ "/opt/oracle/variables:/opt/oracle/variables:rw,rprivate,rbind", "/etc/ords/config:/etc/ords/config:rw,rprivate,rbind" ], ... # Letzte Logs anzeigen podman logs -l # Was läuft im Container podman top -l
Falls nicht gestartet kann auch nachgestartet werden mit:
podman start ords24
Liegt die Konfiguration wirklich im Host Verzeichnis:
cd /etc/ords/config ls -la total 0 drwxr-xrwx 4 root root 37 Mar 21 10:18 . drwxr-xrwx 3 root root 20 Mar 21 09:47 .. drwxr-xr-x 3 oracle oinstall 21 Mar 21 10:18 databases drwxr-xr-x 2 oracle oinstall 26 Mar 21 10:18 global
Konfiguration gehört den User oracle!
Ist auf den Port etwas zu sehen?
ss -tulpn Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ... tcp LISTEN 0 50 *:8181 *:* users:(("java",pid=154478,fd=8))
Aufruf über http://10.10.10.118:8181 zeigt die ORDS Start Seite.
Anmelden am Internal Worksspace mit:
Damit kann nun der erste Workspace angelegt werden und die Tests mit APEX Können beginnen.
Oracle:
Podman: