Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_apex_20_2_install_windows_19c_linux_8

Oracle APEX 23 / ORDS 23 / Tomcat 9 mit Java 21 / Apache 2.4 mit der Oracle Datenbank 23c unter Oracle Linux 8 - Installation

Aufgabe: Performantes Stand-Alone System für eine APEX Entwicklungsumgebung

Bzgl. Upgrade siehe Oracle ORDS APEX 22/23 - Auf den neuesten Stand halten - Upgrade APEX / ORDS/ Tomcat / Apache unter Linux

Betriebsystem:

  • Oracle Linux 8

Datenbank:

Web Produktstack:

Architektur Übersicht:

 Oracle APEX mit Oracle Apache / Tomcat / ORDS

Alternativ unter Windows ⇒ Oracle ORDS 3.0 (Oracle REST Data Services) mit dem Apache Application Server Tomcat unter Windows 2012 betreiben - SSL einsetzen

Ablauf der Installation:

  1. Oracle Linux 8 Basis System einrichten und Konfigurieren - Name und IP Adresse sollten sich auf keine Fall je wieder ändern!
    1. Oracle Java 21 Installation (da Oracle ORDS kann hier Oracle Java verwendet werden)
  2. Oracle Datenbank 23c (Free Edition!) oder 19c
  3. Apache Tomcat9 Installation
  4. Apache 2.4 HTTP Installation und Konfiguration
  5. Oracle APEX 23 Installation / Patch und Konfiguration
  6. Performance Test und Optimierungen

Basis System Oracle 8

Siehe dazu ⇒ Ein Oracle Linux 8 Basis System als Grundlagen für eine Oracle Clusterware und Datenbank Installation vorbereiten inkl. der Java Installation.

Darauf achten SELinux auszuschalten oder entsprechenden zu konfigurieren!

getenforce
Enforcing
 
 
vi /etc/selinux/config
SELINUX=disabled
 
reboot
 
getenforce
Disabled

Tools nach installieren:

# wget 
dnf install wget
 
 
# text Browser um in der Console zu arbeiten
 
wget https://yum.oracle.com/repo/OracleLinux/OL7/optional/latest/x86_64/getPackage/lynx-2.8.8-0.3.dev15.el7.x86_64.rpm
 
dnf install lynx-2.8.8-0.3.dev15.el7.x86_64.rpm

Zeitzonen überprüfen:

timedatectl
 
#falls es nicht passt
timedatectl set-timezone Europe/Berlin

Für die eigentliche Datenbank wird eine eigene Platte konfiguriert, Filesystem XFS und unter /opt/oracle/ora_data eingehängt.

Hier ist zu überlegen, welches Dateisystem gewählt werden kann, ext4 oder xfs z.B.

Siehe auch:

Datenplatte anlegen:

# Partitonieren
 
 fdisk /dev/nvme0n2
n --new
p --primary
1
return
t  -- define type
8e -- Linux lvm
w  -- write
 
#LVM anlegen
 
ls /dev/nvme0n2*
 
pvcreate /dev/nvme0n2p1
  Physical volume "/dev/nvme0n2p1" successfully created.
 
vgcreate vg_ora_db /dev/nvme0n2p1
  Volume group "vg_ora_db" successfully created
 
lvcreate -L +29G -n xfs_db vg_ora_db
 Logical volume "xfs_db" created.
 
ls -la /dev/vg_ora_db
 
#Filesystem erzeugen
mkfs.xfs /dev/vg_ora_db/xfs_db
 
# Einhängen
 
mkdir /opt/oracle/oradata 
 
mount /dev/vg_ora_db/xfs_db /opt/oracle/oradata 
 
df -h
mount | grep oradata
 
chown -R oracle:oinstall /opt/oracle/oradata 
 
#testen als user oracle! 
touch /opt/oracle/oradata/ora_data_disk_space.txt
 
# Permanent hinterlegen
vi /etc/fstab
/dev/mapper/vg_ora_db-xfs_db /opt/oracle/oradata   xfs     defaults        0 0
 
testen mit:
umount /opt/oracle/oradata
 
mount /opt/oracle/oradata
 
#testen als user oracle! 
touch /opt/oracle/oradata/ora_data_disk_space.txt

siehe auch ⇒ https://www.linuxtechi.com/create-extend-xfs-filesystem-on-lvm/


Datenbank

Im ersten Schritt die Datenbank unter dem User Oracle aufsetzen (DB Software installieren + DB anlegen).

23c DB Software

Aktuell ist nur die FREE Edition on-premise verfügbar siehe dazu ⇒ Die Oracle Datenbank 23c als Free Edition unter Linux 8

Eigenen Tablespace für APEX anlegen:

ALTER SESSION SET CONTAINER = ans;
 
 
CREATE TABLESPACE APEX DATAFILE '/opt/oracle/oradata/FREE/FREEDB1/apex01.dbf' SIZE 1G AUTOEXTEND ON NEXT 500K MAXSIZE 4G;

Plugable starten

ALTER PLUGGABLE DATABASE FREE OPEN READ WRITE;
#beim nächsten START automatisch wieder mounten
ALTER PLUGGABLE DATABASE ans SAVE STATE;
 
SELECT NAME, OPEN_MODE, RESTRICTED, OPEN_TIME FROM V$PDBS;
 
ALTER SESSION SET CONTAINER = FREE;
 
SHOW CON_NAME

Autostart einrichten

Java 21

!Achtung! Nur wenn Java auch ausschließlich mit Oracle Produkten verwendet wird! Lizenzbedingungen beachten!!

Siehe dazu die Node ⇒ Support Entitlement for Java SE When Used As Part of Another Oracle Product (Doc ID 1557737.1)

Oracle Java, falls nur z.B. der ORDS zum Einsatz kommen soll

Als User root!

Kopieren jdk-21_linux-x64_bin.rpm von https://www.oracle.com/java/technologies/downloads/ und installieren:

cd /tmp
 
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
 
 
# Java installieren
 
dnf install  --nogpgcheck jdk-21_linux-x64_bin.rpm
 
 
# Java aktivieren
 
# Neue Java Version dem OS bekannt geben
 
/usr/sbin/alternatives --install /usr/bin/java java /usr/java/jdk-21.0.1 2101
 
 
# Versionen anzeigen
/usr/sbin/alternatives --display java
 
# Version einstellen
/usr/sbin/alternatives --config java
# Version  /usr/lib/jvm/jdk-21-oracle-x64/bin/java  auswählen
 
