Aufgabe Stand-Alone System für eine APEX Entwicklungsumgebung
Betriebsystem:
Datenbank:
Web Produktstack:
Architektur Übersicht:
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:
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
Im ersten Schritt die Datenbank unter dem User Oracle aufsetzen (DB Software installieren + DB anlegen).
RPM Installation Oracle 19c (19.3) (! Nur Enterprise! ):
Software Home ist „/opt/oracle/product/19c/dbhome_1“
#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
Alternative individuelle Installation:
Nach der Installation den aktuellen RU in das Oracle Home wie gewohnt in folgender Reihenfolge einspielen.
wie (Stand 04.2021):
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
⇒ 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;
Software über ⇒ https://tomcat.apache.org/download-90.cgi herunterladen.
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
Datei unter /etc/systemd/system/tomcat.service 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" 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
Konfiguration befindet sich dann hier:
Apache Tomcat wird über die folgenden vier Dateien in $CATALINA_BASE/conf konfiguriert:
Die Dateien liegen unter $CATALINA_HOME\conf Verzeichnis
Ü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" />
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
Über die Datei „tomcat-users.xml“ wird der Admin User für die Admin Oberfläche konfiguriert, dazu werden bestimmte Rollen benötigt.
<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" /> -->
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" />
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].
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:
siehe auch ⇒ https://docs.oracle.com/en/operating-systems/oracle-linux/8/obe-apache-install/#before-you-begin
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
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
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
# 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!
File: /etc/httpd/conf.d/security.conf
ServerSignature Off ServerTokens Prod TraceEnable Off
File: vi /etc/httpd/conf.d/apex.conf
HostnameLookups off
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.
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.
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
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
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
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!!
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)
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 .-)!
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.
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 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
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
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
Bei Bedarf validieren ob alles geklappt hat:
java -jar ords.war validate
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!
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>
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
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 ..
Aktuell Oracle REST Data Services Version 20.4
# Alten Pfad testen im alten Home!!! # java -jar ords.war configdir
java -jar ords.war configdir /srv/ords/config
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 ....
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!
Mit dem Apache JMeter läßt sich nun die Performance überprüfen.
Siehe dazu > Oracle ORDS Performance Überlegungen
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.
dnf module install varnish
Welche Version ist im Einsatz:
varnishd -V varnishd (varnish-6.0.6 revision 29a1a8243dbef3d973aec28dc90403188c1dc8e7)
Konfiguration:
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/
Apache:
Tomcat:
Kerberos
ORDS
Performance
—-
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
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>
# 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