Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:oracle_apex_20_2_install_windows_19c_linux_8

Oracle Apex 20.2 / ORDS 20.4 / Tomcat 9 / Apache 2.4 / Varnish mit der Oracle Datenbank 19c unter Oracle Linux 8 - Installation

Aufgabe Stand-Alone System für eine APEX Entwicklungsumgebung

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 nie mehr ändern!
    1. Oracle Java 15 Installation (da Oracle ORDS kann hier Oracle Java verwendet werden)
  2. Oracle Datenbank
  3. Apache Tomcat9 Installation
  4. Apache 2.4 HTTP Installation und Konfiguration
  5. Oracle APEX 20.2 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.

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/

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

Datenbank

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

19c DB Software

RPM Installation Oracle 19c (19.3) (! Nur Enterprise! ):

Software Home ist „/opt/oracle/product/19c/dbhome_1“

  • RPM mit yum installieren (als root):
    #prüfen ob das Pakekt auch komplett ist:
     
    sha1sum oracle-database-ee-19c-1.0-1.x86_64.rpm
    bf48dd5fbdef1ec0191c668e415dd56f1546d94a  oracle-database-ee-19c-1.0-1.x86_64.rpm
     
    yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm
  • Nach der reinen Software Installation kann auch über das Skript „ /etc/init.d/oracledb_ORCLCDB-19c configure“ eine Plugable Database als erste DEMO DB erstellt werden.

Alternative individuelle Installation:

Patch einspielen

Nach der Installation den aktuellen RU in das Oracle Home wie gewohnt in folgender Reihenfolge einspielen.

wie (Stand 04.2021):

  • 6880880 OPatch 12.2.0.1.24 for Db 12.x, 18.x, 19.x and 20.x releases (Feb 2021) ( SHA-1 31824E8051E170A7E2BD75CEE525458B87C0FBE0 p6880880_122010_Linux-x86-64.zip 115M (120761121 bytes) )
  • DB Patch 32072711: DATABASE RELEASE UPDATE REVISION 19.9.1.0.0 , (SHA-1 5F3729B9D9D95E059B49BF398840EABC4F5666E5 - p32072711_190000_Linux-x86-64.zip 1.4 GB (1477062584 bytes))
  • Patch 32067171: OJVM RELEASE UPDATE 19.10.0.0.0 ( SHA-1 11042EBE49D5881BA7D1E7D1FC5D642FB0C61D87 p32067171_190000_Linux-x86-64.zip 119.8 MB (125586988 bytes) )

Opatch

# als user root
mv /opt/oracle/product/19c/dbhome_1/OPatch /opt/oracle/product/19c/dbhome_1/OPatch_OLD
cd /opt/oracle/install/patch
 
sha1sum p6880880_122010_Linux-x86-64.zip
31824e8051e170a7e2bd75cee525458b87c0fbe0  p6880880_122010_Linux-x86-64.zip
 
 
unzip p6880880_122010_Linux-x86-64.zip -d /opt/oracle/product/19c/dbhome_1/
 
chown -R oracle:oinstall /opt/oracle/product/19c/dbhome_1/OPatch
 
/opt/oracle/product/19c/dbhome_1/OPatch/opatch version

Patch 32072711 - Database Release Update Revision 19.9.1.0.210119

cd /opt/oracle/install/patch
sha1sum p32072711_190000_Linux-x86-64.zip
5f3729b9d9d95e059b49bf398840eabc4f5666e5  p32072711_190000_Linux-x86-64.zip
 
 
#Alles aus dem Home stoppen
sqlplus>shutdown immediate
lsnrctl stop
 
unzip p32072711_190000_Linux-x86-64.zip
cd 32072711
/opt/oracle/product/19c/dbhome_1/OPatch/opatch apply
 
 
# dataPatch
SQL> startup 
cd $ORACLE_HOME/OPatch
./datapatch -verbose

Patch 32067171 - Oracle JavaVM Component Release Update 19.10.0.0.210119

cd /opt/oracle/install/patch
 
sha1sum p32067171_190000_Linux-x86-64.zip
11042ebe49d5881ba7d1e7d1fc5d642fb0c61d87  p32067171_190000_Linux-x86-64.zip
 
 
unzip -d p32067171_190000_Linux-x86-64.zip
cd ./32067171
/opt/oracle/product/19c/dbhome_1/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
 
#Einspielen
/opt/oracle/product/19c/dbhome_1/OPatch/opatch apply
 
# dataPatch
# start in upgrade mode!
SQL> startup upgrade 
 
 
#
cd $ORACLE_HOME/OPatch
./datapatch -verbose
 
#alles wieder aktivieren
SQL> shutdown immediate
SQL> startup 
 
 
lsnrctl start

DB Umgebungs- und Create Database Skripte