# testen
java -version
java version "21.0.1" 2023-10-17 LTS
 
 
# alte Java Version deinstallieren
 dnf list installed java*
 
dnf erase  java-11-openjdk.x86_64  java-11-openjdk-headless.x86_64

Das Programm jps sollte auf dem Server im Pfad liegen/funktionieren, ist sehr hilfreich für die Wartung Nach einem Java Upgrade muss das Kommando jps evlt. wieder neu verlinkt werden:

#testen ob notwendig, in 15.0 hat es aber mit alternatives richtig geklappt
jps -m
 
# falls fehler
# über /usr/bin verlinken
rm /usr/bin/jps
ln -s /usr/java/jdk-21-oracle-x64/bin/jps /usr/bin/jps

Tomcat9

Software über ⇒ https://tomcat.apache.org/download-90.cgi herunterladen.

Nur Apache Tomcat Release 8.5.x und Release 9.0.x wird vom ORDS nur unterstützt! Tomcat 10 klappt nicht ⇒ Class [oracle.dbtools.entrypoint.WebApplicationRequestEntryPoint] is not a Servlet - das ist noch nicht kompatibel!

Basis Installation

Damit später einfacher ein Update eingespielt werden kann, wird das Software Home und das Konfigurations-Home getrennt angelegt und dann verlinkt konfiguriert.

root

Tomcat User anlegen:

useradd tomcat
 
passwd tomcat
 
mkdir -p /srv/tomcat
 
chown tomcat:tomcat /srv/tomcat

Tomcat Sofware installieren als User Tomcat:

su - tomcat
 
cd /srv/tomcat
 
mkdir install
 
cd install
 
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.83/bin/apache-tomcat-9.0.83.tar.gz
 
sha512sum apache-tomcat-9.0.83.tar.gz
3f022ec8552bce1b72eb85d0778c93052ccb00226de3302544ec844ab93a9991e19c2db56ed06c18f03e5d75f34a46cedac46ae83bdd225518a55c62fc69ea04  apache-tomcat-9.0.83.tar.gz
 
# mit dem Key der Webseite vom Tomcat vergleichen  um sicher zu sein das alles auch da und unverändert ist!
 
# in dieser Verzeichnis auspacken
 
cd ..
 
mkdir  apache-tomcat-9.0.83
 
tar xzf ./install/apache-tomcat-9.0.83.tar.gz
 
#aber dann verlinken!
 
ln -s /srv/tomcat/apache-tomcat-9.0.50/ /srv/tomcat/tomcat
 
 
#Konfiguration außerhalb der Software speichern
 
mkdir config
 
 
cp -r /srv/tomcat/tomcat/conf     /srv/tomcat/config/
cp -r /srv/tomcat/tomcat/logs     /srv/tomcat/config/
cp -r /srv/tomcat/tomcat/temp     /srv/tomcat/config/
cp -r /srv/tomcat/tomcat/webapps  /srv/tomcat/config/
cp -r /srv/tomcat/tomcat/work     /srv/tomcat/config/

Start Test:

# als Tomcat User!
 
cd
 
vi ~/.bash_profile
 
export JAVA_HOME=/usr/java/latest
export CATALINA_HOME=/srv/tomcat/tomcat
export CATALINA_BASE=/srv/tomcat/config
 
. ~/.bash_profile
 
 
$CATALINA_HOME/bin/startup.sh 
 
cd /srv/tomcat/config/logs
tail catalina.out
 
..
17-Mar-2021 14:31:49.555 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [917] milliseconds
..
 
# pürfen mit 
ps -ef | grep tomcat
netstat -nlp | grep 8080
 
# Start Seite aufrufen:
 
lynx localhost:8080
 
#wieder stoppen
$CATALINA_HOME/bin/shutdown.sh
Tomcat Auto Start einrichten

Datei unter /etc/systemd/system/tomcat.service als root anlegen:

tomcat.service
[Unit]
Description=Tomcat - instance
After=syslog.target network.target
 
[Service]
Type=forking
 
User=tomcat
Group=tomcat
 
WorkingDirectory=/srv/tomcat/config
 
Environment="JAVA_HOME=/usr/java/latest"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Dconfig.url=/srv/ords/config"
 
Environment="CATALINA_PID=/srv/tomcat/config/run/tomcat.pid"
Environment="CATALINA_BASE=/srv/tomcat/config"
Environment="CATALINA_HOME=/srv/tomcat/tomcat"
# folgende Einstellungen nur für Oracle Java nicht OpenJDK!
# ab Java 18
Environment="CATALINA_OPTS=-Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -server -XX:+UseParallelGC"
 
 
ExecStart=/srv/tomcat/tomcat/bin/startup.sh
ExecStop=/srv/tomcat/tomcat/bin/shutdown.sh
 
[Install]
WantedBy=multi-user.target
#after the db start
#passenden Service eintragen!
#alternativ falls ein Cluster/ASM DB = >oracle-ohasd.service
#After=dbora.service

Und für die neue ORDS ab 22/23 Konfiguration den Parameter „-Dconfig.url=/srv/ords/config“ mit aufnehmen!

Start konfigurieren:

systemctl daemon-reload
systemctl enable tomcat.service
systemctl start tomcat.service
systemctl status tomcat.service

Bei Problemen deguggen mit:

systemd-analyze verify /etc/systemd/system/tomcatORDS.service

Tomcat Basis Konfiguration

Konfiguration befindet sich dann hier:

  • Release Notes : $CATALINA_HOME
  • Bin Directory : $CATALINA_HOME/bin
  • Config : $CATALINA_BASE/conf
  • Webapps : $CATALINA_BASE/webapps
  • Logs : $CATALINA_BASE/logs

Apache Tomcat wird über die folgenden vier Dateien in $CATALINA_BASE/conf konfiguriert:

  • server.xml
  • context.xml
  • tomcat-users.xml
  • web.xml

Die Dateien liegen unter $CATALINA_HOME\conf Verzeichnis.

TCP Port setzen - server.xml

Über „server.xml“ wird zum Beispiel der HTTP Port gesetzt, der Default HTTP Port ist 8080.

Soll der Port verändert werden, zum Beispiel auf 8090, folgende Zeile suchen und anpassen:

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000"
               redirectPort="8443" />
Das AJP Protokoll aktivieren

Einkommentieren und localhost als IP setzen:

vi /srv/tomcat/config/conf/server.xml
..
 <Connector protocol="AJP/1.3"
               address="127.0.0.1"
               port="8009"
 
               tcpNoDelay="true"
 
               maxThreads="400" 
               processorCache="400"
 
               acceptCount="350" 
               acceptorThreadCount="2"
               connectionTimeout="2000"
 
               requiredSecret="ORACLEAPEX1234"
               secretRequired="true"
 
               redirectPort="8443" />

