Upgrade VRS from 14.12.0 to 14.12.1
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.
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 are already on 14.12.0 (or have completed the 14.11.0 → 14.12.0 upgrade)
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.12.0-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.12.0.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.12.0-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.1 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.1 branch:
cd ~
mv recording-solution recording-solution-14.12.0
git clone -b 14.12.1 https://gitlab.expertflow.com/voice-recording-solution/recording-solution.git
Check that you are on the 14.12.1 branch:
cd recording-solution
git branch --show-current
cd ..
It should print 14.12.1.
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.12.0/config/certificates/server.crt recording-solution-14.12.0/config/certificates/server.key recording-solution/config/certificates/
The shipped compose files already use these image tags — you do not need to edit tags manually:
-
front-end →
14.12.1 -
apis →
14.12.1 -
jtapi-connector (Cisco) →
14.12.1 -
archival-process (if used) →
14.12.1 -
freeswitch-mixer (mixed-session) → stays
14.12.0— do not change it to 14.12.1
Mixer: This patch does not ship a new mixer image. Confirm the mixer line still shows freeswitch-mixer:14.12.0 after clone. Do not bump it.
Verify (Cisco example):
grep -E 'apis:|front-end:|jtapi-connector:|archival-process:|freeswitch-mixer:' recording-solution/docker/docker-compose-cisco.yml
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:
# Cisco
diff recording-solution-14.12.0/docker/docker-compose-cisco.yml recording-solution/docker/docker-compose-cisco.yml
# EFCX
diff recording-solution-14.12.0/docker/docker-compose-efcx.yml recording-solution/docker/docker-compose-efcx.yml
Archival (if used): Matching archival-process and apis 14.12.1 builds are required for multi-leg stamped-path playback. Ensure Archive Days / retention_days is at least 2 — settings with retention_days = 1 are skipped. You do not need to re-run the EFCX fusionpbx dual-schema SQL if it was already applied in 14.12.0.
Step 4 — Database indexes (recommended for Cisco)
Cisco: Re-run the recording-solution schema script on database vrs. This is recommended for JTAPI linking and Media Recordings list grouping. The script is idempotent — it adds Mixed_Sessions / call_events lookup indexes if they are missing. There is no change to the correlation_id default.
Important: Run the script only on database vrs. Do not run it on keycloak_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 database part is done.
EFCX: Skip this step — these indexes are for Cisco Mixed_Sessions / call_events on database vrs, not for Media Server fusionpbx.
Step 5 — Keycloak Brute Force Detection (optional)
If you want login lockout after too many wrong passwords, enable Brute Force Detection on the realm used for VRS login and grant the confidential client service account the Admin roles described in Login account lockout (Keycloak Brute Force Detection).
Step 6 — Start VRS again
Cisco:
cd recording-solution
chmod 755 install-cisco.sh
./install-cisco.sh
docker ps
After containers are up, restart jtapi-connector once so the connector picks up the new build:
docker restart jtapi-connector
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) — still on tag
14.12.0 -
keycloak (Cisco)
-
jtapi-connector (Cisco) — tag
14.12.1 -
archival-process (if enabled) — tag
14.12.1
Step 7 — 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:
-
Media Recordings list/search works; on EFCX, Agent Name advanced filter is a dropdown
-
On Cisco, new test calls link (JTAPI / direction present; fewer
correlation_id0orphans) -
If archival is used, Archive Days ≥ 2, and after the next archival run multi-leg play uses the correct archived audio per leg
-
Material Icons render without Google CDN access
-
If Keycloak BFD is configured, a locked account shows
Account is locked. Try again later.
What this upgrade gives you
-
Improved Cisco call linking (JTAPI indexes, retries, recovery)
-
More reliable multi-leg archival playback (per-file stamped paths; Archive Days ≥ 2)
-
EFCX Agent Name dropdown (previously no agent-name dropdown)
-
Local Material Icons (no Google CDN dependency)
-
Clearer on-screen feedback for download and login (including lock messaging when Keycloak BFD is configured)
Rollback
If you must return to 14.12.0 after starting this upgrade:
-
Stop VRS (
docker compose ... downas in Step 2). -
Restore the database backup taken in Step 1 if you ran Step 4 (ask your DBA for
pg_restore/ SQL Server restore). -
Point the deployment back to the previous files: for example remove or rename the 14.12.1
recording-solutionfolder and restorerecording-solution-14.12.0(and~/config.env.backupintodocker/config.envif needed). -
Start VRS again with your 14.12.0 install script / compose flow.
Indexes added in Step 4 are additive. Rolling back images without restoring the DB backup usually still works for 14.12.0, but restoring the Step 1 backup is the safest path if anything looks wrong after the schema run.
See also: Release Notes.