⇒ siehe https://github.com/gpipperr/OraPowerShell/tree/master/Ora_Bash_create_database bzw. obige Installationsbeschreibungen.

Datenbank mit dem DBCA oder meinen Skripten anlegen.

Eigenen Tablespace für APEX anlegen:

CREATE TABLESPACE APEX DATAFILE ‘/opt/oracle/oradata/GPIDB/apex01.dbf’ SIZE 1G; 

Autostart einrichten

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.

Tomcat User anlegen:

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

Tomcat Sofware installieren:

su - tomcat
 
cd /srv/tomcat
 
mkdir install
 
cd install
wget https://mirror.synyx.de/apache/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz
 
shasum -a 512 apache-tomcat-9.0.44.tar.gz
4b4f6c12f8674cc25a1a81ffd33e9563db0bda4c4f190d499db16d1ef66b2dbd58aa8bb4d2b0693c56aa1f0865a3ca64696d9ebc0d5a6f7138241ea9e4c0cbf4  apache-tomcat-9.0.44.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.44
 
tar xzf ./install/apache-tomcat-9.0.44.tar.gz
 
#aber dann verlinken!
 
ln -s /srv/tomcat/apache-tomcat-9.0.44/ /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!
 
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 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"
 
Environment="CATALINA_PID=/srv/tomcat/config/run/tomcat.pid"
Environment="CATALINA_BASE=/srv/tomcat/config"
Environment="CATALINA_HOME=/srv/tomcat/tomcat"
#alternativ wenn -Xmx4096m
Environment="CATALINA_OPTS=-Xms1024m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=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
After=dbora.service

Start konfigurieren:

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

Tomcat Bais 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 der Port gesetzt, der Default 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" />
AJP Protokoll aktivieren

Einkommentieren und localhost als IP setzen:

vi /srv/tomcat/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

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.

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:

 dnf install tomcat-native.x86_64

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

Umgebung setzen:

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

Verwendung prüfen:

cd /srv/tomcat/config/logs
 
grep Native  *
 
catalina.out:17-Mar-2021 23:48:43.592 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.23] 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:   Nov  4 2020 05:17:03
  • /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

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

HostnameLookups off

Statische APEX Resourcen hinterlegen

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

unzip /opt/oracle/install/apex_20.2.zip -d /srv
 
cd /srv/apex
rm -rf *.sql builder core utilities
 
echo "Oracle APEX Images Dir" >  index.html

In der Apache Konfiguration wird dann später 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 anlegen:

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
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} =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

 # 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>

Testen:

apachectl -t
apachectl -S
 
#Starten
apachectl reload
 
#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



APEX 20.2

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

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

Software bereitstellen:

su - oracle
unzip apex_20.2.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 
sqlplus / as sysdba
 
#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:

#Umgebung auf die Datenbank setzen 
sqlplus / as sysdba
 
spool /tmp/install_apex.log
 
@apexins.sql APEX APEX TEMP /i/
 
..
 
Thank you for installing Oracle Application Express 20.2.0.00.20
 
Oracle Application Express is installed in the APEX_200200 schema.
 
The structure of the link to the Application Express administration services is as follows:
http://host:port/ords/apex_admin
 
The structure of the link to the Application Express development interface is as follows:
http://host:port/ords
 
timing for: Phase 3 (Switch)
Elapsed: 00:01:21.37
timing for: Complete Installation
Elapsed: 00:10:35.57
 
PL/SQL procedure successfully completed.

Laufzeit in meiner Testumgebung 11min (i7 Cpu SSD, 2GB memory_target)

  • Erzeugtes Logfile auf Fehler prüfen
  • Bei der Installation werden drei neue Schemas angelegt:
    • APEX_200200 - The account that owns the Oracle Application Express schema and metadata.
    • APEX_INSTANCE_ADMIN_USER - The REST administration interface
    • 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.
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!

@apxchpwd.sql

Anleitung beachten und Password auch gut merken .-)!

ORDS vorbereiten

APEX_LISTENER und APEX_REST_PUBLIC_USER User anlegen mit:

  @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.

Aktuellen Patch einspielen

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

Download über den Oracle Support.

  • Patch 32006852: PSE BUNDLE FOR APEX 20.2 (PSES ON TOP OF 20.2.0.00.20)
    • p32006852_2020_Generic.zip 20.8 MB (21762826 bytes)
    • SHA-1 2E1EFBF9B761B677BF90497AC73F84AC4039238C
    • SHA-256 ED82243BA952BB1C063BF6C0E16CF14FD291F96A66C5B0A82310DF62FBC45762

Patch DB:

# Upload nach /opt/oracle/install/patch/
 