Bei Tomcat9 auf die „requiredSecret“ Einstellung achten, ohne diese Secret ist mir nicht gelungen die AJP Schnittstelle in Funktion zu setzen.

Mittler Block sind die Performance Relevanten Parameter mal „nach Gefühl“ gesetzt, testen und nachschärfen ist hier noch notwendig.

Bedeutung der Parameter ⇒ https://tomcat.apache.org/tomcat-9.0-doc/config/ajp.html

Prüfen ob der Port auch funktioniert mit :

ss -tlp | grep 8009
LISTEN 0      350    [::ffff:127.0.0.1]:8009                      *:*    users:(("java",pid=31688,fd=45))  
Admin User konfigurieren - tomcat-users.xml

Über die Datei „tomcat-users.xml“ wird der Admin User für die Admin Oberfläche konfiguriert, dazu werden bestimmte Rollen benötigt.

  • manager-gui - allows access to the HTML GUI and the status pages
  • manager-script - allows access to the text interface and the status pages
  • manager-jmx - allows access to the JMX proxy and the status pages
  • manager-status - allows access to the status pages only
<role rolename="manager-gui"/>
<user username="tomcat" password="geheim" roles="manager-gui"/>

Damit das aber auch bei einem Zugriff von außen funktioniert die IP Einschränkung in dem Servlet ausschalten: Daten /srv/tomcat/config/webapps/manager/META-INF/context.xml

Auskommentieren bzw. auf die richtige IP Anpassen:

<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

Apache Tomcat härten

Nach dem ersten Test ob alles funktioniert wie erwartet, muss unbedingt sofort die Härtung der Umgebung erfolgen.

Zum Beispiel als erstes alle Beispiel Deployments/Servlets unter TOMCAT_HOME/webapps bis auf „ ords“ löschen.

cd /srv/tomcat/config/webapps
 
rm -rf docs/ examples/ host-manager/ manager/

Dann steht allerdings auch eine Admin Oberfläche des Tomcat NICHT mehr zur Verfügung, was den Betrieb an sich aber nicht stört.

Siehe auch Härtungsanleitungen und Richtlinien dazu im Netz:

CIS

WEB

Nachdem später der Apache Zugriff auf Tomcat eingerichtet ist, Tomcat auf Local Host beschränken.

Nur noch Zugriff auf Tomcat über „localhost“ erlauben (address=„127.0.0.1“ hinzufügen), dazu server.xml anpassen.

server.xml:

  <Connector port="8080" 
             protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" 
  	     address="127.0.0.1" 
  />
Tomcat Native Libraries aktiveren

Installieren als root:

 dnf install tomcat-native.x86_64

siehe auch ⇒ http://tomcat.apache.org/native-doc/

Umgebung setzen als tomcat :

cd /srv/tomcat/tomcat/bin
 
vi setenv.sh
 
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH
 
chown tomcat:tomcat setenv.sh

Verwendung prüfen als root:

systemctl stop tomcat.service ; systemctl start tomcat.service
 
cd /srv/tomcat/config/logs
 
grep Native  *
 
catalina.out:07-Dec-2023 18:46:27.916 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.35] using APR version [1.6.3].


Apache 2.4

Ziel ist es das alle statischen Ressourcen von APEX über den Apache Webserver ausgeliefert werden.

Hier darauf achten, dass alles so konfiguriert ist, das maximale Performance mit dem System erreicht wird!

Ablauf:

  • HTTPD installieren
  • Module aktivieren
  • Apache Compression aktivieren
  • SSL einrichten
  • TomCat Connector einrichten
  • Lokale APEX Ressourcen hinterlegen

siehe auch ⇒ https://docs.oracle.com/en/operating-systems/oracle-linux/8/obe-apache-install/#before-you-begin

HTTPD

dnf install httpd.x86_64
dnf install mod_ssl.x86_64
dnf install httpd-tools.x86_64

Starten und Auto Start einrichten:

 systemctl start httpd
 systemctl enable --now httpd.service
 systemctl status httpd
 
#test
curl apex01.pipperr.local:80
 
# falls firewall im einsatz
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
 
#version
apachectl -v
Server version: Apache/2.4.37 (Oracle Linux)
Server built:   Oct 24 2023 23:52:21
  • /etc/httpd/conf/httpd.conf – Main Apache config file
  • /etc/httpd/ – Location for all config files
  • /etc/httpd/conf.d/ – All config files in this directory are included in the main confog file
  • /etc/httpd/conf.modules.d/ – Location for Apache module config files

Notwendige Module aktiveren

Folgende Module wollen wir einsetzen: ssl proxy http2 proxy_ajp headers rewrite

Welche Module stehen uns zu Verfügung:

yum list mod\*
 
yum list mod\* | grep "ssl\|proxy\|http2\|proxy_ajp\|headers\|rewrite"

Was ist bereits aktiviert:

apachectl -M
apachectl -M | grep "ssl\|proxy\|http2\|proxy_ajp\|headers\|rewrite"

unnötige Module deativieren:

cd /etc/httpd/conf.modules.d
 
apachectl -M | wc -l
 
mv 00-dav.conf 00-dav.conf_disable
mv 00-lua.conf 00-lua.conf_disable
mv 01-cgi.conf 01-cgi.conf_disable
 
vi  00-base.conf
#LoadModule dbd_module modules/mod_dbd.so
 
#Restart und prüfen
apachectl  restart
apachectl -M | wc -l

“Apache Compression“ serverweit aktivieren

File /etc/httpd/conf.d/compression.conf :

# compression
<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/json
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml
 
  # Remove browser bugs (only needed for really old browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
 
</IfModule>

https://httpd.apache.org/docs/2.4/mod/mod_deflate.html

Pürfen ob das Modul auch enabled ist:

[root@apex01 conf.modules.d]# apachectl -M | grep "deflate"
 deflate_module (shared)

Bei bereits komprimierten Dateien vermeiden:

vi /etc/httpd/conf.d/apex.conf
 
#Force compression even when the client does not send Accept Encoding Header
# nicht notwendig da bereits definiert ! SetEnv force-gzip "yes"
 
#Nicht kompremieren
 
