If you need RealLoad architecture components that are exclusively available to you, you can either use our pre-built AWS EC2 AMIs, or alternatively install these components manually.
The RealLoad components Measuring Agent(s), Cluster Controller(s) and Remote Proxy Recorder(s) can also installed/operated on your own hosted machines.
The OSHI Daemon can be installed on any system to monitor operating system performance metrics.
The installation and operation of an own dedicated Portal Server requires a contract with us and a special, commercial license.
Follow the links below to perform a manual installation.
1 - Ubuntu: Measuring Agent manual install
Ubuntu: Measuring Agent Install Instructions
Prerequisites
Supported Hardware
Amazon EC2 Cloud instances, or
Own hosted Servers with any Intel or AMD CPU, or
Own hosted Raspberry Pi 4 Model B / 8 GB (ARM CPU) / Ubuntu 20 only / for weak load tests up to max. 100 concurrent users (with loop iteration delay = 1000 ms)
Tests performed from ‘Measuring Agents’ which are virtualized or which run in a container environment measure often
incorrect results. Because additional CPU and Network delays occur at virtualization/container level.
It’s recommended that you use BARE-METAL-SERVERS to perform your tests. Alternatively you can also use Amazon EC2 Cloud instances.
You can place your ‘Measuring Agents’ at any location (anywhere at the internet or inside your local DMZ). Depending
on which kind of traffic you have to test. Note that your Measuring Agents - usually running on TCP/IP port 8080 (HTTPS) - must be
reachable form the ‘Portal Server’, and that you have to enable the corresponding inbound firewall rule.
Status: active
Logging: off
Default: deny (incoming), allow (outgoing), disabled (routed)New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
8080/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)8080/tcp (v6) ALLOW IN Anywhere (v6)
Install OpenJDK Java 8 and 11 / For Intel and AMD CPUs
Create the DKFQS account which is running the Measuring Agent
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Measuring Agent
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/agent (as dkfqs user):
cd /home/dkfqs
mkdir agent
Create the following sub-directories at /home/dkfqs/agent (as dkfqs user):
bin
config
internalData
log
scripts
usersData
cd /home/dkfqs/agent
mkdir bin config internalData log scripts usersData
Copy the following files to the bin directory /home/dkfqs/agent/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
DKFQSMeasuringAgent.jar
chromedriver (optional, for Selenium)
geckodriver (optional, for Selenium)
chmod 755 chromedriver
chmod 755 geckodriver
Copy the following files to the config directory /home/dkfqs/agent/config
datacollector.properties
measuringagent.properties
Modify the measuringagent.properties file. Set the following properties:
HttpsCertificateCN (set the public DNS name or the IP address for the automatically generated SSL/TLS server certificate)
HttpsCertificateIP (set the public IP address for the automatically generated SSL/TLS server certificate)
PowerShellCore6Path
OpenJDK8JavaPath
OpenJDK8JavaJobDefaultXmx (set around 20% of total OS memory - example: 1024m)
OpenJDK11JavaPath
OpenJDK11JavaJobDefaultXmx (set around 20% of total OS memory - example: 1024m)
Example: datacollector.properties
# local TCP/HTTPS data collector portsDataCollectorPortStartRange=44444DataCollectorPortEndRange=45000DataCollectorPortExcludeList=LogLevel=info
MaxLifeTimeMinutes=240MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=67108864MaxInboundWebSocketPayloadPerFrame=1048576MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000RealtimeStatisticsSamplingGranularityMillis=4000
Example: measuringagent.properties
HttpsPort=8080HttpsCertificateCN=agent2.realload.com
HttpsCertificateIP=83.150.39.43
LogLevel=info
# AuthTokenEnabled: true or false, if true = the AuthTokenValue must be configured at portal server measuring agent settingsAuthTokenEnabled=false# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log output# AuthTokenValue=MeasuringAgentLogFile=/home/dkfqs/agent/log/MeasuringAgent.log
MeasuringAgentInternalDataDirectory=/home/dkfqs/agent/internalData
MeasuringAgentUsersDataRootDirectory=/home/dkfqs/agent/usersData
ApiV1MaxRequestSizeMB=256ApiV1WorkerThreadBusyTimeoutSeconds=330ApiV1WorkerThreadExecutionTimeoutSeconds=300MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=160000000MaxInboundWebSocketPayloadPerFrame=80000000MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000DataCollectorProcessJavaPath=java
DataCollectorProcessJavaXmx=512m
DataCollectorPropertiesPath=/home/dkfqs/agent/config/datacollector.properties
# Settings for Supported Scripts / Programming LanguagesPowerShellCore6Path=/snap/bin/pwsh
OpenJDK8JavaPath=/opt/OpenJDK/java-se-8u41-ri/bin/java
OpenJDK8JavaJobDefaultXmx=512m
OpenJDK11JavaPath=/opt/OpenJDK/jdk-11.0.1/bin/java
OpenJDK11JavaJobDefaultXmx=512m
# Limits# LimitMaxUsersPerJob=500# LimitMaxJobDurationSeconds=300# Settings for Synthetic MonitoringSyntheticMonitoringDataCollectorProcessJavaXmx=128m
SyntheticMonitoringOpenJDK8JavaJobXmx=256m
SyntheticMonitoringOpenJDK11JavaJobXmx=256m
SyntheticMonitoringLimitMaxUsersPerJob=5SyntheticMonitoringLimitMaxJobDurationSeconds=300SyntheticMonitoringLimitMaxLoopsPerUser=5# Settings for Tests Jobs which require a (virtual) display. If VirtualDisplayPerRemoteUserIdEnabled = false then the value of DebugDisplay is usedDebugDisplay=:0.0
VirtualDisplayPerRemoteUserIdEnabled=trueVirtualDisplayType=Xvfb
XvfbPath=Xvfb
SeleniumTestJobsEnabled=trueSeleniumLimitMaxUsersPerJob=20SeleniumWebBrowserTypesSupported=Chrome,Firefox
SeleniumChromeDriverPath=/home/dkfqs/agent/bin/chromedriver
SeleniumGeckoDriverPath=/home/dkfqs/agent/bin/geckodriver
SeleniumEdgeDriverPath=
First Test - Start the Measuring Agent manually (as dkfqs user)
cd /home/dkfqs/agent/bin
exportCLASSPATH=bcpkix-jdk15on-160.jar:bcprov-jdk15on-160.jar:bctls-jdk15on-160.jar:DKFQSMeasuringAgent.jar
java -Xmx512m -DdkfqsMeasuringAgentProperties=../config/measuringagent.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.measuringagent.internal.StartDKFQSMeasuringAgent
Data Collector service port range from 44444 to 45000LimitMaxUsersPerJob= unlimited
LimitMaxJobDurationSeconds= unlimited
X509 TLS server certificate generated forCN= 192.168.0.51
Internal RSA 2048 bit keypair generated in 373 ms
2021-03-11 18:20:27.947 | QAHTTPd | WARN | QAHTTPd V1.3-U started
2021-03-11 18:20:27.990 | QAHTTPd | INFO | HTTPS server starting at port 80802021-03-11 18:20:28.089 | QAHTTPd | INFO | HTTPS server ready at port 8080
Create the Measuring Agent Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi MeasuringAgent
In terms of network technology, the cluster controller should be as close as possible to the cluster members.
The simultaneous operation of a cluster controller together with one or more measuring agents on the same machine is possible, although not recommended.
This means that the cluster controller should be operated on its own machine - especially if a cluster contains more than 100 members.
The time difference of the operating system time between the cluster controller and the cluster members must not be greater than one second (1000 ms).
It is recommended to use the same time server for the cluster controller and the cluster members.
The Portal Server supports the use of multiple cluster controllers. Each cluster controller can manage multiple clusters. And each measuring agent can be a member of multiple clusters.
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Install the Cluster Controller
Create the DKFQS account which is running the Cluster Controller
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Cluster Controller
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/controller (as dkfqs user):
cd /home/dkfqs
mkdir controller
Create the following sub-directories at /home/dkfqs/controller (as dkfqs user):
bin
config
internalData
log
scripts
usersData
cd /home/dkfqs/controller
mkdir bin config internalData log scripts usersData
Copy the following files to the bin directory /home/dkfqs/controller/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
DKFQSMeasuringAgent.jar
Copy the following files to the config directory /home/dkfqs/controller/config
clustercontroller.properties
Modify the clustercontroller.properties file. Set the following properties:
HttpsCertificateCN (set the public DNS name or the IP address for the automatically generated SSL/TLS server certificate)
HttpsCertificateIP (set the public IP address for the automatically generated SSL/TLS server certificate)
AuthTokenValue
Example: clustercontroller.properties
HttpsPort=8083HttpsCertificateCN=192.168.0.50
HttpsCertificateIP=192.168.0.50
LogLevel=info
# AuthTokenEnabled: true or false, if true = the AuthTokenValue must be configured at portal server measuring agent cluster settingsAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log outputAuthTokenValue=aberaber
ClusterControllerLogFile=/home/dkfqs/controller/log/ClusterController.log
ClusterControllerInternalDataDirectory=/home/dkfqs/controller/internalData
ClusterControllerUsersDataRootDirectory=/home/dkfqs/controller/usersData
ApiMaxRequestSizeMB=256ApiWorkerThreadBusyTimeoutSeconds=330ApiWorkerThreadExecutionTimeoutSeconds=300MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=83886080MaxInboundWebSocketPayloadPerFrame=20971520MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000
First Test - Start the Cluster Controller manually (as dkfqs user)
cd /home/dkfqs/controller/bin
exportCLASSPATH=bcpkix-jdk15on-160.jar:bcprov-jdk15on-160.jar:bctls-jdk15on-160.jar:DKFQSMeasuringAgent.jar
java -Xmx512m -DdkfqsClusterControllerProperties=../config/clustercontroller.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.measuringagent.clustercontroller.StartDKFQSClusterController
Cluster Controller V4.0.4
Max. Memory=512 MB
AuthTokenEnabled=trueAuthTokenValue= ********
X509 TLS server certificate generated forCN= 192.168.0.50
Internal RSA 2048 bit keypair generated in 305 ms
2022-01-29 20:45:20.118 | QAHTTPd | WARN | QAHTTPd V1.3-Y started
2022-01-29 20:45:20.219 | QAHTTPd | INFO | HTTPS server starting at port 80832022-01-29 20:45:20.278 | QAHTTPd | INFO | HTTPS server ready at port 8083
Create the Cluster Controller Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi ClusterController
Register /etc/init.d/ClusterController to be started at system boot (root at /etc/init.d):
update-rc.d ClusterController defaults
Reboot the system. Login as dkfqs and check /home/dkfqs/controller/log/ClusterController.log
Define a Cluster and Verify the Cluster Controller
Sign-in at the ‘Portal Server’
Select at Top Navigation ‘Measuring Agents & Cluster Controllers’
Add the Cluster
Ping the Cluster Controller at application level
Add the Cluster Members
Ping the Cluster Members by the Cluster Controller, and verify that the absolute value of OS Δ Time for each cluster member is not greater than 1000 ms
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Generate the Certificate Authority (CA) Root Certificate
For technical reasons, the Remote Proxy Recorder generates “fake” web server certificates during operation in order to break the encryption between the web browser and the web servers and to record the data exchanged.
In order for this to work, the Remote Proxy Recorder needs its own CA root certificate, which you then have to import into your browser.
Thus for security reasons, never use a CA root certificate from us or someone else for the Remote Proxy Recorder root certificate. Always create your own CA root certificate.
Example:
C:\Scratch2>openssl genrsa -des3 -out myCAPrivate.key 2048Generating RSA private key, 2048 bit long modulus
.......................+++
.............................+++
unable to write 'random state'e is 65537(0x10001)Enter pass phrase for myCAPrivate.key:
Verifying - Enter pass phrase for myCAPrivate.key:
C:\Scratch2>openssl pkcs8 -topk8 -inform PEM -outform PEM -in myCAPrivate.key -out myCAPrivateKey.pem -nocrypt
Enter pass phrase for myCAPrivate.key:
C:\Scratch2>openssl req -x509 -new -nodes -key myCAPrivate.key -sha256 -days 3700 -out myCARootCert.pem
Enter pass phrase for myCAPrivate.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code)[AU]:CH
State or Province Name (full name)[Some-State]:Bern
Locality Name (eg, city)[]:Bern
Organization Name (eg, company)[Internet Widgits Pty Ltd]:My Pty Ltd
Organizational Unit Name (eg, section)[]:QA
Common Name (e.g. server FQDN or YOUR name)[]:DKFQS Proxy Recorder Root
Email Address []:
C:\Scratch2>dir
Volume in drive C is OS
Volume Serial Number is AEF7-CFB1
Directory of C:\Scratch2
06 Feb 2022 20:44 <DIR> .
06 Feb 2022 20:44 <DIR> ..
06 Feb 2022 20:40 1.743 myCAPrivate.key
06 Feb 2022 20:41 1.704 myCAPrivateKey.pem
06 Feb 2022 20:44 1.350 myCARootCert.pem
3 File(s) 4.797 bytes
2 Dir(s) 310.772.580.352 bytes free
Install the Remote Proxy Recorder
Create the DKFQS account which is running the Remote Proxy Recorder
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Remote Proxy Recorder
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/proxy (as dkfqs user):
cd /home/dkfqs
mkdir proxy
Create the following sub-directories at /home/dkfqs/proxy (as dkfqs user):
bin
config
log
cd /home/dkfqs/proxy
mkdir bin config log
Copy the following files to the bin directory /home/dkfqs/proxy/bin
bcmail-jdk15on-168.jar
bcpg-jdk15on-168.jar
bcpkix-jdk15on-168.jar
bcprov-jdk15on-168.jar
bctls-jdk15on-168.jar
com.dkfqs.remoteproxyrecorder.jar
Copy the following files to the config directory /home/dkfqs/proxy/config
config.properties
myCAPrivateKey.pem (the private key of your self generated CA root certificate)
myCARootCert.pem (your self generated CA root certificate)
Modify the config.properties file. Set (modify) the following properties:
ControlServerHttpsCertificateCN (set the public DNS name or the IP address of the Remote Proxy Recorder)
ControlServerHttpsCertificateIP (set the public IP address of the Remote Proxy Recorder)
ControlServerAuthToken
ProxyServerDefaultCaRootCertFilePath (set the CA root certificate of the proxy)
ProxyServerDefaultCaRootPrivateKeyFilePath (set the private key of the CA root certificate)
Example: config.properties
ControlServerLogLevel=info
ControlServerHttpsPort=8081ControlServerHttpsCertificateCN=proxy2.realload.com
ControlServerHttpsCertificateIP=83.150.39.45
#Note: the control server authentication token is required to connect to the control serverControlServerAuthToken=krungthep
ProxyServerLogLevel=warn
ProxyServerPort=8082ProxyServerDefaultCaRootCertFilePath=/home/dkfqs/proxy/config/myCARootCert.pem
ProxyServerDefaultCaRootPrivateKeyFilePath=/home/dkfqs/proxy/config/myCAPrivateKey.pem
#Note: the proxy authentication credentials are replaced on the fly when the portal user connects via the control interface to the control serverProxyServerDefaultAuthenticationUsername=max
ProxyServerDefaultAuthenticationPassword=meier
First Test - Start the Remote Proxy Recorder manually (as dkfqs user)
cd /home/dkfqs/proxy/bin
exportCLASSPATH=bcmail-jdk15on-168.jar:bcpg-jdk15on-168.jar:bcpkix-jdk15on-168.jar:bcprov-jdk15on-168.jar:bctls-jdk15on-168.jar:com.dkfqs.remoteproxyrecorder.jar
java -Xmx2048m -DconfigProperties=../config/config.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.remoteproxyrecorder.main.StartRemoteProxyRecorder
> Remote Proxy Recorder V0.2.0
> Max. Memory=2048 MB
> Internal RSA 2048 bit keypair generated in 85 ms
> 2021-06-05 23:24:37.710 | QAHTTPd | WARN | QAHTTPd V1.3-V started
> 2021-06-05 23:24:37.710 | QAHTTPd | INFO | HTTPS server starting at port 8081> 2021-06-05 23:24:37.726 | QAHTTPd | INFO | HTTPS server ready at port 8081> 2021-06-05 23:24:38.722 | Proxy | WARN | ProxyRecorder V1.1.0 started at port 8082
Create the Remote Proxy Recorder Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi RemoteProxyRecorder
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Install the OSHI Daemon
Create the DKFQS account which is running the OSHI Daemon
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the OSHI Daemon
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/oshi (as dkfqs user):
cd /home/dkfqs
mkdir oshi
Create the following sub-directories at /home/dkfqs/oshi (as dkfqs user):
bin
config
internalData
log
cd /home/dkfqs/oshi
mkdir bin config internalData log
Copy the following files to the bin directory /home/dkfqs/oshi/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
com.dkfqs.oshidaemon.jar
Copy the following files to the config directory /home/dkfqs/oshi/config
oshi-daemon.properties
Modify the oshi-daemon.properties file. Set the following properties:
HttpsPort (the OSHI Daemon port)
HttpsCertificateCN (set the public DNS name or the IP address for the automatically generated SSL/TLS server certificate)
HttpsCertificateIP (set the public IP address for the automatically generated SSL/TLS server certificate)
AuthTokenValue (the value of the OSHI Daemon authentication token)
Example: oshi-daemon.properties
HttpsPort=8087HttpsCertificateCN=192.168.1.27
HttpsCertificateIP=192.168.1.27
LogLevel=info
OshiDaemonInternalDataDirectory=/home/dkfqs/oshi/internalData
# AuthTokenEnabled: true or falseAuthTokenEnabled=true# If AuthTokenEnabled is true, but AuthTokenValue is undefined or an empty string, then the (permanent) AuthTokenValue is automatically generated and printed at the log outputAuthTokenValue=aaa
# WebSockets security settingsMaxWebSocketConnectTimeSeconds=43200MaxInboundWebSocketTrafficPerConnection=1000000MaxInboundWebSocketPayloadPerFrame=10000MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000# The OSHI subjects to collect periodically - meaning that historical data are available - don't confuse with OSHI subjects snapshots which can be made at any time# Possible values are: OPERATING_SYSTEM,CPU,MEMORY,NETWORK,NETWORK_CONNECTIONS_LIST,DISK,FILE_SYSTEM,PROCESS_LISTCollectOshiSubjectsList=CPU,MEMORY,NETWORK
CollectOshiSubjectsIntervalSeconds=5CollectOshiSubjectsMaxStorageTimeSeconds=43200# The (optional) plain text that is displayed in the 'About' tabAboutThisOshiDaemonText=This daemon runs in unprivileged mode, so some detailed values may not be captured or displayed.
# The (optional) support email address in the 'About' tabAboutThisOshiDaemonSupportEmailAddress=support@realload.com
Create the OSHI Daemon Startup Script (as root)
sudo bash # become rootcd /etc/init.d
vi OshiDaemon
Register /etc/init.d/OshiDaemon to be started at system boot (root at /etc/init.d):
update-rc.d OshiDaemon defaults
Reboot the system. Login as dkfqs and check /home/dkfqs/oshi/log/OshiDaemon.log
Verify the OSHI Daemon installation
Start a Firefox web browser and connect to the OSHI Daemon at HTTPS port.
Ignore the SSL certificate waring:
Enter the OSHI Daemon authentication token:
The main page of the OSHI daemon is then displayed. In the top navigation you can select additional system performance metrics:
5 - Ubuntu: Portal Server manual install
Ubuntu: Portal Server Install Instructions
Prerequisites
Supported Hardware
Amazon EC2 Cloud instances
Own hosted Servers with any Intel or AMD CPU
Minimum Hardware Requirements
Minimum required CPU Cores of Processor: 4
Minimum required RAM: 16 GB
Minimum required Disk: 512 GB
Minimum required Network Speed: 1000 Mbps
Email Server
The Portal Server sends its emails via SMTP. You need an email server which receive and forward these SMTP messages.
Twilio SMS Gateway
If the Portal Server will be operated/configured in such a way that any person can “sign up”
(= self registration) you need a customer account for the Twilio SMS Gateway www.twilio.com/docs/sms
Note
You can add new portal users also directly from the Administrator Menu. In such a case an SMS gateway is not required.
java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
Install the Portal Server
Create the DKFQS account which is running the Portal Server
sudo adduser dkfqs # follow the questions, remember or write down the password
Install the Portal Server
Login with the dkfqs account (SSH) - or - Enter: sudo -u dkfqs bash |
OR: Install Samba to get convenient access to /home/dkfqs as Samba dkfqs user
Create the directory /home/dkfqs/portal (as dkfqs user):
cd /home/dkfqs
mkdir portal
Create the following sub-directories at /home/dkfqs/agent (as dkfqs user):
backup
bin
config
db
developerExamples
htdocs
javaUsersLib
jks
log
reportTemplate
scripts
temp
usersLib
usersData
cd /home/dkfqs/portal
mkdir backup bin config db developerExamples htdocs javaUsersLib jks log reportTemplate scripts temp usersLib usersData
Copy the following files to the bin directory /home/dkfqs/portal/bin
bcpkix-jdk15on-160.jar
bcprov-jdk15on-160.jar
bctls-jdk15on-160.jar
DKFQS.jar
jasperreports-fonts-6.20.5.jar
Copy the following files to the db directory /home/dkfqs/portal/db
CreateNewAdminDB.sql
CreateNewMonitoringDB.sql
CreateNewOperationsDB.sql
CreateNewUsersDB.sql
Edit the file CreateNewUsersDB.sql and modify the following line to set the nickname, the email, the
phone number and the temporary password of the Admin account. Note: The nickname must always start with “Admin-”
Copy the following file to the htdocs directory /home/dkfqs/portal/htdocs
htdocs.jar
Navigate to /home/dkfqs/portal/htdocs and execute (as dkfqs user):
jar -xvf htdocs.jar
rm htdocs.jar # delete the jar)rm -R META-INF # delete the META-INF directory)
Copy the following files to the javaUsersLib directory /home/dkfqs/portal/javaUsersLib
com.dkfqs.selenium.jar
commons-io-2.13.0.jar
hamcrest-core-1.3.jar
junit-4.13.2.jar
selenium_bundle-4.10.0.jar
selenium_bundle-4.12.1.jar
Copy the following file to the jks directory /home/dkfqs/portal/jks
dkfqscom.jks
Note
The file dkfqscom.jks is an expired SSL server certificate which is needed only temporary in order that you can test the start of the portal server. You should replace this file by an own one as soon as possible.
Copy the following files to the usersLib directory /home/dkfqs/portal/usersLib
com.dkfqs.tools.jar
DKFQSLibrary2.psm1 (optional)
Copy the following files to the bin directory /home/dkfqs/portal/reportTemplate
AnnotationEvent.jasper
Annotations.jasper
ErrorCharts.jasper
ErrorTypeDistribution.jrxml
ErrorTypes.jasper
JobProperties.jasper
MonitoringGroup.jasper
MonitoringGroupAvailability.jasper
MonitoringJob.jasper
MonitoringJobAvailability.jasper
MonitoringJobPerformance.jasper
OverviewStatistics.jasper
SamplesThroughputPerSecond.jasper
SummaryStatistic.jasper
TestResults.jasper
TestSpecificData.jasper
Copy the following files to the bin directory /home/dkfqs/portal/config
dkfqs.properties
rewrite.properties
twilio.properties
Modify the dkfqs.properties file. Set the following properties:
ServerName
ServerDNSName
DNSJavaDefaultDNSServers
UsersMailServerHost
UsersMailFrom
UsersMailServerAuthUser
UsersMailServerAuthPassword
ServerStatusPageEnabledIPList
AlertMailServerHost
AlertMailFrom
AlertMailToList
AlertMailBounceAddress
AlertMailServerAuthUser
AlertMailServerAuthPassword
Example: dkfqs.properties
IsProduction=trueServerName=192.168.0.50
ServerDNSName=192.168.0.50
DiskDocumentRootDirectory=/home/dkfqs/portal/htdocs
SQLiteDBDirectory=/home/dkfqs/portal/db
ReportTemplateDirectory=/home/dkfqs/portal/reportTemplate/
JasperReportsTemporaryDirectory=/home/dkfqs/portal/temp/
UsersDataRootDirectory=/home/dkfqs/portal/usersData
OSProcessLogFile=/home/dkfqs/portal/log/DKFQS.log
LogLevel=info
StaticContentMaxAgeTime=7200MaxHTTPRequestSize=20240000MaxInvalidAnonymousSessionsPerIPLimit=32AnonymousSessionTimeout=1200MaxAnonymousSessionTime=21600MaxWebSocketConnectTimeSeconds=14400MaxInboundWebSocketTrafficPerConnection=67108864MaxInboundWebSocketPayloadPerFrame=1048576MaxInboundWebSocketFramesPerIPTimeFrame=10MaxInboundWebSocketFramesPerIPLimit=1000HTTPExternalServerPort=80HTTPInternalServerPort=8000HTTPSExternalServerPort=443HTTPSInternalServerPort=8001HTTPSKeyStoreFile=/home/dkfqs/portal/jks/dkfqscom.jks
HTTPSKeyStorePassword=topsecret
#FileTreeApiMaxRequestSizeMB=256FileTreeApiWorkerThreadBusyTimeoutSeconds=330FileTreeApiWorkerThreadExecutionTimeoutSeconds=300TestjobsApiMaxRequestSizeMB=256TestjobsApiWorkerThreadBusyTimeoutSeconds=330TestjobsApiWorkerThreadExecutionTimeoutSeconds=300#DNSJavaDefaultDNSServers=8.8.8.8,8.8.4.4
#JavaSDK8BinaryPath=/opt/OpenJDK/java-se-8u41-ri/bin
JavaSDK11BinaryPath=/opt/OpenJDK/jdk-11.0.1/bin
HTTPTestWizardJavaCodeLibraries=/home/dkfqs/portal/usersLib/com.dkfqs.tools.jar
#UserSignInURL=/SignIn
UsersMailServerHost=192.168.1.4
UsersMailFrom=xxxxxxxxx@xxxxxxx.com
UsersMailServerAuthUser=xxxxxxxxx@xxxxxxx.com
UsersMailServerAuthPassword=*********
UsersMailTransmitterThreads=2UsersMailDebugSMTP=false#smsGatewaysClassNames=com.dkfqs.server.sms.twilio.TwilioSMSGateway
## ServerStatusPageEnabledIPList=127.0.0.1,192.168.0.99ServerStatusPageEnabledIPList=*.*.*.*
AdminSignInURL=/AdminSignIn
AlertMailEnabled=trueAlertMailServerHost=192.168.1.4
AlertMailFrom=xxxxxxxxx@xxxxxxx.com
AlertMailToList=yyyyyyyyy@xxxxxxx.com,zzzzzzzzz@xxxxxxx.com
AlertMailBounceAddress=bbbbbbb@xxxxxxx.com
AlertMailServerAuthUser=xxxxxxxxx@xxxxxxx.com
AlertMailServerAuthPassword=*******
AlertMailDebugSMTP=falseAlertMailNotifyStartup=false#SecurityIpBlacklistBlockTime=900SecurityMaxRequestsPerIpLimit=200SecurityMaxRequestsPerIpTimeFrame=10SecurityMaxInvalidRequestsPerIpLimit=12SecurityMaxInvalidRequestsPerIpTimeFrame=60SecurityMaxAnonymousFormSubmitPerIpLimit=8SecurityMaxAnonymousFormSubmitPerIpTimeFrame=60SecurityMaxAuthenticationFailuresPerIpLimit=5SecurityMaxAuthenticationFailuresPerIpTimeFrame=60#MeasuringAgentConnectTimeout=10# Support of license provider 'Real Load Pty Ltd / nopCommerce', if enabled then the LicenseProviderRealLoadPtyLtdNopCommerceCARootFileName is located in the config directory of the portal serverLicenseProviderRealLoadPtyLtdNopCommerceEnabled=trueLicenseProviderRealLoadPtyLtdNopCommerceCARootFileName=nopCommerceCARoot.pem
# Synthetic Monitoring settingsMonitoringJobSchedulerMainThreadIntervalSeconds=10MonitoringJobSchedulerInitialDBLogLevel=warn
MonitoringJobSchedulerInitialStdoutLogLevel=info
MonitoringJobSchedulerInitialUserFileLogLevel=info
MonitoringGroupThreadsStartDelayMillis=1000# Support for compiling Junit and Selenium TestsJavaUsersLibDirectory=/home/dkfqs/portal/javaUsersLib
JavaJUnit4CompilerLibraries=hamcrest-core-1.3.jar,junit-4.13.2.jar
JavaJUnit4TestExecutionLibraries=com.dkfqs.selenium.jar,com.dkfqs.tools.jar,commons-io-2.13.0.jar,hamcrest-core-1.3.jar,junit-4.13.2.jar
JavaSelenium4CompilerLibraries=hamcrest-core-1.3.jar,junit-4.13.2.jar,selenium_bundle-4.12.1.jar,com.dkfqs.selenium.jar
JavaSelenium4TestExecutionLibraries=selenium_bundle-4.12.1.jar,com.dkfqs.selenium.jar,com.dkfqs.tools.jar,commons-io-2.13.0.jar,hamcrest-core-1.3.jar,junit-4.13.2.jar
Modify the twilio.properties file. Set the following properties:
First Test - Start the Portal Server manually (as dkfqs user)
cd /home/dkfqs/portal/bin
exportCLASSPATH=bcpkix-jdk15on-160.jar:bcprov-jdk15on-160.jar:bctls-jdk15on-160.jar:DKFQS.jar
java -Xmx2048m -DdkfqsProperties=../config/dkfqs.properties -DrewriteProperties=../config/rewrite.properties -Dnashorn.args="--no-deprecation-warning" com.dkfqs.server.internal.StartDKFQSserver
Internal RSA 2048 bit keypair generated in 1220 ms
2021-03-10 22:27:25.040 | QAHTTPd | INFO | SQL connection pool for DB "UsersDB" initialized
2021-03-10 22:27:25.062 | QAHTTPd | INFO | SQL connection pool for DB "AdminAccountsDB" initialized
2021-03-10 22:27:25.068 | QAHTTPd | INFO | Alarm adapter "IP Blacklist Alarm Adapter" started
2021-03-10 22:27:25.069 | QAHTTPd | WARN | QAHTTPd V1.3-U started
2021-03-10 22:27:25.071 | QAHTTPd | INFO | Execute PreUpStartupLoadIPRangeBlacklist
2021-03-10 22:27:25.082 | QAHTTPd | INFO | HTTP server starting at port 80002021-03-10 22:27:25.109 | QAHTTPd | INFO | HTTP server ready at port 80002021-03-10 22:27:25.110 | QAHTTPd | INFO | HTTPS server starting at port 80012021-03-10 22:27:25.124 | QAHTTPd | INFO | HTTPS server ready at port 80012021-03-10 22:27:25.821 | EMAIL-1 | INFO | Email transmitter thread started
2021-03-10 22:27:25.822 | EMAIL-2 | INFO | Email transmitter thread started
2021-03-10 22:27:25.828 | main | INFO | Twilio SMS Gateway registered
2021-03-10 22:27:25.853 | main | INFO | Twilio SMS Gateway initialized
2021-03-10 22:27:25.857 | SMS-Dispatcher | INFO | Thread started
Change owner and file protection of /etc/init.d/DKFQS (root at /etc/init.d):
chown root DKFQS
chgrp root DKFQS
chmod 755 DKFQS
Register /etc/init.d/DKFQS to be started at system boot (root at /etc/init.d):
update-rc.d DKFQS defaults
Reboot the system. Then check /home/dkfqs/portal/log/DKFQS.log
Administrator Sign In
Enter in your browser https://admin-portal-host/admin .
You will get a browser warning because the SSL server certificate is expired. Ignore the warning and enter
in the Sign In the email address and the password as you have set in CreateNewAdminDB.sql.
You will now asked to set a new password. Then you are signed in.
Disable Sign Up if you don’t have an SMS gateway:
User accounts can be added directly:
Replace the SSL Server Certificate
If you or your company can already issue SSL server certificates you can skip the next sub-chapter.
Continue in such a case with “Convert and Install the SSL Server Certificate”.
Get a Let's Encrypt SSL Server Certificate | Ubuntu 20
Make sure that your portal server has a public, valid DNS name.
Create a Cron Job to Renew the Let's Encrypt SSL Certificate
Create at your home directory the sub-directory system_cronjobs_scripts and add/edit the file “DKFQS_certbot_renew” in this directory. Replace the ********* placeholders with your real values.
#!/bin/sh
## renew the letsencrypt DKFQS certificate# =======================================certbot renew
## set the default working directorycd /home/*********/system_cronjobs_scripts
## cleanup in any caserm -f *.jks
rm -f *.p12
## convert the letsencrypt certificate to PKCS12 and place it in the default directoryopenssl pkcs12 -export -in /etc/letsencrypt/live/*********/fullchain.pem -inkey /etc/letsencrypt/live/*********/privkey.pem -out ./*********.p12 -passin pass:******** -passout pass:********
## convert the PKCS12 certificate to a Java keystoreecho ******** | keytool -importkeystore -srckeystore *********.p12 -srcstoretype PKCS12 -destkeystore *********.jks -deststoretype JKS -storepass ********
## update DKFQS keystore filecp *********.jks /home/dkfqs/portal/jks
chown dkfqs /home/dkfqs/portal/jks/*********.jks
chgrp dkfqs /home/dkfqs/portal/jks/*********.jks
chmod 600 /home/dkfqs/portal/jks/*********.jks
## restart DKFQS server/etc/init.d/DKFQS stop
sleep 5sudo /etc/init.d/DKFQS start
## cleanup again in any caserm -f *.jks
rm -f *.p12
## display DKFQS log filesleep 5cat /home/dkfqs/portal/log/DKFQS.log
## all doneexit0
sudo bash # become rootchmod 700 DKFQS_certbot_renew # change file protection and set execute bit./DKFQS_certbot_renew # try out manually
Add the file to crontab. Important: The last line in crontab must be an empty line!