As I read an article about Oracle providing version 23c “for free to developers” (https://blogs.oracle.com/database/post/oracle-database-23c-free) I wondered if it was usable for a quick deploy of Apex. As ORDS has been updated as well it turns out that needed some tweaking…
Incorporating the 23c release of the Oracle database is quite easy. Just specify the url where to get the image. Changing to ORDS version 22 required a bit more tweaking.
Oracle has changed the way you configure ORDS in a silent install, no more ords_params.properties but command-line options. And no more calling the war file, but a command file. You can read about the “old” installation in Quickstart Apex with docker-compose. This post is mainly about the changes in relation to that post.
So which changes were needed? First the docker-compose file needed changes to incorporate the image oracle provides in their container registry.
version: '2'
services:
ApexDB:
cpu_count: 2
image: container-registry.oracle.com/database/free:latest
container_name: 23c_free
restart: always
volumes:
- /opt/DockerData/Oracle/containers/23cApex22/oradata:/opt/oracle/oradata
- /opt/DockerData/Oracle/containers/23cApex22/stage:/opt/stage
- /opt/DockerData/Oracle/containers/23cApex22/scripts:/opt/scripts
ports:
- 1522:1521
TomcatORDS:
#image: tomcat:9.0
image: ords
build: buildOrds
depends_on:
- ApexDB
container_name: ords
restart: always
volumes:
- /opt/DockerData/Oracle/containers/23cApex22/stage/apex/images:/usr/local/tomcat/webapps/i
ports:
- 8081:8080
links:
- ApexDB
Next, the build script for the ORDS container had one of the commands removed (setting the config dir within the war file). And also the ords_params.properties file is no longer required.
FROM tomcat:9.0
RUN mkdir -p /opt/ords
COPY ords-latest.zip /opt/
RUN unzip /opt/ords-latest.zip -d /opt/ords
RUN mkdir -p /opt/ords/conf
COPY first_run.sh /
RUN chmod +x /first_run.sh
CMD /first_run.sh
The start-up script needed some changes as well, as the installation procedure for ORDS has changed.
#!/bin/bash
#
# Apex startup script v 1.1
# Checks if this is the first run, if so perform installation, if not
# just copy the war file (to be on the safe side) and fire up Tomcat
#
# (c) 2023 Patrick v Zweden
#
ORACLE_PASSWORD=Oracle#01
ORACLE_DB=freepdb1
ORACLE_DB_HOST=ApexDB
export JAVA_OPTS="-Dconfig.url=/opt/ords/conf/"
if [ -e /INSTALLED ]; then
cp /opt/ords/ords.war /usr/local/tomcat/webapps
catalina.sh run
else
echo "First run, setting up the system..."
echo "First wait a bit for Oracle to stabilize...."
sleep 60
cd /opt/ords
bin/ords --config /opt/ords/conf/ install \
--admin-user sys \
--db-hostname ${ORACLE_DB_HOST} \
--db-port 1521 \
--db-servicename ${ORACLE_DB} \
--feature-sdw true \
--feature-db-api true \
--feature-rest-enabled-sql true \
--gateway-mode proxied \
--gateway-user APEX_PUBLIC_USER \
--proxy-user --password-stdin <<PASSWD
${ORACLE_PASSWORD}
${ORACLE_PASSWORD}
PASSWD
if [ $? -eq 0 ]; then
touch /INSTALLED
fi
cp ords.war /usr/local/tomcat/webapps
catalina.sh run
fi
And because the database naming is different from “self-build” images the installation script for kicking off the APEX installation needed some changes as well. To get a new version of the installation scripts, see the end of this post.
So, it took a bit of tweaking but it then you have Oracle APEX with the newest version of ORDS (22) and the newest Oracle Database (23c).