SetEnvIfNoCase Request_URI "\.(?:exe|t?gz|zip|ar|bz2|sit|rar)$" no-gzip dont-vary
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|jpg|ico|png)$" no-gzip dont-vary
SetEnvIfNoCase Request_URI "\.(?:pdf)$" no-gzip dont-vary
SetEnvIfNoCase Request_URI "\.(?:flv)$" no-gzip dont-vary

siehe auch https://httpd.apache.org/docs/current/mod/mod_setenvif.html#setenvifnocase

Compression testen
# Orginal Datei hat 101k
 
ls -lh /srv/apex/images/cssapex_builder.css
101K Oct  7  2014 apex_builder.css
 
 
# Anfragen mit Header Info:
wget --no-check-certificate --server-response --header="accept-encoding: gzip" https://apex01.pipperr.local/i/css/apex_builder.css
 
..
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Thu, 18 Mar 2021 13:34:24 GMT
  Server: Apache
  Accept-Ranges: bytes
  Vary: Accept-Encoding,User-Agent
=>  Content-Encoding: gzip
=>   Content-Length: 16245
  Content-Type: text/css
=>  Length: 16245 (16K) [text/css]
 
ls -lh apex_builder.css
 
16K Oct  7  2014 apex_builder.css
 
# d.h die Datei ist jetzt komprimiert ausgeliefert worden!

Erste Security Einstellungen

File: /etc/httpd/conf.d/security.conf

ServerSignature Off 
ServerTokens    Prod 
TraceEnable     Off

Erste Performane Einstellungen

DNS Lookup abschlalten

File: vi /etc/httpd/conf.d/apex.conf

HostnameLookups off
Worker Threads konfigurien

was ist eingestellt:

# apachectl -M | grep mpm
mpm_worker_module (shared)
# httpd -V | grep MPM
Server MPM:     worker

Einstellungen siehehttps://httpd.apache.org/docs/current/mod/mpm_common.html#startservers

Datei anlegen ⇒ /etc/httpd/conf.modules.d/10-mpm-worker_settings.conf:

<IfModule mpm_worker_module>
    ServerLimit             250
    StartServers             10
    MinSpareThreads          75
    MaxSpareThreads         250
    ThreadLimit              64
    ThreadsPerChild          32
    MaxClients             8000
    MaxRequestsPerChild   10000
</IfModule>

Diese müssen natürlich im Detail mit Tests auf die idealen Werte eingestellt werden.

Statische APEX Resourcen hinterlegen

root

Verzeichnis „/srv/apex/images/“ anlegen und dort aus dem APEX Zip das images Verzeichnis auspacken!

unzip /tmp/apex-latest.zip -d /srv
 
 
chmod o+x /srv/apex/images/
 
cd /srv/apex
 
rm -rf *.sql builder core utilities
 
cd /srv/apex/images/
echo "Oracle APEX Images Dir" >  index.html

In der Apache Config wie „ssl.conf“ für den virtuellen Host wird dann später, nach der SSL Konfiguration, auf dieses Verzeichnis verwiesen:

..
  # alias for apex static files
  Alias "/i/" "/srv/apex/images/"
<Directory  "/srv/apex/images/">
        Options FollowSymLinks
        AllowOverride None 
        Require all granted       
  </Directory>
..

Um unnötige Zugriffe/Checks des Apache zu vermeiden wird extra die Options „FollowSymLinks“ und „AllowOverride None“ gesetzt.

Apache härten und SSL einrichten

Nachdem nun das ganze so einigermaßen über Port 80 und den Apache Webserver funktioniert, muss die Umgebung gehärtet und auf SSL/TLS umgestellt werden.

Bei der Konfiguration wird das System so eingestellt das nur noch TLS 1.1 zulässig ist.

Für das Erzeugen des Zertifikatsrequest wird das mitgelieferte openssl eingesetzt.

Zertifikats erstellen

Um die Zertifikate besser zu finden wird ein zentrale Order unter /srv anlegt, dort erzeugen wir auch den Zertifikatsrequest.

Selbstsigniertes Zertifikat mit Password anlegen

root

# Zertifikats store
mkdir /srv/cert
 
 
cd /srv/cert
 
openssl genrsa -des3 -out server.pem 2048 
 
# pass phrase merken ! abc1234
 
openssl genrsa -des3 -out server.key 2048 
 
openssl rsa -in server.pem -out server.key
 
openssl req -new -key server.key -out server.csr
 
openssl  x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Problem: SSL Library Error: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small Lösung : ⇒ 2048 als Key Längen verwenden!

Falls „Password entry required for 'Enter TLS private key passphrase for apex01.pipperr.local:443 (RSA) :' (PID 9560) “ ⇒ Password hinterlegen (oder mit openssl entfernen) in /srv/cert/passphrase-file.conf:

vi /srv/cert/passphrase-file.conf
 
#!/bin/sh
# password für pem phrase hinterlegen
echo "abc1234"
 
#Ausführen setzen
chmod 760 /srv/cert/passphrase-file.conf
 
vi  /etc/httpd/conf.d/ssl.conf
# nicht in der Vhost Section!
SSLPassPhraseDialog exec:/srv/cert/passphrase-file.conf

Passphrase entfernen:

 ssh-keygen -p
Zertifikats Request ohne PWD auf dem Key anlegen

Für eine MS CA ein Certifikat anlegen:

mkdir /srv/cert_gpi
cde /srv/cert_gpi
 
#Key
openssl genrsa -out server.key 4096
 
#Request
 
openssl req -new -key server.key -out server.csr  -subj "/C=DE/ST=Hessen/O=GPIConsilt/CN=apex01.pipperr.local/emailAddress=info@pipperr.de" -addext 'subjectAltName=DNS:apex01,DNS:apex01.pipperr.local'
 
#anzeigen lassen
 
openssl req -noout -text -in server.csr

DAs Server.crt dann entsprechend „einreichen“ und das Zertifikat dann als „server.crt“ auf dem Server wieder hinterlegen.

Zuvor prüfen mit:

 openssl x509 -text -in  server.cer

In der ssl.conf die Pfade entsprechend anpassen:

# SSL certificates settings
SSLCertificateFile       /srv/cert_gpi/server.cer
SSLCertificateKeyFile    /srv/cert_gpi/server.key
Zertifikat in Apache einbinden

Apache Konfiguration anpassen auf:

neu anlegen /etc/httpd/conf.d/vhost.conf

