===== 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 [[prog:oracle_apex_upgrade|Oracle ORDS APEX 22/23 - Auf den neuesten Stand halten - Upgrade APEX / ORDS/ Tomcat / Apache unter Linux]]
Betriebsystem:
* Oracle Linux 8
Datenbank:
* Oracle Datenbank 23c => https://www.oracle.com/de/database/free/
Web Produktstack:
* Apache Webserver 2.4
* Apache Tomcat 9 mit Oracle Java 21
* Oracle ORDS 23 => https://www.oracle.com/database/technologies/appdev/rest.html
* Oracle APEX 23 => https://www.oracle.com/tools/downloads/apex-downloads.html
Architektur Übersicht:
{{ :prog:apex:apex_apache_tomcat_ords_overview.png | Oracle APEX mit Oracle Apache / Tomcat / ORDS }}
Alternativ unter Windows => [[prog:oracle_rest_data_service_tomcat|Oracle ORDS 3.0 (Oracle REST Data Services) mit dem Apache Application Server Tomcat unter Windows 2012 betreiben - SSL einsetzen]]
Ablauf der Installation:
- Oracle Linux 8 Basis System einrichten und Konfigurieren - Name und IP Adresse sollten sich auf keine Fall je wieder ändern!
- Oracle Java 21 Installation (da Oracle ORDS kann hier Oracle Java verwendet werden)
- Oracle Datenbank 23c (Free Edition!) oder 19c
- Apache Tomcat9 Installation
- Apache 2.4 HTTP Installation und Konfiguration
- Oracle APEX 23 Installation / Patch und Konfiguration
- Performance Test und Optimierungen
----
==== Basis System Oracle 8 ====
Siehe dazu => [[linux:linux_8_system_grundeinstellungen_oracle_datenbank_rac|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:
* https://myvirtualcloud.net/ext4-vs-xfs-for-oracle-which-performs-better/
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 => [[dba:oracle_23c_database_linux|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 ===
=> [[dba:start_db_linux|Datenbank unter Linux 6 und Linux 7/8 automatisch starten]]
----
==== 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:
[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:
== Das AJP Protokoll aktivieren ==
Einkommentieren und localhost als IP setzen:
vi /srv/tomcat/config/conf/server.xml
..
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
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:
=== 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
* https://nvd.nist.gov/ncp/checklist/937
WEB
* https://tomcat.apache.org/tomcat-9.0-doc/security-howto.html
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:
== 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
# 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
=> 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 ====
Test z.b. mit https://www.joedog.org/siege-home/ oder auch https://httpd.apache.org/docs/2.4/programs/ab.html
== 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 siehe => https://httpd.apache.org/docs/current/mod/mpm_common.html#startservers
Datei anlegen => /etc/httpd/conf.modules.d/10-mpm-worker_settings.conf:
ServerLimit 250
StartServers 10
MinSpareThreads 75
MaxSpareThreads 250
ThreadLimit 64
ThreadsPerChild 32
MaxClients 8000
MaxRequestsPerChild 10000
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/"
Options FollowSymLinks
AllowOverride None
Require all granted
..
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 [[https://www.openssl.org/docs/|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
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]
Anpassen /etc/httpd/conf.d/ssl.conf
# nicht in der Vhost Section!
SSLPassPhraseDialog exec:/srv/cert/passphrase-file.conf
# forward ORDS requests to tomcat
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/"
Options FollowSymLinks
AllowOverride None
Require all granted
# 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
ProxyPass "ajp://localhost:8009/ords" secret=ORACLEAPEX1234 timeout=600
#nicht notwendig? ProxyPassReverse "ajp://localhost:8009/ords"
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 [[prog:oracle_apex_german_deutsch|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:
{{ :prog:apex:oracle_ords_base_architecture.jpg?600 | Ords Basis Architektur}}
Siehe auch [[prog:first_steps_oracle_rest_data_service|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.html
=> https://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!
{{ :prog:swagger_konfiguration_oracle_apex_rest_service.jpg?800 | Oracle APEX Swagger UI Konfigurieren }}
----
----
==== Performance überprüfen====
Mit dem[[ https://jmeter.apache.org/download_jmeter.cgi | Apache JMeter]] läßt sich nun die Performance überprüfen.
Siehe dazu > [[prog:oracle_ords_performance_tuning|Oracle ORDS Performance Überlegungen]]
----
----
==== Mod_PLSQL OWA Applikationen in der gleichen Umgebung betreiben ====
Siehe dazu => [[prog:oracle_ords_mod_plsql_with_apex|Aufruf einer mod_PLSQL Applikation mit dem ORDS 21.2 parallel zu einer bestehenden APEX Umgebung - MOD_PLSQL mit dem ORDS ersetzen]]
----
----
====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"===
{{ :prog:varnish_cache_hitch_tls_overview.jpg?800 | 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
-->
...
Danach tomcat neu starten.
siehe auch https://stackoverflow.com/questions/50361171/how-to-allow-character-in-urls-for-tomcat-8-5
----
==== Quellen ====
Apache:
* https://httpd.apache.org/docs/2.4/misc/perf-tuning.html
Tomcat:
* https://oracle-base.com/articles/linux/apache-tomcat-9-installation-on-linux
* https://stackify.com/tomcat-performance-monitoring/
Kerberos
* https://www.slideshare.net/nielsdb/mt-ag-howtosingle-signonforapexapplicationsusingkerberos-46435415
ORDS
* https://www.slideshare.net/hillbillyToad/oracle-rest-data-services-options-for-your-web-services
Performance
* https://www.doag.org/formes/pubfiles/10115033/2018-APEX-David_Michel-Performance-Optimierung_in_einem_grossen_APEX-Projekt-Praesentation.pdf
Kerberos
* https://www.doag.org/formes/pubfiles/6277541/2014-null-Niels_de_Bruijn-_quot_Echtes_quot__Single_Sign_On_mit_APEX_realisieren_-Manuskript.pdf
----
----
==== 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
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]
Anpassen /etc/httpd/conf.d/ssl.conf
# forward ORDS requests to tomcat
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
ProxyPass "ajp://localhost:8009/ords"
ProxyPassReverse "ajp://localhost:8009/ords"
=== 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 ====
siehe => https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-ubuntu-20-04
----