Upgrading with Docker (3.7 -> 3.7.1)
1. Overview
This guide provides step-by-step instructions for upgrading an existing Syndeia Cloud containerized deployment to version 3.7.1. For fresh installations, see the Docker Deployment Guide.
Supported upgrade paths:
Syndeia Cloud 3.7.x (Docker) → 3.7.1 (Docker)
The upgrade uses the setup.py script with the --from flag pointing to the existing installation. The same script handles fresh installs, upgrades, and rollbacks.
The upgrade process handles:
Secret Preservation: JWT and Play Framework secrets are carried forward from the old installation so active sessions survive the upgrade.
Configuration Migration: Three migration strategies available — Smart Merge (default), Direct Copy, and New Conf (see Section 4).
Data Preservation: Cassandra, Kafka, and JanusGraph data directories are untouched — the new containers connect to the same persistent volumes.
Image Pinning: The new version's image tag is written to
.env, ensuring all services use the correct version.Rollback Support: The old installation directory is never modified. A single command reverts to the previous version.
2. Prerequisites
2.1 Before You Begin
Read the Fresh Installation Guide [here] first if you have not previously worked with the Docker deployment. You need to understand the deliverable file structure,
.envfile, andsetup.py.Schedule downtime for any Production service, announce that downtime, and then bring down the Syndeia Docker Compose services gracefully
cd /opt/icx/syndeia-cloud-3.7-docker sudo docker compose downBack up your data. While the upgrade preserves all databases, making a backup is your insurance. Don’t proceed without a backup:
# Back up the deployed directory (location may differ on your site and your last release) sudo tar czf ~/syndeia-backup-$(date +%Y%m%d).tar.gz \ /opt/icx/syndeia-cloud-3.7-docker/ # Back up persistent data (if you bind-mounted your cassandra and kafka data outside of the deployment directory) sudo tar czf ~/syndeia-data-backup-$(date +%Y%m%d).tar.gz \ /var/lib/syndeia-cloud/Retrieve, Recall, Reuse your secrets. The upgrade script automatically uses secrets from the
.envfile in the running Syndeia deployment. If you later overrode those secrets, manually, after deploying Syndeia Cloud with the Intercax scripts, then ensure that you, yourself, have the current values. You will need the proper passwords.Verify disk space. The new distribution requires approximately 35 GB: 5 GB for the installation directory and 30 GB for its container images:
df -h /opt /var/lib # do not attempt an upgrade with inadequate disk space.Install pyhocon. Smart Merge (the default config migration mode) requires the
pyhoconPython library. Without it, the script falls back to Direct Copy mode automatically:sudo pip3 install pyhocon # you may tolerate the warning about running pip3 as root: this is needed because it will root that will be running pyhocon
2.2 Software Deliverables
Download the following to a local workstation from the Intercax secure file share (according to locations provided in your license Jira ticket and email):
syndeia-cloud-docker-3.7.1.zip(A containerized deployment deliverable)
3. Upgrade Procedure
Stage 1: Preparation
Step 1: Transfer Files
Transfer the new deliverable to the target Syndeia server:
From a Linux/macOS workstation:
scp syndeia-cloud-docker-3.7.1.zip <user>@<server-ip>:~/From a Windows workstation, use WinSCP, FileZilla, or a similar SFTP client.
Step 2: Extract the New Deliverable
Log into the target server and navigate to the directory to which you transferred the deliverable.
ssh <user>@<server-ip> # Navigate to the directory containing the deliverable cd /home/userUnzip the docker deployment deliverable and cd into the extracted folder
# Unzip the deliverable and cd unzip syndeia-cloud-3.7.1-docker.zip -d syndeia-cloud-3.7.1-docker cd syndeia-cloud-3.7.1-docker
Your current deployment (e.g., /opt/syndeia-cloud-3.7/) remains untouched.
Stage 2: Pull Images
For security and reliability, you must copy the provided Syndeia Cloud Docker images from Intercax's distribution registry into your local docker repository or your organization's private container registry (e.g., Artifactory, Harbor, AWS ECR, Docker Hub, etc.).
For production deployment, we recommend using an internal or cloud hosted private registry. See https://intercax.atlassian.net/wiki/spaces/IN/pages/5365891073/Security+and+Hardening+Containerized+Post-Deployment+Actions#Security-%26-Hardening.
The provided utility, prepare-images.py, automates this process - first authenticate with the Intercax Docker registry
Step 2: Authenticate with Registry
Log in to the Intercax Registry using the docker login command.
# Login to Intercax registry
# Replace <registry-host> with the Registry Host provided in the intercax-docker-registry-credentials.txt file
docker login <registry-host>Enter the username and password provided in the intercax-docker-registry-credentials.txt file.
If you do not have these credentials, see the Containerized Deployment Guide 3.7.1 Software: Syndeia Cloud (SC) Components section for information on how to obtain these.
Step 3: Pull Container Images
You can pull everything needed all at once, in stages, sequentially, or in parallel. If you are pulling from the Intercax Docker Registry over highspeed links, try this all-at-once, parallel pull. Use the other options here if you need to slow it down or to pull from different registries.
python3 prepare-images.py --source-host c7reg.intercax.com --pull-third-party --parallel 17Assuming that worked well, skip to the verification step.
Verify all images are available:
docker images | grep syndeiaFor air-gapped environments, use the approach described in the Docker Deployment Guide, Section 3b.
Stage 3: Upgrade
For HTTP Systems
You do not make a .env file in new syndeia-cloud-<ver>-docker staging area. The necessary environment variables will be retrieved from the prior deployment that you specify with your “from” argument.
For HTTPS Systems
Because it is easier to resolve SSL certificate configuration on stable platforms, do not attempt to upgrade from a 3.7 (0) Docker deployment that was not using HTTPS directly to a 3.7.1 Docker deployment which is using HTTPS. Administrators find it much easier to first configure a stable system for HTTPS and then migrate the application software (e.g. Syndeia) through a version change while keeping the HTTPS configuration unchanged. Contact Intercax if you find you do want help in making a series of recommended changes in one larger all at once session.
When your prior release has already been configured for HTTPS, its runtime .env file and its config directory holds the properties and files (e.g. the certs) that your new release will use.
The necessary environment variables will be retrieved from the prior deployment that you specify with your “from” argument.
# other vars come before these (in the prior release's .env)
WEB_GATEWAY_PROTOCOL=https
WEB_GATEWAY_HOST=syndeia.example.com
WEB_GATEWAY_PORT=9443
TRUSTSTORE_PASSWORD=changeit
TRUSTSTORE_TYPE=PKCS12
# more variables come after these but you can skip editing those for this purposeOne Small Hand Edit
The following change is needed in the HTTPS.conf file prior to running the automated setup process.
Edit the HTTPS.conf of the prior release and change the path to the docker-mounted keystore file as shown
sudo cp /opt/icx/syndeia-cloud-3.7-docker/config/sc_service_configs/web-gateway/HTTPS.conf /opt/icx/syndeia-cloud-3.7-docker/config/sc_service_configs/web-gateway/HTTPS.conf.bak
sudo vim /opt/icx/syndeia-cloud-3.7-docker/config/sc_service_configs/web-gateway/HTTPS.confplay.server.https.keyStore.path = "/opt/docker/certs/<yourCertFile>.pfx"
#play.server.https.keyStore.path = "/opt/docker/conf/certs/<yourCertFile>.pfx"The path no longer has the “conf” folder but the script was written without that awareness. Deliverables from Intercax after 3.7.1 will have this step removed.
Step 4: Run the Upgrade
Run the setup script with the --from flag pointing to the installation you intend to upgrade:
# the location may vary at your site. This is location is where the Intercax process had you install Syndeia Cloud 3.7 (0) when using Docker
sudo python3 setup.py --from /opt/icx/syndeia-cloud-3.7-dockerAdjust the path to match your existing installation directory.
The script performs the following automatically:
Validates the old installation: Reads
.syndeia-versionand.envfrom the old directory.Recovers secrets: Copies
PLAY_HTTP_SECRET_KEY,JWT_SHARED_SECRET,CASSANDRA_PASSWORD, and other secrets from the old.envto the new.env.Migrates configuration: Applies the selected migration strategy (see Section 4).
Ports artifacts: Copies HTTPS configuration, keystore, and vendor libraries (Teamcenter, DSCR, DSE3) from the old installation.
Generates override file: Creates
docker-compose.override.ymlwith the correct UID/GID mappings for the new version.Updates image version: Sets
SYNDEIA_VERSIONin.envto the new version tag.Stops old containers: Stops containers running from the old installation.
Starts new containers: Starts all services from the new installation in dependency order.
Health checks: Polls all services until they report healthy.
Records upgrade state: Writes
.upgrade-statewith the path to the old installation (used for rollback).
The upgrade typically takes 3–5 minutes.
Step 5. Move to /opt
At this point, your updated Syndeia service is deployed. This next step is to relocate it to clean up your home directory and to make the distribution available for maintenance and upgrades.
# bring the docker compose stack down for routine maintenance
cd ~/syndeia-cloud-3.7.1-docker
# move to the usual /opt/icx folder
sudo mkdir -p /opt/icx
sudo mv ~/syndeia-cloud-3.7.1-docker /opt/icx/
# bring the stack back up (and detach from it)
cd /opt/icx/syndeia-cloud-3.7.1-docker
docker compose up -d
This concludes the installation process. We recommend that you perform the Verification steps at this time. Intercax Support will ask you for the status of the Verification steps when you call to request live assistance.
Additional information on various options follows.
Optional Flags
Flag | Description |
|---|---|
| Config migration strategy: |
| Shows what the upgrade would do without making changes. Useful for reviewing the migration plan. |
| Copies persistent data directories instead of reusing them in place. Use when migrating to a new data directory. |
| Override the data directory path (default: |
| Skips confirmation prompts. |
| Skips post-startup health check polling. |
| Enables detailed logging output. |
4. Configuration Migration
The upgrade script offers three configuration-migration strategies.
Smart Merge is the default and is recommended for typical use.
4.1 Smart Merge (Default)
Smart Merge performs a three-way semantic merge of HOCON configuration files:
Extracts the old version's default configuration from the deliverable's pristine defaults directory (
config/.defaults/).Compares the old defaults against your modified configuration to identify the changes your organization made to tune Syndeia to your purposes.
Applies your customer changes onto the new version's defaults.
This preserves both your customizations and any new configuration options added in 3.7.1.
Requirements: Smart Merge requires the pyhocon Python library. If pyhocon is not installed, the script automatically falls back to Direct Copy for all services with a warning.
# Install pyhocon
sudo pip3 install pyhocon
# Run upgrade with smart merge (default)
sudo python3 setup.py --from /opt/syndeia-cloud-3.7If the merger is unable to parse the configuration for a specific service, it retries with simpler Direct Copy for that service and logs a warning. If you want us to investigate why your organization’s changes to a properties file led to the file being non-parsed, send us a Support ticket with the log files from the attempt.
4.2 Direct Copy
Copies old configuration files to be used as the new ones. Use this if you have heavily customized configs and want to ensure an exact carry-forward. (Please let us know how you are extensively modifying these configuration files; generally they should be simple.)
Trade-off: Direct Copy does not incorporate new default configuration keys added in 3.7.1. Review the .template reference file (see Section 4.4) after the upgrade to check for new options.
sudo python3 setup.py --from /opt/syndeia-cloud-3.7 --config-mode direct-copy4.3 New Conf
Keeps fresh default configurations for all services. Old configs are saved with a version suffix (e.g., application.conf.3.7.prev) for manual review. Use this when you want full control over which settings to carry forward.
sudo python3 setup.py --from /opt/syndeia-cloud-3.7 --config-mode new-conf4.4 Change Reference Files
Regardless of which mode is used, the script saves two reference files alongside each changed configuration:
application.conf.<old_version>.prev— The actual config from your previous installation.application.conf.<new_version>.template— Fresh defaults for the new version.
These give administrators the full context of changes, to review what changed.
To compare your now-effective, migrated config against the defaults of the new release:
diff config/sc_service_configs/auth-impl/application.conf \
config/sc_service_configs/auth-impl/application.conf.3.7.1.templateTo compare your now-effective, migrated config against the configuration of the previous release:
diff config/sc_service_configs/auth-impl/application.conf \
config/sc_service_configs/auth-impl/application.conf.3.7.prev4.5 New Services
Services that exist in 3.7.1 but were not present in the old installation (e.g., codebeamer-impl when upgrading from an earlier version) are excluded from configuration migration. They receive fresh defaults only and require no special handling.
4.6 sc-docker-overrides.conf
The shared configuration file sc-docker-overrides.conf always uses the new version on upgrade, regardless of the migration mode. This file contains service discovery URLs that must match the compose file structure. If it differs from the old version, the old file is saved as sc-docker-overrides.conf.<old_version>.prev.
5. Ported Artifacts
The following artifacts are automatically copied from the old installation to the new one:
HTTPS configuration:
config/sc_service_configs/web-gateway/HTTPS.confandconfig/keystore/directoryVendor libraries:
libs/TC/(Teamcenter client libraries)libs/dscr/(Dassault 3DEXPERIENCE Cloud libraries)libs/dse3/(Dassault 3DEXPERIENCE on-premise libraries)
License file:
license/syndeia.lic(if present in the old installation)
6. Rollback
If the upgrade causes issues, you can revert to the previous version with a single command.
6.1 Automatic Rollback
From the new installation directory:
cd /opt/syndeia-cloud-3.7.1
sudo python3 setup.py --rollbackThis:
Stops all containers running from the new installation.
Reads the old installation path from
.upgrade-state.Starts containers from the old installation directory.
Runs health checks against the old version.
The new installation directory is left intact for investigation.
6.2 Manual Rollback
If the automatic rollback fails, you can manually revert:
# Stop new containers
cd /opt/syndeia-cloud-3.7.1
docker compose down
# Start old containers
cd /opt/syndeia-cloud-3.7
docker compose up -d6.3 Data Considerations
Cassandra: Data is stored in
/var/lib/syndeia-cloud/cassandra/. Both old and new containers mount the same directory. Schema changes in 3.7.1 are additive (CREATE IF NOT EXISTS), so rolling back does not cause schema conflicts.Kafka: Data is stored in
/var/lib/syndeia-cloud/kafka/. Topic data is compatible across minor versions.JanusGraph: Data is stored in
/var/lib/syndeia-cloud/janusgraph/. Graph data is preserved across versions.
7. Verification
After the upgrade completes, run the following checks.
7.1 Check Version
Verify the running version by checking the image tags:
docker compose ps --format "table {{.Name}}\t{{.Image}}\t{{.Status}}"All Syndeia service images should show the 3.7.1 tag.
7.2 Check All Services
docker compose psAll services should show healthy status.
7.3 Check Core Ports
for port in 9000 56110 56120 56180 56135 56132; do
ss -tlnp | grep -q ":${port} " && echo "Port ${port} OK" || echo "Port ${port} MISSING"
done7.4 Verify Secrets Were Preserved
# Compare secrets between old and new .env files
diff <(grep -E 'PLAY_HTTP_SECRET_KEY|JWT_SHARED_SECRET' /opt/syndeia-cloud-3.7/.env) \
<(grep -E 'PLAY_HTTP_SECRET_KEY|JWT_SHARED_SECRET' /opt/syndeia-cloud-3.7.1/.env)The output should be empty (no differences), confirming secrets were carried forward.
7.5 Verify Configuration Migration
Spot-check a service config to confirm your customizations were carried forward:
grep '<your-custom-setting>' config/sc_service_configs/auth-impl/application.conf7.6 Login Test
Command line:
curl -s -X POST 'http://127.0.0.1:9000/signIn' \
-H 'Content-Type: application/json' \
-d '{"username":"super.user","password":"<your-password>","rememberMe":true}' \
| grep -q '"statusCode":201' && echo "Login OK" || echo "Login FAILED"Replace <your-password> with your actual superuser password.
Browser:
Open http://<server-ip>:9000. If the web-gateway listens on 127.0.0.1, use an SSH tunnel:
ssh -L 9000:127.0.0.1:9000 <user>@<server-ip>Then open http://localhost:9000. Log in with your existing credentials. Active sessions from before the upgrade should still be valid (secrets are preserved).
7.7 Check Logs
Review logs for any startup errors:
docker compose logs --tail=20 | grep -i -E 'error|exception|fail'8. Troubleshooting
8.1 Old Installation Not Detected
The --from path must point to a directory containing a valid .env and docker-compose.yml. Verify the path:
ls /opt/syndeia-cloud-3.7/.env /opt/syndeia-cloud-3.7/docker-compose.ymlIf the old installation used a different directory structure, specify the exact path.
8.2 Smart Merge Falls Back to Direct Copy
The script logs a warning indicating which service had a parse error. The fallback is safe — Direct Copy still carries your configs forward. Check the service's config for HOCON syntax issues:
cat config/sc_service_configs/<service>/application.confIf pyhocon is not installed, all services fall back to Direct Copy. Install it for full smart merge support:
pip install pyhocon8.3 Secret Recovery Fails
If the old .env file is missing or corrupted, the upgrade will warn and generate new secrets. This invalidates active sessions. To manually set secrets:
vim /opt/syndeia-cloud-3.7.1/.envSet PLAY_HTTP_SECRET_KEY and JWT_SHARED_SECRET to the values from your backup.
8.4 Service Fails to Start After Upgrade
Check the service log:
docker compose logs <service-name> --tail=100Common causes:
Incompatible configuration: A removed or renamed config key. Compare against the new defaults:
diff config/sc_service_configs/<service>/application.conf \ config/sc_service_configs/<service>/application.conf.3.7.1.templateImage not found: Verify the image was pulled:
docker images | grep <service-name>
8.5 Health Check Timeout
Some services take longer to start on first boot after upgrade (e.g., Cassandra schema migration). Re-run the health check:
docker compose psIf services are still starting, wait and check again. To increase the timeout:
sudo python3 setup.py --from /opt/syndeia-cloud-3.7 --verbose8.6 Rollback Fails
If setup.py --rollback fails, use the manual rollback procedure in Section 6.2. Verify the old compose file is intact:
ls /opt/syndeia-cloud-3.7/docker-compose.yml8.7 Re-running After Failure
The upgrade script is idempotent. Fix the reported issue and re-run:
sudo python3 setup.py --from /opt/syndeia-cloud-3.7No cleanup is needed between attempts.
9. Appendix: What Happens During an Upgrade
This section describes the internal upgrade sequence for reference. No action is required — the script handles all steps automatically.
Pre-flight validation: Checks Python version, Docker/Compose availability,
.envanddocker-compose.ymlpresence in both old and new directories.Old installation detection: Reads
.syndeia-versionfrom the old directory to determine the source version.Secret recovery: Extracts
PLAY_HTTP_SECRET_KEY,JWT_SHARED_SECRET,CASSANDRA_PASSWORD, and other secrets from the old.envfile.Configuration migration: Applies the selected migration strategy (Smart Merge, Direct Copy, or New Conf). Saves reference files (
.prevand.template) for all changed configs.Artifact porting: Copies HTTPS config, keystore, vendor libraries, and license file from the old installation.
Override generation: Creates
docker-compose.override.ymlwithuser:directives matching the system'ssyndeia-cloudUID and appropriate GIDs for infrastructure containers.Image version pinning: Updates
SYNDEIA_VERSIONin.envto the new version tag.Shared config regeneration: Regenerates
sc-docker-overrides.confwith service discovery URLs for the new compose structure.Container stop: Stops all containers from the old installation (
docker compose downin the old directory).Container start: Starts infrastructure containers, waits for health checks, then starts application services in dependency order.
Health checks: Polls
docker compose psuntil all services report healthy or timeout.State recording: Writes
.upgrade-statewith the old installation path for rollback support.