sha1sum p32006852_2020_Generic.zip
2e1efbf9b761b677bf90497ac73f84ac4039238c  p32006852_2020_Generic.zip
 
 
#einspielen als Oracle
 
cd /opt/oracle/install/patch/
 
unzip p32006852_2020_Generic.zip
cd 32006852
 
#DB Umgebung setzen
sqlplus "/ as sysdba" @catpatch.sql 
 
sqlplus / as sysdba
@?/rdbms/admin/utlrp.sql
 
 
#Patch Stand prüfen
sqlplus / as sysdba
select patch_version, installed_on from apex_patches;
 
Statische Dateien kopieren als root
<code bash>
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

Installation

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

Prüfen:

sha1sum ords-20.4.3.050.1904.zip
77268caf54cd9e195bd170ef38a8fe550c551ecc  ords-20.4.3.050.1904.zip

Verzeichnis als root anlegen:

mkdir ords
chown oracle:tomcat ords

Ords als Oracle User entpacken

mkdir -p  /srv/ords/ords-20.4.3
unzip ords-20.4.3.050.1904.zip -d /srv/ords/ords-20.4.3
# verlinken
ln -s /srv/ords/ords-20.4.3/ /srv/ords/ords
#Config Verzeichnis von der Software trennen
mkdir /srv/ords/config

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

ls -la  /srv/ords/config
drwxr-xr-x 4 oracle tomcat   51 Mar 17 17:53 ..
 
java -jar ords.war configdir /srv/ords/config/
 
2021-03-17T16:54:53.446Z INFO        Set config.dir to /srv/ords/config/ in: /srv/ords/ords-20.4.3/ords.war

Die Datei %ORDS_HOME\params\ords_params.properties konfigurieren:

db.hostname=10.10.10.90
db.port=1521
db.servicename=SRV_GPIDB_MAIN
db.sid=GPIDB
db.username=APEX_PUBLIC_USER
migrate.apex.rest=false
rest.services.apex.add=false
rest.services.ords.add=true
schema.tablespace.default=SYSAUX
schema.tablespace.temp=TEMP
standalone.http.port=8080
standalone.static.images=/srv/apex/images
user.tablespace.default=SYSAUX
user.tablespace.temp=TEMP
ORDS Meta Schema in der Datenbank installieren

Dabei Service Name der DB Verwenden, SID sollte ab 12c nicht mehr zu Server Zugriff verwendet werden!

#Hilfe anzeigen lassen
java -jar ords.war help install
 
#installieren
java -jar ords.war install advanced
 
 
Specify the database connection type to use.
Enter number for [1] Basic  [2] TNS  [3] Custom URL [1]:1
Enter the name of the database server [10.10.10.90]:
Enter the database listen port [1521]:
Enter 1 to specify the database service name, or 2 to specify the database SID [1]:1
Enter the database service name [SRV_GPIDB_MAIN]:
Enter 1 if you want to verify/install Oracle REST Data Services schema or 2 to skip this step [1]:1
Enter the database password for ORDS_PUBLIC_USER:
Confirm password:
Requires to login with administrator privileges to verify Oracle REST Data Services schema.
 
Enter the administrator username:sys
Enter the database password for SYS AS SYSDBA:
Confirm password:
Connecting to database user: SYS AS SYSDBA url: jdbc:oracle:thin:@//10.10.10.90:1521/SRV_GPIDB_MAIN
 
Retrieving information.
Enter the default tablespace for ORDS_METADATA [APEX]:
Enter the temporary tablespace for ORDS_METADATA [TEMP]:
Enter the default tablespace for ORDS_PUBLIC_USER [APEX]:
Enter the temporary tablespace for ORDS_PUBLIC_USER [TEMP]:
Enter 1 if you want to use PL/SQL Gateway or 2 to skip this step.
If using Oracle Application Express or migrating from mod_plsql then you must enter 1 [1]:
Enter the PL/SQL Gateway database user name [APEX_PUBLIC_USER]:
Enter the database password for APEX_PUBLIC_USER:
Confirm password:
Enter 1 to specify passwords for Application Express RESTful Services database users (APEX_LISTENER, APEX_REST_PUBLIC_USER) or 2 to skip this step [1]:2
Enter a number to select a feature to enable:
   [1] SQL Developer Web  (Enables all features)
   [2] REST Enabled SQL
   [3] Database API
   [4] REST Enabled SQL and Database API
   [5] None
Choose [1]:1
2021-03-17T17:06:34.107Z INFO        reloaded pools: []
Installing Oracle REST Data Services version 20.4.3.r0501904
... Log file written to /home/oracle/ords_install_core_2021-03-17_180634_00337.log
... Verified database prerequisites
... Created Oracle REST Data Services proxy user
... Created Oracle REST Data Services schema
... Granted privileges to Oracle REST Data Services
... Created Oracle REST Data Services database objects
... Log file written to /home/oracle/ords_install_datamodel_2021-03-17_180648_00623.log
... Log file written to /home/oracle/ords_install_apex_2021-03-17_180649_00911.log
Completed installation for Oracle REST Data Services version 20.4.3.r0501904. Elapsed time: 00:00:17.105
 
