14.12.2 14.12.1 14.12.0 14.11.0 14.10.0 14.9.0 14.8.0 14.7 14.6 14.5 14.4 14.3
14.12.2 14.12.1 14.12.0 14.11.0 14.10.0 14.9.0 14.8.0 14.7 14.6 14.5 14.4 14.3

VRS Upgrade Guide from 14.11.0 to 14.12.0

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 Server fusionpbx access (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 evaluatetag and supervisor /Departments setup if you use those features)

Step 1 — Backup your settings and database

Save a copy of your current settings file so nothing is lost:

Bash
cp recording-solution/docker/config.env ~/config.env.backup

Check the backup exists:

Bash
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):

Bash
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):

Bash
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):

Bash
pg_dump -h 127.0.0.1 -U fusionpbx -d fusionpbx -F c -f ~/fusionpbx-14.11-backup.dump

Step 2 — Stop VRS

Cisco:

Bash
cd ~
cd recording-solution
docker compose --env-file docker/config.env -f docker/docker-compose-cisco.yml down

EFCX:

Bash
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:

Bash
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:

Bash
cd recording-solution
git branch --show-current
cd ..

It should print 14.12.0.

Put your settings back:

Bash
cp ~/config.env.backup recording-solution/docker/config.env

If you use your own SSL certificates, copy them from the old folder:

Bash
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.0 in 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:

Bash
# 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

Bash
cd recording-solution
psql -h <db_host> -U <db_user> -d vrs -f data/scripts/postgres.sql

Example:

Bash
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

Bash
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 supervisor assigned to supervisor users.

  • Keep supervisors and agents in the same /Departments/<name> groups.

  • Keep service-account view-users (and typically query-users / query-groups) on the vrs client — 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:

Bash
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:

Bash
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):

Bash
psql -h 127.0.0.1 -p 5432 -U fusionpbx -d fusionpbx

3. Run:

SQL
-- 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:

Bash
cd recording-solution
chmod 755 install-cisco.sh
./install-cisco.sh
docker ps

EFCX:

Bash
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 fusionpbx dual-archival schema (Cisco uses skeleton SQL on vrs)

Rollback

If you must return to 14.11.0 after starting this upgrade:

  1. Stop VRS (docker compose ... down as in Step 2).

  2. Restore the database backup taken in Step 1 (ask your DBA for pg_restore / SQL Server restore / fusionpbx restore).

  3. Point the deployment back to the previous files: for example remove or rename the 14.12.0 recording-solution folder and restore recording-solution-14.11 (and ~/config.env.backup into docker/config.env if needed).

  4. 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.