Follow these steps in order.
This guide covers Cisco (docker-compose-cisco.yml / install-cisco.sh) and EFCX (docker-compose-efcx.yml / install-efcx.sh). Optional steps call out where Cisco and EFCX differ. Operations Dashboard department scoping and Informix CRA enrichment apply to Cisco UCCE / UCCX only (not EFCX).
Before you start
-
You have SSH/login access to the VRS server
-
You know your database type: PostgreSQL 14+ or SQL Server (Cisco database
vrs), or Media Serverfusionpbxaccess (EFCX) -
You know the database host, username, and password (ask DBA if needed)
-
You have already completed the 14.10.0 → 14.11.0 upgrade (including Keycloak
evaluatetagand supervisor/Departmentssetup if you use those features)
Step 1 — Backup your settings and database
Save a copy of your current settings file so nothing is lost:
cp recording-solution/docker/config.env ~/config.env.backup
Check the backup exists:
ls -l ~/config.env.backup
Also back up the VRS metadata database before you change files or run schema scripts.
Cisco — PostgreSQL example (database vrs only — not keycloak_vrs):
pg_dump -h <db_host> -U <db_user> -d vrs -F c -f ~/vrs-14.11-backup.dump
Cisco — SQL Server example (adjust path/name as your DBA requires):
sqlcmd -S <db_host> -U <db_user> -P <db_password> -Q "BACKUP DATABASE [vrs] TO DISK = N'C:\\Backup\\vrs-14.11.bak' WITH INIT"
EFCX — PostgreSQL on the Media Server (database fusionpbx):
pg_dump -h 127.0.0.1 -U fusionpbx -d fusionpbx -F c -f ~/fusionpbx-14.11-backup.dump
Step 2 — Stop VRS
Cisco:
cd ~
cd recording-solution
docker compose --env-file docker/config.env -f docker/docker-compose-cisco.yml down
EFCX:
cd ~
cd recording-solution
docker compose -f docker/docker-compose-efcx.yml down
Wait until this command finishes.
Step 3 — Get the 14.12.0 files
Go to the directory that contains recording-solution (usually your home directory), keep the old folder as a backup, and clone the 14.12.0 branch:
cd ~
mv recording-solution recording-solution-14.11
git clone -b 14.12.0 https://gitlab.expertflow.com/voice-recording-solution/recording-solution.git
Check that you are on the 14.12.0 branch:
cd recording-solution
git branch --show-current
cd ..
It should print 14.12.0.
Put your settings back:
cp ~/config.env.backup recording-solution/docker/config.env
If you use your own SSL certificates, copy them from the old folder:
cp recording-solution-14.11/config/certificates/server.crt recording-solution-14.11/config/certificates/server.key recording-solution/config/certificates/
The shipped compose files already use the correct 14.12.0 image tags for this release:
-
front-end, apis, freeswitch-mixer, archival-process →
14.12.0 -
jtapi-connector (Cisco) → remains
14.11.0in the 14.12.0 compose (no JTAPI image bump in this release)
You do not need to edit image tags manually. If you changed the old compose file (for example, uncommented archival-process or consul, or changed volume paths), make the same changes in the new file. To see what you changed before:
# Cisco
diff recording-solution-14.11/docker/docker-compose-cisco.yml recording-solution/docker/docker-compose-cisco.yml
# EFCX
diff recording-solution-14.11/docker/docker-compose-efcx.yml recording-solution/docker/docker-compose-efcx.yml
Step 4 — Update the database (Cisco required)
Cisco: Run the 14.12.0 schema script on database vrs. This is required. The script is idempotent (safe to re-run). It adds dual archival columns on archival_setting / session stamps and keeps the 14.11.0 multi-tag / hold_time objects.
Important: Run the script only on database vrs. Do not run it on keycloak_vrs. Do not run the EFCX fusionpbx SQL on Cisco vrs.
Ask your DBA which option you use, then run only one option below.
Option A — PostgreSQL
cd recording-solution
psql -h <db_host> -U <db_user> -d vrs -f data/scripts/postgres.sql
Example:
psql -h 192.168.1.50 -U postgres -d vrs -f data/scripts/postgres.sql
Or in pgAdmin: open database vrs → Query Tool → open file data/scripts/postgres.sql → Run.
Option B — Microsoft SQL Server
cd recording-solution
sqlcmd -S <db_host> -U <db_user> -P <db_password> -d vrs -i data/scripts/sqlserver.sql
Or in SSMS: connect to database vrs → open data/scripts/sqlserver.sql → Execute.
If the script finishes without errors, the Cisco database part is done.
EFCX: Skip this step for vrs. If you use archival, apply the fusionpbx dual archival SQL in Step 8 instead.
Step 5 — Keycloak (supervisors)
No new realm roles are required for 14.12.0.
-
Keep
supervisorassigned to supervisor users. -
Keep supervisors and agents in the same
/Departments/<name>groups. -
Keep service-account
view-users(and typicallyquery-users/query-groups) on thevrsclient — required for Media Recordings and Operations Dashboard department scoping from 14.12.0.
Details: Setup Keycloak for VRS.
Do not change your existing database password, Keycloak secret, or CUCM settings unless your team told you to.
Step 6 — UCCX Informix CRA (optional)
If this is a UCCX deployment and you want wrap-up, CSQ/queue, hold time, and call variables enriched from Informix CRA, set the opt-in mixer variables in docker/config.env:
UCCX_DB_ENGINE=informix
UCCX_INFORMIX_SERVER=<same INFORMIXSERVER as cisco-connector CC_SERVER>
UCCX_DB_HOST=<uccx_cra_host>
UCCX_DB_NAME=<cra_db_name>
UCCX_DB_USER=<user>
UCCX_DB_PASSWORD=<password>
# optional — default 1504 for informix
# UCCX_DB_PORT=1504
Leave these unset / leave UCCX_DB_ENGINE at the sqlserver default for UCCE or when Informix CRA is not used. After changing these values, recreate/restart the mixer (Step 9 starts the stack). Full descriptions: Installation Guide — UCCX Informix CRA enrichment section.
Step 7 — Recording compression (optional)
If you want a compression profile other than the previous ~50% default, set the profile in docker/config.env, then recreate/restart the mixer after Step 9. See Recording Compression — Operator Guide.
Step 8 — Archival storage (optional)
Cisco
Dual archival columns for Cisco are already applied when you run Step 4 on database vrs. If you use archival, keep SFTP or configure S3 / MinIO (S3-compatible; verified with Wasabi) in Archival Configuration after start, then restart archival-process. Ensure archival-process is uncommented in docker-compose-cisco.yml (non-HA). See Archival Service.
EFCX
EFCX dual archival schema is not in the recording-solution skeleton. Before starting the stack (or before restarting archival-process), run the following on the Media Server database fusionpbx.
1. Note the database password:
cat /etc/fusionpbx/config.conf | grep database.0.password
2. Connect (enter the password when prompted; use your DB host if it is not local):
psql -h 127.0.0.1 -p 5432 -U fusionpbx -d fusionpbx
3. Run:
-- EFCX / fusionpbx — dual archival settings + CDR stamps
ALTER TABLE archival_setting
ADD COLUMN IF NOT EXISTS storage_type VARCHAR(20) NOT NULL DEFAULT 'sftp';
ALTER TABLE archival_setting
ADD COLUMN IF NOT EXISTS sftp_server_ip VARCHAR(255),
ADD COLUMN IF NOT EXISTS sftp_username VARCHAR(255),
ADD COLUMN IF NOT EXISTS sftp_password VARCHAR(255),
ADD COLUMN IF NOT EXISTS sftp_folder_path VARCHAR(512),
ADD COLUMN IF NOT EXISTS s3_endpoint VARCHAR(255),
ADD COLUMN IF NOT EXISTS s3_access_key VARCHAR(255),
ADD COLUMN IF NOT EXISTS s3_secret_key VARCHAR(255),
ADD COLUMN IF NOT EXISTS s3_folder_path VARCHAR(512);
UPDATE archival_setting
SET
sftp_server_ip = CASE WHEN COALESCE(storage_type, 'sftp') NOT IN ('s3','minio','wasabi')
THEN external_server_ip ELSE sftp_server_ip END,
sftp_username = CASE WHEN COALESCE(storage_type, 'sftp') NOT IN ('s3','minio','wasabi')
THEN username ELSE sftp_username END,
sftp_password = CASE WHEN COALESCE(storage_type, 'sftp') NOT IN ('s3','minio','wasabi')
THEN password ELSE sftp_password END,
sftp_folder_path = CASE WHEN COALESCE(storage_type, 'sftp') NOT IN ('s3','minio','wasabi')
THEN folder_path ELSE sftp_folder_path END,
s3_endpoint = CASE WHEN COALESCE(storage_type, 'sftp') IN ('s3','minio','wasabi')
THEN external_server_ip ELSE s3_endpoint END,
s3_access_key = CASE WHEN COALESCE(storage_type, 'sftp') IN ('s3','minio','wasabi')
THEN username ELSE s3_access_key END,
s3_secret_key = CASE WHEN COALESCE(storage_type, 'sftp') IN ('s3','minio','wasabi')
THEN password ELSE s3_secret_key END,
s3_folder_path = CASE WHEN COALESCE(storage_type, 'sftp') IN ('s3','minio','wasabi')
THEN folder_path ELSE s3_folder_path END
WHERE sftp_server_ip IS NULL
OR sftp_folder_path IS NULL
OR (storage_type IN ('s3','minio','wasabi') AND s3_endpoint IS NULL);
ALTER TABLE v_xml_cdr
ADD COLUMN IF NOT EXISTS archive_storage VARCHAR(16) NULL;
ALTER TABLE v_xml_cdr
ADD COLUMN IF NOT EXISTS archive_path VARCHAR NULL;
Then configure SFTP or S3-compatible settings for the EFCX archival process and ensure archival-process is uncommented in docker-compose-efcx.yml. See also Archival Process Configuration for EFCX.
Step 9 — Start VRS again
Cisco:
cd recording-solution
chmod 755 install-cisco.sh
./install-cisco.sh
docker ps
EFCX:
cd recording-solution
chmod 755 install-efcx.sh
./install-efcx.sh
docker ps
Wait until install finishes. In docker ps you should see containers such as:
-
frontend
-
backend
-
mixer (Cisco)
-
keycloak (Cisco)
-
jtapi-connector (Cisco)
-
archival-process (if enabled)
Step 10 — Open VRS in the browser
Cisco: open https://<your-server-IP>/#/login (example: https://192.168.1.187/#/login).
EFCX: use your FQDN / port 444 URL from the Installation Guide mapping steps.
Login with your usual VRS user, then confirm:
-
As a supervisor, open Operations Dashboard and confirm metrics match only your department agents (not the full tenant) — Cisco only
-
For UCCX with Informix enabled, place a test call and confirm wrap-up / queue / hold / call variables after the usual sync delay
-
If you changed compression, place a new test call and confirm size/quality
-
If you configured archival, confirm the next archival run uploads to the selected destination and that play/download still work
What this upgrade gives you
-
Operations Dashboard scoped to supervisor departments (Cisco)
-
UCCX Informix CRA enrichment when enabled; formal UCCX testing
-
Configurable recording compression (~50% / ~75% PCM, or ~90% GSM)
-
Archival to SFTP or S3-compatible cloud (S3 / MinIO / Wasabi)
-
EFCX: manual
fusionpbxdual-archival schema (Cisco uses skeleton SQL onvrs)
Rollback
If you must return to 14.11.0 after starting this upgrade:
-
Stop VRS (
docker compose ... downas in Step 2). -
Restore the database backup taken in Step 1 (ask your DBA for
pg_restore/ SQL Server restore /fusionpbxrestore). -
Point the deployment back to the previous files: for example remove or rename the 14.12.0
recording-solutionfolder and restorerecording-solution-14.11(and~/config.env.backupintodocker/config.envif needed). -
Start VRS again with your 14.11.0 install script / compose flow.
After the schema script has run, rolling back without restoring the database backup can leave dual archival columns / stamps incompatible with 14.11.0 expectations. Always restore the DB backup taken before Step 4 (Cisco) or Step 8 (EFCX fusionpbx).
See also: Release Notes.