# force HTTPS
<VirtualHost *:80>
    ServerName  pipperr.local
    ServerAlias apex01.pipperr.local
 
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =apex01.pipperr.local [OR]
    RewriteCond %{SERVER_NAME} =pipperr.local
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Anpassen /etc/httpd/conf.d/ssl.conf

 # nicht in der Vhost Section!
 SSLPassPhraseDialog exec:/srv/cert/passphrase-file.conf
 
 # forward ORDS requests to tomcat
 <VirtualHost *:443>
    ServerName  pipperr.info
    ServerAlias apex.pipperr.info
 
    # SSL certificates settings
 
    SSLCertificateFile       /srv/cert/server.crt
    SSLCertificateKeyFile    /srv/cert/server.pem
 
 
    # alias for apex static files
    Alias "/i/" "/srv/apex/images/"
 
 
    <Directory  "/srv/apex/images/">
       Options FollowSymLinks
        AllowOverride None 
        Require all granted   
    </Directory>
 
 
    # uncomment the line below if you want 
    # to redirect traffic to ORDS from root path
    # RedirectMatch permanent "^/$" "/ords"
 
    # proxy ORDS requests to tomcat
    ProxyRequests off
    ProxyPreserveHost On
    <Location "/ords">
        ProxyPass        "ajp://localhost:8009/ords" secret=ORACLEAPEX1234 timeout=600
        #nicht notwendig? ProxyPassReverse "ajp://localhost:8009/ords"
    </Location>
</VirtualHost>
Auf das „secret“ in kleinbuchstaben achten sonst erhält man einen 403 Fehler!!

Testen:

apachectl -t
apachectl -S
 
#Starten
apachectl restart
 
#Logs auswerten
cd /var/log/httpd
 
# bei Fehlern:
systemctl stop httpd.service
rm -rf *log
systemctl start httpd.service
SSL testen

Alternativ testen mit SSLyze - Fast and full-featured SSL scanner ⇒ https://github.com/nabla-c0d3/sslyze

#Vorraussetzung nassl installiertn
 
python3  -m pip install nassl
python3  -m pip install sslyze
 
#test starten
python3  -m sslyze --regular apex01.pipperr.local:443

Eigene Zertifikate in Chrome einbinden ⇒ https://serverfault.com/questions/845766/generating-a-self-signed-cert-with-openssl-that-works-in-chrome-58

Umgebung valideren

https://richardforth.github.io/apache2buddy_ag/

wget -O /root/apache2buddy.pl https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl
 
perl apache2buddy.pl --skip-os-version-check


APEX 23.2

Oracle APEX 23.2 wird in der Datenbank installiert unter dem User Oracle.

Zuvor die Datei für Oracle APEX 23.2 - All languages über https://www.oracle.com/tools/downloads/apex-downloads.html herunterladen und auf dem Server kopieren.

Software bereitstellen:

su - oracle
unzip /tmp/apex-latest.zip -d /opt/oracle/product/

Prüfen ob es APEX schon in einer alten Version gibt(XE Problem!)

cd /opt/oracle/product/apex
#Umgebung auf die Datenbank setzen und in den richtigen Container wechseln
 
sqlplus / as sysdba
 
ALTER SESSION SET CONTAINER = FREEDB1;
 
 
#prüfen ob nicht ein alter APEX Stand exisiert
select username from dba_users;
#falls ja mit @apxremov aus dem Oracle Home der DB entfernen!!
Neu installieren

Aufruf des SQL Scripts für die Installation „@apexins.sql tablespace_apex tablespace_files tablespace_temp images“ wie:

# in das APEX Verzeichnis wechseln
 
cd /opt/oracle/product/apex
 
#Umgebung auf die Datenbank setzen 
 
#Sprache setzen
 
export NLS_LANG=American_America.AL32UTF8
 
 
sqlplus / as sysdba
 
# falls cdp richtigen Container setzen!
ALTER SESSION SET CONTAINER = FREEDB1;
 
spool /tmp/install_apex.log
 
@apexins.sql APEX APEX TEMP /i/
 
..
 
Thank you for installing Oracle APEX 23.1.0
 
Oracle APEX is installed in the APEX_230100 schema.
..
timing for: Complete Installation
Elapsed:    9.88

Laufzeit in meiner Testumgebung 9,8min (i9 Cpu SSD, 2GB memory_target)

  • Erzeugtes Logfile auf Fehler prüfen
Apex User konfigurieren

Den Instance Administrator - Master User für die Apex Verwaltung konfigurieren/Password setzen mit dem Script „apxchpwd.sql“, das Password muss komplex sein!

# falls cdp richtigen Container setzen!
ALTER SESSION SET CONTAINER = FREEDB1;
 
@apxchpwd.sql

Anleitung beachten und Password auch gut merken .-)!

ORDS vorbereiten

APEX_LISTENER und APEX_REST_PUBLIC_USER User anlegen mit:

# falls cdp richtigen Container setzen!
ALTER SESSION SET CONTAINER = FREEDB1;
  @apex_rest_config.sql

APEX_PUBLIC_USER User Passwort setzen und entsperren

ALTER USER APEX_PUBLIC_USER IDENTIFIED BY xxxxx account UNLOCK;

In der Produktion ein besseres Password wählen!!

Nach diesem Schritten kann nun der ORDS installiert werden um auf Apex zuzugreifen.

  • Bei der Installation werden drei neue Schemas angelegt:
    • APEX_230100 - The account that owns the Oracle Application Express schema and metadata.
    • APEX_LISTENER
    • APEX_REST_PUBLIC_USER
    • APEX_PUBLIC_USER - The minimally privileged account is used for Oracle Application Express configuration with Oracle REST Data Services or Oracle HTTP Server and mod_plsql.

Sprachpakete installieren

Soll auch Deutsch in einer APP zum Einsatz kommen das deutsche Sprachpaket installieren, siehe auch APEX Applikation in deutscher Sprache erstellen - Sprachpaket installieren

cd /opt/oracle/product/apex/builder/de
 
export NLS_LANG=American_America.AL32UTF8
 
sqlplus / AS sysdba
ALTER SESSION SET CONTAINER = FREEDB1;
 
@load_de.sql

Aktuellen Patch einspielen

Nun gleich im nächsten Schritt den aktuellen Patch Patch einspielen ( Aktuell 03.2021 Set Bundle for Oracle APEX 21.1 (32598392)) einspielen:

Download über den Oracle Support.

  • PSE BUNDLE FOR APEX 23.2 (PSES ON TOP OF 23.2.0) (Patch) - p35895964_2320_Generic.zip 349.0 KB (357387 bytes) - SHA-1 C85B8AEF5325084234B308FFD3E5933ABE0EAC0E - SHA-256 7650057575F623ADDA6720EBE2D97CC3B921F41CCD75AD2B68B26B47E935CB86