Enter 1 if you wish to start in standalone mode or 2 to exit [1]:2

siehe auch ⇒ https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/20.4/aelig/installing-REST-data-services.html#GUID-2C42D982-BF08-48E3-A4C6-3FE1A78287E3

Bei Bedarf validieren ob alles geklappt hat:

java -jar ords.war validate

ORDS War File deployen

Nun die Datei „ords.war“ aus /srv/ords/ords nach TOMCAT_HOME\webapps kopieren.

su - tomcat
cp /srv/ords/ords/ords.war /srv/tomcat/config/webapps/

Läuft Tomcat noch, sieht man nun in der Console, dass die war datei deployed wird unter TOMCAT_HOME\webapps\ords liegt nun die ORDS Web Applikation.

Überprüfen ob das nun schon über http://localhost:8080/ords aufgerufen werden kann.

Falls nicht Konfiguration überprüfen!

ORDS konfigurieren überprüfen und optmieren

Die Konfiguration erfolgt über die „web.xml“ im TOMCAT_HOME\webapps\ords\WEB-INF Verzeichnis.

Wir hatten zuvor ja schon den Pfad im War hinterlegt, daher hat das nun auch so einfach geklappt

Datei /srv/tomcat/config/webapps/ords/WEB-INF/web.xml:

<context-param>
  <param-name>config.dir</param-name>
  <!-- Enter the location where configuration settings should be stored -->
   <param-value>/srv/ords/config/</param-value>
</context-param>
Performance optimieren

Einstellungen anpassen, leider ist sein ca. v17 nicht mehr alles per default enthalten und muss mühselig aus der Doku extrahiert werden.

Datei /srv/ords/config/ords/defaults.xml:

<entry key="jdbc.DriverType">thin</entry>
<entry key="jdbc.InactivityTimeout">1800</entry>
 
<entry key="jdbc.InitialLimit">30</entry>
<entry key="jdbc.MinLimit">15</entry>
<entry key="jdbc.MaxLimit">100</entry>
 
<entry key="jdbc.MaxStatementsLimit">10</entry>
<entry key="jdbc.statementTimeout">900</entry>
<entry key="jdbc.MaxConnectionReuseCount">15000</entry>

Das reicht für ca. 10-20 User die zur gleichen Sekunde eine Seite von APEX anfordern.

Alle Parameter siehe ⇒ https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/20.4/aelig/about-REST-configuration-files.html#GUID-37AA1468-DCB3-4D8B-868C-1910A0C04D68

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
..


ORDS Update

Aktuell Oracle REST Data Services Version 20.4

  • Auspacken z.B. nach /srv/ords/ords-20.4.3
  • Im alten ORDS Home
    # Alten Pfad testen im alten Home!!!
    # java -jar ords.war configdir
  • Im neuen Home Konfig setzen
    java -jar ords.war configdir  /srv/ords/config
  • Die alte Datei ords_params.properties aus alten Home, z.B. ords19.2\params nach dem neuen NEW_ORDS_HOME\params kopieren, z.B. /srv/ords/ords-20.4.3/params
  • Datenbank Resporitory upgraden:
     java -jar ords.war install
    # User entsprechende angeben und durchlaufen lassen
     
    Verify ORDS schema in Database Configuration apex with connection host: 10.10.10.1 port: 1521 sid: GPI
     
     
    Retrieving information.
    Requires to login with administrator privileges to verify Oracle REST Data Services schema.
     
    Enter the administrator username:sys
    Enter the database password for SYS AS SYSDBA:
    Confirm password:
     
    Retrieving information.
    Upgrading Oracle REST Data Services schema
    ....
  • War File in das Tomcat Verzeichnis kopieren
  • Tomcat stoppen und neu starten

REST Api Dokumentation - Swagger für APEX

Swagger für APEX einrichten

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

Swagger auf Webserver laden:

cd /var/www/html
wget https://github.com/swagger-api/swagger-ui/archive/v3.17.1.zip

Swagger entpacken und umbenennen

unzip v3.17.1.zip
 
rm v3.17.1.zip
 
mv swagger-ui-3.17.1 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



Varnish

Um nochmehr Performance bei den Statischen Resourcen 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 Zugriffen bewältigen müssen.

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/


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

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
"Autor: Gunther Pipperr"
prog/oracle_apex_20_2_install_windows_19c_linux_8.txt · Zuletzt geändert: 2021/04/19 09:59 von gpipperr