System Administration
System Administration
π§ Is the system already running and needs maintenance? Monitoring, backups, version upgrades, and recovery from failures β all covered here.
A guide to monitoring, backup, updating, and troubleshooting StormBPMN Enterprise.
Core administrator tasks
- Monitoring - tracking system status and performance
- Backup - regular data preservation
- Updates - installing new versions and patches
- Troubleshooting - diagnosing and resolving issues
System Monitoring
Prometheus Metrics
StormBPMN provides an HTTP endpoint with metrics in Micrometer format for monitoring via Prometheus.
Prometheus Configuration:
- job_name: "stormbpmn-node-1"
metrics_path: "/actuator/prometheus"
scrape_interval: 15s
static_configs:
- targets: ["10.1.0.3:8080"]
Ready-made Grafana dashboard
Use the Spring Boot Statistics Dashboard to visualize the metrics.
Alert Configuration
Recommended thresholds for alert triggers:
| Metric | Trigger Condition | Description |
|---|---|---|
| CPU Usage | > 90% for 5 minutes | High processor load |
| Request Count /api/v1/ | > 100 requests per minute | Abnormally high load |
| HEAP Memory Used | > 90% for 5 minutes | JVM memory shortage |
| No Data | > 5 minutes without data | Service unavailability |
When alerts trigger
Proceed to the Disaster Recovery section
Health Checks
Stormbpmn provides endpoints for checking the status:
livenessProbe:
httpGet:
path: /api/health/liveness
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
readinessProbe:
httpGet:
path: /api/health/readiness
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
Backup
What to copy
Diagrams, descriptions, and users are stored in PostgreSQL. License secrets LICENSE_KEY_V2 and those temporarily used or saved for rollback LICENSE_KEY are located outside the database: include their secure storage in the DR procedure or provide for separate secret recovery.
Database, files, and secrets
PostgreSQL contains the core data. S3 files (images, documents) are also recommended to be included in the backup strategy, and external secrets, including current license keys, must be stored in a secure storage.
Creating a backup
Example command for PostgreSQL:
pg_dump -h localhost -d storm_db -U storm_user -W -Ft -b > /backup/storm_$(date +%Y%m%d_%H%M%S).tar
Recommended automation script:
#!/bin/bash
BACKUP_DIR="/backup/stormbpmn"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/storm_backup_$DATE.tar"
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ
pg_dump -h $DB_HOST -d $DB_NAME -U $DB_USER -W -Ft -b > $BACKUP_FILE
# ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΠΈ
if [ $? -eq 0 ]; then
echo "Backup successful: $BACKUP_FILE"
# ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΠ± ΡΡΠΏΠ΅Ρ
Π΅
else
echo "Backup failed!"
# ΠΡΠΏΡΠ°Π²ΠΊΠ° Π°Π»Π΅ΡΡΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ
fi
# ΠΡΠΈΡΡΠΊΠ° ΡΡΠ°ΡΡΡ
ΠΊΠΎΠΏΠΈΠΉ (ΡΡΠ°ΡΡΠ΅ 30 Π΄Π½Π΅ΠΉ)
find $BACKUP_DIR -name "storm_backup_*.tar" -mtime +30 -delete
Backup Requirements
Restoring from a backup
Restoring PostgreSQL
# ΠΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
docker stop stormbpmn
# ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
pg_restore --format=t -c -N -O -h localhost -p 5432 -U storm_user -d storm_db /backup/storm_backup_20231201_120000.tar
# ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
docker start stormbpmn
Recovery Verification
- Verify the connection to the database
- Ensure that health checks are running
- Restore the license secrets from the secure storage:
LICENSE_KEY_V2and, while the installation uses v1 or allows rollback to it,LICENSE_KEY - Verify the selected license mode: for v1, confirm operation with the restored
LICENSE_KEY; for v2, compare the full activation code on/admin-onboardingwith the code for which the key was issued, and if it has changed, obtain a reissued key for this installation - Verify the license as a regular user: log in and open a licensed feature
- Test the core functions (for example, creating a diagram)
- Check the logs for errors
Version Update
Update Procedure
| Step | Action | Description |
|---|---|---|
| 0 | Back up the database | |
| 1 | Verify that the database backup can be restored | |
| 2 | Determine the current version | docker images | grep stormbpmn |
| 3 | Review the changelog | Change Log |
| 4 | Select the target version | Check compatibility |
| 4.1 | Inventory all installations | Production, test environments, DR, and clones. On each, capture the activation code from /admin-onboarding and request LICENSE_KEY_V2 in advance β see where to get the code |
| 4.2 | Plan the license migration | The existing LICENSE_KEY works temporarily; v2 can be rolled out per installation |
| 5 | Create a backup | Mandatory before any update |
| 6 | Save the current image | docker save stormbpmn:current > backup.tar |
| 7 | Download the new version | docker pull stormbpmn.... |
| 8 | Prepare the migration to v2 | First, update the image with the working LICENSE_KEY; then substitute the previously obtained LICENSE_KEY_V2 following the activation procedure |
| 9 | Update the tag in the current container | Change the image version |
| 10 | Restart all application instances | docker-compose up -d |
| 11 | Check health checks and the license | Verify the current mode and regular user access. When migrating to v2, check AI/DES and remove LICENSE_KEY only after a successful check and the end of the rollback window |
What's New Feed
In the on-prem version, the What's New feed displays static content baked into the image at build time. There are no external links to the blog, and the date is displayed as the build date. The feed updates automatically when the application version is updated.
Critical updates
Version β₯ 6.6.XXXX β v1/v2 licensing transition mode
6.6.XXXX β blocking release placeholder. Before publishing the release documentation, replace it with the confirmed version number; do not insert a guessed number.
The existing LICENSE_KEY continues to work temporarily, so an immediate reissue of all keys is not required. V1 is deprecated and has a known security limitation: gradually migrate production, test environments, DR, and clones, obtaining a separate LICENSE_KEY_V2 for each. A non-empty v2 has exclusive priority, and there is no automatic fallback to v1 in case of an error. After substituting v2, restart all instances, verify the license, and only then remove LICENSE_KEY from the working configuration of this installation. Details β in "Installation Activation".
Version < 6.3.231 β newer
Database migration required:
UPDATE databasechangelog
SET filename = CONCAT('/db/changelog/changes/', SUBSTRING(filename, 35));
Version β₯ 6.6.441
New ENV variables required:
| Variable | Value | Description |
|---|---|---|
| STORM_ALLOWED_ORIGINS | https://your.domain | CORS settings (do not use *!) |
| STORM_DISABLE_SIMPLE_AUTH | false | Disabling basic authentication |
| STORM_DISABLE_ENV_IN_UI | true | Hiding ENV in the admin panel |
| STORM_DISABLE_ANON_SHARING | true | Prohibition of anonymous access |
| STORM_SENTRY_ENABLE | false | Disabling Sentry |
| STORM_ENABLE_SAAS_FEATURES | false | Disabling SaaS features |
| GOTENBERG_URL | http://gotenberg:3001 | Conversion service URL |
Version β₯ 6.6.559
PostgreSQL extension required:
CREATE EXTENSION IF NOT EXISTS pgcrypto;
The pgvector extension will become mandatory (fast search + knowledge base)
The pgvector extension becomes a platform baseline requirement: it powers fast universal (semantic) search over data β this is needed for all installations, regardless of the presence of the AI module (the AI chat knowledge base is just one of the consumers). In upcoming versions, pgvector will become a hard dependency: without it, the migration will not run, and the backend will not start. Prepare in advance (you can do it now):
- Switch to a PostgreSQL build with pgvector β for example, the
pgvector/pgvector:pg17image (the same PostgreSQL + standard contrib modules + pgvector), or install pgvector in your own build/DBaaS. - Ensure that the required extensions are available in the application database. Superuser privileges or a role with the
CREATE EXTENSIONright are sufficient:
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS pg_trgm; -- Π΄Π»Ρ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΌΠΎ
The full list of extensions and the DB encoding β in the "PostgreSQL Requirements" section.
Disaster Recovery
On Updating
If the update fails:
Save container logs
docker logs stormbpmn > /tmp/update_error_logs.txtRestore the database
pg_restore --format=t -c -N -O -h localhost -p 5432 -U storm_user -d storm_db /backup/latest_backup.tarRoll back the container version
docker load < backup_image.tar docker-compose up -dTo roll back the license, keep both variables until the end of the agreed window. A non-empty
LICENSE_KEY_V2takes precedence; to temporarily revert to v1, remove or clear v2, restoreLICENSE_KEY, and restart all application instances.Restart containers
docker-compose restartVerify recovery: wait for health checks, check the license status, then log in and open a licensed feature under a regular user account.
Contact support with the following information:
- Original version
- Target version
- Error logs
- System configuration
Basic Operations
In case of system issues:
Save logs
docker logs stormbpmn > /tmp/error_logs.txtRestart containers
docker-compose restartCheck status
- Health checks respond
- Metrics are within normal range
- Users can log in
If issues persist - contact support
Related documentation
- System Check - automatic checks for the database, license, mail, S3, Gotenberg, and other services
- Configuration - system configuration
- Production-Ready - deployment for production
- Security - security settings