Patch DB:

# Upload nach /opt/oracle/install/patch/
 
sha1sum  p35895964_2320_Generic.zip
f7741994ff1c32b43bade2e48a998b6b3ba60539  p32598392_2110_Generic.zip
 
 
#einspielen als Oracle
 
cd /opt/oracle/install/patch/
 
unzip p35895964_2320_Generic.zip
cd 35895964
 
 
#Zeichensatz setzen
 
export NLS_LANG=American_America.AL32UTF8
 
#Patch je nach Umgebung einspielen
# sqlplus "sys/ as sysdba" @catpatch.sql        -- for Oracle Database 12.1 and newer, for non-CDB, for CDB where Oracle APEX is not installed in the root, and for PDB where APEX is not installed in the root
#     sqlplus "sys/ as sysdba" @catpatch_con.sql    -- for CDB where Oracle APEX is installed in the root
#     sqlplus "sys/ as sysdba" @catpatch_appcon.sql -- for installations where Oracle APEX is installed in an application container
 
# in aktueller Umgebung ist es mir aber nur so gelungen:
 
#DB Umgebung setzen
 
sqlplus "/ as sysdba" 
ALTER SESSION SET CONTAINER = FREEDB1;
@catpatch.sql 
 
 
 
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = FREEDB1;
@?/rdbms/admin/utlrp.sql
 
 
#Patch Stand prüfen
sqlplus / as sysdba
ALTER SESSION SET CONTAINER = FREEDB1;
select patch_version, installed_on from apex_patches;

Statische Dateien kopieren als root:

su - 
 
cd /opt/oracle/install/patch/32006852
 
# mit dem \ orginal cp verwenden nicht den alias um die Wollen Sie überschreiben nachfrage zu unterdrücken
\cp -rf images /srv/apex

#Patch Verzeichnis wieder aufräumen

rm -rf /opt/oracle/install/patch/32006852


ORDS

Übersicht Architektur:  Ords Basis Architektur

Siehe auch Oracle ORDS 18 (Oracle REST Data Services) mit APEX 18 und als REST Interface verwenden

Ab ORDS 22 hat sich die Konfiguration stark geändert!

Installation

Download ords-latest.zip über https://www.oracle.com/database/technologies/appdev/rest-data-services-downloads.html

Prüfen:

sha1sum ords-latest.zip
3ffd6696b63150f7064a28722e28d6041e32c13f  ords-latest.zip

Verzeichnis als root anlegen:

mkdir /srv/ords
chown oracle:tomcat /srv/ords

Ords als Oracle User entpacken

su - oracle
mkdir -p  /srv/ords/ords-23.3.0
 
#Auspacken
unzip /tmp/ords-latest.zip -d /srv/ords/ords-23.3.0
 
 
# verlinken
ln -s /srv/ords/ords-23.3.0/ /srv/ords/ords
#Config Verzeichnis von der Software trennen
mkdir /srv/ords/config

Im ORDS Konfig Directory konfigurieren, das muss dann später auch vom Tomcat aus lesbar sein!

chown -R oracle:tomcat /srv/ords/config/
 
ls -la  /srv/ords/config
drwxr-xr-x 4 oracle tomcat

Konfiguration sichern und neues Verzeichnis zur Verfügung stellen

Vor 22 wurde dieser Pfad im War File hinterlegt, aber der Version 22 muss der Pfad extra als Variable beim Aufruf mit übergeben werden!

Parameter „export _JAVA_OPTIONS=-Dconfig.url=/srv/ords/config“

Unsere Konfiguration liegt schon extra außerhalb der ORDS Software unter „/srv/ords/config“.

ORDS Meta Repository in der DB upgraden und DB Pool Konfiguration neu erzeugen

User Oracle

Aufruf des Upgrades mit dem ORDS Kommandozeilen Tool unter $ORDS_HOME/bin:

cd /srv/ords/ords/bin
 
./ords --config /srv/ords/config/ install -i
 
ORDS: Release 23.3 Production on Thu Dec 07 20:11:25 2023
 
Copyright (c) 2010, 2023, Oracle.
 
Configuration:
  /srv/ords/config/
 
The configuration folder /srv/ords/config does not contain any configuration files.
 
Oracle REST Data Services - Interactive Install
 
  Enter a number to select the type of installation
    [1] Install or upgrade ORDS in the database only
    [2] Create or update a database pool and install/upgrade ORDS in the database
    [3] Create or update a database pool only
  Choose [2]: 2
  Enter a number to select the database connection type to use
    [1] Basic (host name, port, service name)
    [2] TNS (TNS alias, TNS directory)
    [3] Custom database URL
  Choose [1]: 1
  Enter the database host name [localhost]:
  Enter the database listen port [1521]:
  Enter the database service name [FREE]: freedb1
  Provide database user name with administrator privileges.
    Enter the administrator username: sys
  Enter the database password for SYS AS SYSDBA:
Connecting to database user: SYS AS SYSDBA url: jdbc:oracle:thin:@//localhost:1521/freedb1
 
Retrieving information.
  Enter the default tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [SYSAUX]: APEX
  Enter the temporary tablespace for ORDS_METADATA and ORDS_PUBLIC_USER [TEMP]: TEMP
  Enter a number to select additional feature(s) to enable:
    [1] Database Actions  (Enables all features)
    [2] REST Enabled SQL and Database API
    [3] REST Enabled SQL
    [4] Database API
    [5] None
  Choose [1]: 5
  Enter a number to configure and start ORDS in standalone mode
    [1] Configure and start ORDS in standalone mode
    [2] Skip
  Choose [1]: 2
The setting named: db.connectionType was set to: basic in configuration: default
The setting named: db.hostname was set to: localhost in configuration: default
The setting named: db.port was set to: 1521 in configuration: default
The setting named: db.servicename was set to: freedb1 in configuration: default
The setting named: plsql.gateway.mode was set to: proxied in configuration: default
The setting named: db.username was set to: ORDS_PUBLIC_USER in configuration: default
The setting named: db.password was set to: ****** in configuration: default
The setting named: feature.sdw was set to: false in configuration: default
The global setting named: database.api.enabled was set to: false
The setting named: restEnabledSql.active was set to: false in configuration: default
The setting named: security.requestValidationFunction was set to: ords_util.authorize_plsql_gateway in configuration: default
2023-12-07T20:12:16.925Z INFO        Installing Oracle REST Data Services version 23.3.0.r2891830 in FREEDB1
------------------------------------------------------------
Date       : 07 Dec 2023 20:12:16
Release    : Oracle REST Data Services 23.3.0.r2891830
Type       : ORDS Install
Database   : Oracle Database 23c Free,
DB Version : 23.2.0.0.0
------------------------------------------------------------
Container Name: FREEDB1
Executing scripts for core
------------------------------------------------------------
 
