Backend Installation
The PMP4PG server is a Java Spring Boot application — including the embedded frontend — distributed as an RPM package for Rocky Linux / RHEL. The RPM installs the application, its configuration file and the systemd service in a single step.
Step 1 — Install the Server RPM
The RPM package automatically installs Java as a dependency if it is not already present, creates the pmp4pg system user, and installs the systemd service.
rpm -ivh pmp4pg-1.0.0-1.x86_64.rpm
This installs:
| Path | Description |
|---|---|
/usr/share/pmp4pg/pmp4pg.jar | The application JAR (backend + embedded frontend) |
/etc/pmp4pg/application.properties | Configuration file |
/usr/lib/systemd/system/pmp4pg.service | systemd service unit |
/var/log/pmp4pg/ | Log directory |
Step 2 — Configure the Backend
Edit /etc/pmp4pg/application.properties with your environment values.
vi /etc/pmp4pg/application.properties
# ═══════════════════════════════════════════════════════════════════════
# PMP4PG — Application Configuration
#
# Edit this file to match your environment, then restart the service:
# systemctl restart pmp4pg
#
# DO NOT modify parameters marked as [FIXED] — they are tied to the
# Angular build and cannot be changed without repackaging the application.
# ═══════════════════════════════════════════════════════════════════════
# ── Server ──────────────────────────────────────────────────────────────
# Listening port (default: 8080)
# Change to 8443 when enabling HTTPS (see SSL section below)
server.port=8080
# [FIXED] Application context path — DO NOT MODIFY
server.servlet.context-path=/pmp
# ── Database ─────────────────────────────────────────────────────────────
# JDBC URL of the PMP4PG repository database
# Format: jdbc:postgresql://<host>:<port>/<database>
db.url=jdbc:postgresql://localhost:5432/metadata
# PostgreSQL user dedicated to PMP4PG
db.username=pmp4pg
# PostgreSQL user password
db.password=your_secure_password_here
# ── Security — JWT ───────────────────────────────────────────────────────
# Secret key used to sign and verify JWT session tokens.
# IMPORTANT: replace this value with a strong random secret unique to your installation.
# Generate one with: openssl rand -base64 64
security.jwt.token.secret-key=CHANGE_ME_GENERATE_YOUR_OWN_SECRET
# Session token lifetime in milliseconds (default: 1800000 = 30 minutes)
security.jwt.token.expire-length=1800000
# ── Logging ──────────────────────────────────────────────────────────────
# Global log level — use WARN in production, INFO or DEBUG for troubleshooting
logging.level.root=WARN
# PMP4PG application log level
logging.level.com.pmppg=INFO
# Log file location
logging.file.name=/var/log/pmp4pg/pmp4pg.log
Always replace db.password and security.jwt.token.secret-key with your own values before starting the service in production. Generate a strong secret with:
openssl rand -base64 64
By default, the backend is accessible at http://<host>:8080/pmp. All agent and frontend API calls are relative to this base URL.
Step 3 — Enable HTTPS (Optional)
PMP4PG ships without SSL enabled by default. To enable HTTPS:
- Generate or obtain a PKCS12 keystore
- Uncomment and configure the SSL section in
application.properties - Switch
server.portfrom8080to8443
# ── HTTPS / SSL (disabled by default) ───────────────────────────────────
server.port=8443
server.ssl.enabled=true
server.ssl.key-store=/etc/pmp4pg/ssl/keystore.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password=your_keystore_password
server.ssl.key-alias=pmp4pg
To generate a self-signed keystore for internal use:
mkdir -p /etc/pmp4pg/ssl
keytool -genkeypair -alias pmp4pg -keyalg RSA -keysize 2048 \
-validity 3650 -keystore /etc/pmp4pg/ssl/keystore.p12 \
-storetype PKCS12 -storepass changeit \
-dname "CN=<YOUR_HOSTNAME_OR_IP>, O=YourCompany, C=FR"
For a production deployment with a certificate from a public CA, place a Java reverse proxy (Nginx) in front of PMP4PG, or import your certificate chain into the PKCS12 keystore instead of using a self-signed certificate.
Step 4 — Enable and Start the Service
The systemd service is already installed by the RPM — no manual service file creation is required.
# Enable and start the service
systemctl enable --now pmp4pg
# Check status
systemctl status pmp4pg
Expected output:
● pmp4pg.service - PMP4PG — PostgreSQL Workload Analyzer
Loaded: loaded (/usr/lib/systemd/system/pmp4pg.service; enabled; preset: disabled)
Active: active (running) since Fri 2026-06-26 23:02:48 CEST; 1min 8s ago
Docs: https://www.pmp4pg.com
Main PID: 718 (java)
Tasks: 38 (limit: 12115)
Memory: 340.6M
CPU: 18.521s
CGroup: /system.slice/pmp4pg.service
└─718 /usr/bin/java -Xms256m -Xmx512m -jar /usr/share/pmp4pg/pmp4pg.jar --spring.config.location=/etc/pmp4pg/application.properties
# Follow logs
journalctl -u pmp4pg -f
# or directly from the log file
tail -f /var/log/pmp4pg/pmp4pg.log
Step 5 — Verify the API
# Health check endpoint
curl http://localhost:8080/pmp/actuator/health
# Expected response
{"status":"UP"}
{screenshot: backend-health-check}
Firewall Configuration
If a firewall is active on the backend host, allow inbound connections on the listening port (8080 by default, or 8443 if HTTPS is enabled) from agent and browser hosts:
# firewalld (Rocky Linux / RHEL)
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
Upgrading the Backend
To upgrade to a new version, install the new RPM — it will update the JAR in place and preserve your existing application.properties:
# Stop the service
systemctl stop pmp4pg
# Upgrade the RPM
rpm -Uvh pmp4pg-X.Y.Z-1.x86_64.rpm
# Restart the service
systemctl start pmp4pg
Always refer to the Changelog → for any configuration changes required between versions.