[*** script: ords_prereq_env.sql]
 
 
...
 
 
 
PL/SQL procedure successfully completed.
 
2023-12-07T20:12:56.280Z INFO        Completed configuring PL/SQL gateway user for Oracle REST Data Services version 23.3.0.r2891830. Elapsed time: 00:00:00.149
 
[*** Info: Completed configuring PL/SQL gateway user for Oracle REST Data Services version 23.3.0.r2891830. Elapsed time: 00:00:00.149
 ]

Erzeugte Konfiguration anzeigen lassen:

 ./ords --config /srv/ords/config/ config list
ORDS: Release 23.3 Production on Thu Dec 07 20:14:05 2023
 
Copyright (c) 2010, 2023, Oracle.
 
Configuration:
  /srv/ords/config/
 
Database pool: default
 
Setting                              Value                               Source
----------------------------------   ---------------------------------   -----------
database.api.enabled                 false                               Global
db.connectionType                    basic                               Pool
db.hostname                          localhost                           Pool
db.password                          ******                              Pool Wallet
db.port                              1521                                Pool
db.servicename                       freedb1                             Pool
db.username                          ORDS_PUBLIC_USER                    Pool
feature.sdw                          false                               Pool
plsql.gateway.mode                   proxied                             Pool
restEnabledSql.active                false                               Pool
security.requestValidationFunction   ords_util.authorize_plsql_gateway   Pool
Konfiguration anpassen / tunen

Was lässt sich konfigurieren:

./ords --config /srv/ords/config/ config info
..

z.B. Pool Größen anpassen mit jdbc.MaxLimit auf 50 ,jdbc.MinLimit auf 10 ,jdbc.InitialLimit auf 10:

[oracle@apex01:bin ]$ ./ords --config /srv/ords/config/ config set jdbc.MaxLimit 50
 
ORDS: Release 22.2 Production on Tue Sept 13 16:49:40 2022
 
Copyright (c) 2010, 2022, Oracle.
 
Configuration:
  /srv/ords/config/
 
The setting named: jdbc.MaxLimit was set to: 50 in configuration: default
 ./ords --config /srv/ords/config/ config set jdbc.MaxLimit     50
 ./ords --config /srv/ords/config/ config set jdbc.MinLimit     10
 ./ords --config /srv/ords/config/ config set jdbc.InitialLimit 10

War File unter Tomcat austauschen

War File austauschen als User Tomcat:

Als User Tomcat

cp /srv/ords/ords/ords.war /srv/tomcat/config/webapps/ords.war
 
ls -la  /srv/tomcat/config/webapps/ords.war
-rw-r--r-- 1 tomcat tomcat 111962319 Dec  7 21:15 /srv/tomcat/config/webapps/ords.war

Config Pfad hinterlegen

Für den Tomcat User für das Manuelle Starten des Tomcat

Als User Tomcat:

su - tomcat
vi .bash_profile
..
export JAVA_OPTS="-Dconfig.url=/srv/ords/config"
..
Für den Root User für den Tomcat Service

Als User Root die Service Definition von Tomcat anpassen:

vi /etc/systemd/system/tomcat.service
..
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Dconfig.url=/srv/ords/config"
..

Service neu einlesen:

systemctl daemon-reload
 
systemctl stop tomcat.service
 
systemctl start tomcat.service
 
systemctl status tomcat.service

#Log vom ersten Start prüfen

grep ords /srv/tomcat/config/logs/*
 
 
2022-09-13T16:31:24.951Z INFO        Deploying web application archive [/srv/tomcat/config/webapps/ords.war]
2022-09-13T16:31:30.059Z INFO        Deployment of web application archive [/srv/tomcat/config/webapps/ords.war] has finished in [5,107] ms
13-Sep-2022 18:32:51.444 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dconfig.url=/srv/ords/config
13-Sep-2022 18:32:52.654 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/srv/tomcat/config/webapps/ords.war]
config.url=/srv/ords/config
2022-09-13T16:33:00.887Z INFO        Deployment of web application archive [/srv/tomcat/config/webapps/ords.war] has finished in [8,234] ms

Probleme

AJP
The timeout specified has expired: AH01030: ajp_ilink_receive() can't receive header

Siehe auch ⇒ https://httpd.apache.org/docs/2.4/mod/mod_proxy_ajp.htmlhttps://stackoverflow.com/questions/63505670/apache-cant-connect-to-new-tomcat-9-ajp

#prüfen wer da auf was horcht:
netstat -tulpe
..
tcp        2      0 0.0.0.0:8009            0.0.0.0:*               LISTEN      tomcat     332973     13416/java
..
 
#alterantiv
ss -tpln
 
# Modul ist auch geladen
apachectl -M | grep ajp
proxy_ajp_module (shared)

Lösung : Tomcat: Secret im Ajp connection hinterlegt, dann ging es gleich da secretRequired in tomcat9 auf true steht!

..
               requiredSecret="ORACLEAPEX1234"
               secretRequired="true"
..

Apache:

..
ProxyPass        "ajp://localhost:8009/ords" Secret="ORACLEAPEX1234" timeout=600
..


Der erste APEX Aufruf

Wie immer nach einer ORDS Installation gibt es kleine bis größere Ärgernisse mit dem Produkt.

Erster Aufruf Internal Workspace über Landing Page

Der Link auf den APEX Workspace unter https://oracledb23c01.pipperr.local/ords/_/landing ist in einer frischen, leeren APEX Umgebung ärgerlicherweise zu Beginn leer.

Also in einer anderen Umgebung die Syntax suchen und den Link sich statisch merken.

Ein „/ords/f?p=4000“ wird dann zu folgender URL:

https://oracledb23c01.pipperr.local/ords/r/apex/workspace-sign-in/oracle-apex-sign-in

oder direkt auf den INTERNAL Workspace springen mit „apex_admin“

 https://myapexserver/ords/apex_admin

Mit der kann man sich nun auf den INTERAL Workspace anmelden, nach dem Anlegen eines Workspace klappt es dann auch mit der Landing Page.

Warum so was dann nicht einfach gleich klappt .. schade… so wird die gute Idee mit der Landing Page gleich wieder für den Kunden eher verwirrend.

User Schema mit wirren Tablespace

Bei Anlegen eines Users über den Internal Workspace aufpassen eine Tablespace anzugeben, wenn das nicht getan wird, wird ein wirrer APEX_xxxx Tablespace angelegt der mühsam wieder aufgeräumt werden muss.

Also besser zuvor das Schema anlegen und nicht über APEX!



REST Api Dokumentation - Swagger für APEX

Swagger für APEX einrichten

Installation unter „/var/www/html/swagger-ui/“

Swagger auf Webserver laden:

cd /var/www/html
wget https://github.com/swagger-api/swagger-ui/archive/refs/heads/master.zip

Swagger entpacken und umbenennen

unzip master.zip
 
rm master.zip
 
mv swagger-ui-master  swagger-ui

Swagger sollte danach unter https://apex01.pipperr.local/swagger-ui erreichbar sein

Swagger URL in APEX Instance Feature Settings (Abschnitt REST) auf dem INTERNAL Workspace einrichten!

 Oracle APEX Swagger UI Konfigurieren



Performance überprüfen

Mit dem Apache JMeter läßt sich nun die Performance überprüfen.

Siehe dazu > Oracle ORDS Performance Überlegungen



Mod_PLSQL OWA Applikationen in der gleichen Umgebung betreiben

Varnish - Optional

Um noch mehr Performance bei den Statischen Ressourcen zu erzielen, ist es möglich zusätzlich noch eine Cache Server vor das ganz zustellen.

Das lohnt sich aber wohl nur, wenn wir mit wirklichen hohen Anzahl von gleichzeitigen Zugriffen bewältigen müssen.

Oracle Content Delivery Network (CDN)

Alternativ gleich das Oracle Content Delivery Network (CDN) verwenden, das macht besonders bei öffentlichen APEX Applikationen sehr viel Sinn, um die eigene Internet Anbindung zu schonen.

Intern ist das aber mit „vorsicht“ zu überlegen, über das Logging im CDN sieht Oracle dann natürlich wer wann von wo und in welchen Context was mit APEX umsetzt.

Mehr dazu auf dem Support Portal unter:

  • Information about Oracle Cloud Infrastructure (OCI) Content Delivery Network (CDN) (Doc ID 2647099.1)

Einrichten ⇒ https://blogs.oracle.com/apex/announcing-oracle-apex-static-resources-on-oracle-content-delivery-network

Http Cache Varnish vor den Apache "stellen"

 Varnish  HTTP Cache

dnf module install varnish

Welche Version ist im Einsatz:

varnishd -V
 
varnishd (varnish-6.0.6 revision 29a1a8243dbef3d973aec28dc90403188c1dc8e7)

Konfiguration:

  • /etc/varnish/default.vcl – is the main varnish configuration file written using VCL.
  • /etc/varnish/secret – is the varnish secret file.

Dienst einrichten:

systemctl start varnish
systemctl enable varnish
systemctl status varnish

Siehe auch ⇒ https://www.tecmint.com/install-varnish-cache-for-apache-on-centos-rhel-8/ und https://www.tecmint.com/enable-https-for-varnish-cache-on-centos/


Bugs

APEX 22.2 - APEX Fehler mit APEX Suche - Invalid character found in the request target - Parameter relaxedQueryChars in tomcat hinzufügen

Nach dem APEX Upgrade auf 22.2 tritt ein Fehler in der Suche in APEX Workspace Oberfläche auf:

Message Invalid character found in the request target xxx  The valid characters are defined in RFC 7230 and RFC 3986
Description The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Exceptionjava.lang.IllegalArgumentException: Invalid character found in the request target xxxxxx The valid characters are defined in RFC 7230 and RFC 3986

Parameter relaxedQueryChars=„{\,} in server.xml aufnehmen.

siehe https://tomcat.apache.org/tomcat-9.0-doc/config/http.html#Standard_Implementation

Lösung:

   .....
    GPI Add 16.02.2023 relaxedQueryChars as bug in APEX 22.2
   -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               relaxedQueryChars="{\,}"
     />
...

Danach tomcat neu starten.

siehe auch https://stackoverflow.com/questions/50361171/how-to-allow-character-in-urls-for-tomcat-8-5


Quellen

LetSenCrypt

Gültige SSL Zerifikate hinterlegen falls der Domain Name des Webservers öffentlich ausflößbar ist.

Mit https://letsencrypt.org/ lassen sich mit „echten“ und kostenfreien SSL Zertifikaten Nur Server zertifizieren deren Domain öffentlich ist und für die man selber in der Lage ist einen öffentlichen DNS Eintrag zu setzen.

Siehe auch https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-centos-7

Software installieren:

yum install oracle-epel-release-el8.x86_64
yum install certbot
yum install python3-certbot-apache.noarch

SSL Konfiguration anlegen

Apache Konfiguration anpassen auf:

neu anlegen /etc/httpd/conf.d/vhost.conf

# force HTTPS
<VirtualHost *:80>
    ServerName  pipperr.local
    ServerAlias apex.pipperr.local
 
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =apex.pipperr.local [OR]
    RewriteCond %{SERVER_NAME} =pipperr.local
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Anpassen /etc/httpd/conf.d/ssl.conf

 # forward ORDS requests to tomcat
 <VirtualHost *:443>
    ServerName  pipperr.info
    ServerAlias apex.pipperr.info
 
    # SSL certificates settings
    #SSLCertificateFile       /etc/letsencrypt/live/pipperr.info/cert.pem
    #SSLCertificateKeyFile    /etc/letsencrypt/live/pipperr.info/privkey.pem
    #SSLCertificateChainFile  /etc/letsencrypt/live/pipperr.info/chain.pem
 
    # alias for apex static files
    Alias "/i/" "/srv/apex/images/"
 
    # uncomment the line below if you want 
    # to redirect traffic to ORDS from root path
    # RedirectMatch permanent "^/$" "/ords"
 
    # proxy ORDS requests to tomcat
    ProxyRequests off
    ProxyPreserveHost On
    <Location "/ords">
        ProxyPass        "ajp://localhost:8009/ords"
        ProxyPassReverse "ajp://localhost:8009/ords"
    </Location>
</VirtualHost>

Zertifikate anfragen

# zuvor muss die SSL Konfiguration im Apache definiert sein!

# Zertifikate anfordern
certbot --apache -d pipperr.info -d apex.pipperr.info

In Arbeit, demnächst besser im Detail


Eigene CA

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
prog/oracle_apex_20_2_install_windows_19c_linux_8.txt · Zuletzt geändert: 2023/12/20 15:40 von gpipperr