S3 - Viewer + Analysis, Single Machine (Podman)

Install CAST Imaging with Viewer and Analysis capability on a single machine using Podman

Overview

This guide covers installing CAST Imaging with Viewer and Analysis capability on a single machine using Podman. Users can run analysis and browse results through the Viewer interface.

What is installed:

Component Description
imaging-services Front-end services: gateway, console, auth, SSO, control panel
imaging-viewer Results viewer: ETL, APIs, AI service, Neo4j, server
analysis-node Analysis engine (includes CAST Imaging Core ≥ 8.4 as a Docker image)

When to use: Environments that require analysis and result viewing but do not need CAST Dashboards.


Requirements

Read and understand the following before starting:


Before you start

  1. Air-gapped / offline environments: If your target machine does not have internet access, you must pre-download all required Docker images on an internet-connected machine and transfer them before running the installer. See the Air-gapped installation section below.

  2. Extend Local Server: If your environment does not permit access to CAST Extendexternal link over the internet, you will need to install the Extend Local Server separately before completing this guide.


Step 1 - Download the installation media

Download the installer using curl:

$ curl -# -O -J "https://extend.castsoftware.com/api/package/download/com.castsoftware.imaging.all.docker/<version>?platform=linux_x64" \
  -H "x-nuget-apikey: <api-key>" \
  -H "accept: application/octet-stream"

Where:

Example for latest release:

$ curl -# -O -J "https://extend.castsoftware.com/api/package/download/com.castsoftware.imaging.all.docker/latest?platform=linux_x64" \
  -H "x-nuget-apikey: a9999a9a-c999-999d-999b" \
  -H "accept: application/octet-stream"

Unzip the resulting ZIP file anywhere on your local disk. The following files and folders will be created:

  • cast-imaging-dashboards/ (folder)
  • cast-imaging-node/ (folder)
  • cast-imaging-services/ (folder)
  • cast-imaging-viewer/ (folder)
  • tools/ (folder)
  • cast-imaging-install.sh
  • cast-imaging-install-podman.sh
  • cast-imaging-update.sh
  • configuration.conf

Air-gapped installation

If the target machine(s) has no internet access, pull and export all required images on an internet-connected machine, then transfer and load them on the target machine(s) before running the installer.

On an internet-connected machine - pull and export each image:

$ docker pull <image>:<version>
$ docker save <image>:<version> -o <filename>.tar

Transfer all .tar archives to the target machine (secure copy or removable media).

On the target machine - load each image:

$ docker load -i <filename>.tar

Verify all images are available:

$ docker image ls

Required images:

Component Image Pull & export Load
Gateway (imaging-services) castimaging/gateway docker pull castimaging/gateway:<ver> · docker save castimaging/gateway:<ver> -o gateway.tar docker load -i gateway.tar
Control Panel (imaging-services) castimaging/admin-center docker pull castimaging/admin-center:<ver> · docker save castimaging/admin-center:<ver> -o admin-center.tar docker load -i admin-center.tar
SSO Service (imaging-services) castimaging/sso-service docker pull castimaging/sso-service:<ver> · docker save castimaging/sso-service:<ver> -o sso-service.tar docker load -i sso-service.tar
Auth Service (imaging-services) castimaging/auth-service docker pull castimaging/auth-service:<ver> · docker save castimaging/auth-service:<ver> -o auth-service.tar docker load -i auth-service.tar
Console (imaging-services) castimaging/console docker pull castimaging/console:<ver> · docker save castimaging/console:<ver> -o console.tar docker load -i console.tar
Dashboards (dashboards) castimaging/dashboards-v3 docker pull castimaging/dashboards-v3:<ver> · docker save castimaging/dashboards-v3:<ver> -o dashboards-v3.tar docker load -i dashboards-v3.tar
Analysis node (analysis-node) castimaging/analysis-node docker pull castimaging/analysis-node:<ver> · docker save castimaging/analysis-node:<ver> -o analysis-node.tar docker load -i analysis-node.tar
ETL Service (imaging-viewer) castimaging/etl-service docker pull castimaging/etl-service:<ver> · docker save castimaging/etl-service:<ver> -o etl-service.tar docker load -i etl-service.tar
AI Service (imaging-viewer) castimaging/ai-service docker pull castimaging/ai-service:<ver> · docker save castimaging/ai-service:<ver> -o ai-service.tar docker load -i ai-service.tar
APIs Service (imaging-viewer) castimaging/imaging-apis docker pull castimaging/imaging-apis:<ver> · docker save castimaging/imaging-apis:<ver> -o imaging-apis.tar docker load -i imaging-apis.tar
Viewer Server (imaging-viewer) castimaging/viewer docker pull castimaging/viewer:<ver> · docker save castimaging/viewer:<ver> -o viewer.tar docker load -i viewer.tar
Neo4j (imaging-viewer) castimaging/neo4j docker pull castimaging/neo4j:<ver> · docker save castimaging/neo4j:<ver> -o neo4j.tar docker load -i neo4j.tar
PostgreSQL (required for 3.0.x-funcrel - 3.5.x-funcrel, for 3.6.0-funcrel or later, required only when DB_MODE=embedded) postgres:15 docker pull postgres:15 · docker save postgres:15 -o postgres15.tar docker load -i postgres15.tar
curl (≥ 3.6.0-funcrel: for 3.6.0-funcrel use curl 8.7.1; for 3.6.1-funcrel or later use 8.19.0.) curlimages/curl docker pull curlimages/curl:<ver> · docker save curlimages/curl:<ver> -o curl.tar docker load -i curl.tar
psql (required in ≥ 3.6.0-funcrel when using a custom/external PostgreSQL instance - DB_MODE=external) alpine/psql docker pull alpine/psql:latest

docker save alpine/psql:latest -o psql.tar
docker load -i psql.tar
CAST Extend Local Server castimaging/extend-proxy docker pull castimaging/extend-proxy

docker save castimaging/extend-proxy -o extend-proxy.tar
docker load -i extend-proxy.tar

After loading all images, open configuration.conf in a text editor and set:

OFFLINE_MODE=true

Step 2 - Configure the installation

Locate the configuration.conf file at the root of the unzipped files and open it in a text editor (nano or vi). See Installation variables for a full reference of all variables.

General rules:

  • Use forward slashes for all paths
  • Do not use localhost, 127.0.0.1, or simple hostnames for _HOSTNAME variables
  • CAST recommends leaving port numbers at default values where possible

Note in particular:

xxx_HOSTNAME variables

Locate the following variables in the configuration.conf file (they determine the hostname for each CAST Imaging component you are installing):

  • IMAGING_SERVICES_HOSTNAME
  • IMAGING_NODE_HOSTNAME
  • IMAGING_VIEWER_HOSTNAME

For each variable, configure the current machine’s FQDN (fully qualified domain name) or static IP address (use hostname -f (FQDN) or hostname -I (IP address) to determine this).

DB_MODE

Available in ≥ 3.6.0-funcrel

Use DB_MODE (on the machine running imaging-services for multi-machine mode) to control whether the embedded PostgreSQL Docker container is used or an external PostgreSQL instance:

  • DB_MODE=embedded (default) - deploys a postgres container as part of the installation
  • DB_MODE=external - uses an existing external PostgreSQL instance (configure the relevant DB_* variables)

See Installation variables and Database requirements for details.

Neo4j memory settings (optional)

Available in ≥ 3.5.4-funcrel

If you need to reduce Neo4j memory usage before installation (e.g. for a test deployment), edit the cast-imaging-viewer/.env file (on the imaging-viewer machine) and modify:

NEO4J_server_memory_heap_initial__size=<size>
NEO4J_server_memory_heap_max__size=<size>
NEO4J_dbms_memory_transaction_total_max=<size>

Default values are 12 GB each. See Customizing Neo4j for details.

Domain mapping (optional)

Available in ≥ 3.5.0-funcrel

To isolate imaging-viewer results per domain in dedicated Neo4j databases, you can enable the domain/tenant mapping feature. CAST strongly recommends enabling this now, before any applications are onboarded - enabling it later in an existing installation causes irreversible loss of customizations (tags, saved views, post-it notes, custom objects).

Update the following variable in configuration.conf (on the imaging-services machine for multi-machine deployments):

IMAGING_DOMAIN_SYNCHRO_ENABLED=true

See Domain/tenant mapping feature for full details and prerequisites.

Firewall

For single-machine deployments, open only port 8090 (TCP) inbound if you or your users need to access CAST Imaging from another machine on the network.


Step 3 - Make the install script executable

Ensure the installation script is set to executable:

$ chmod +x cast-imaging-install-podman.sh

Step 4 - Run the installation

Run the following commands (one after the other) from the root of the unzipped files:

$ ./cast-imaging-install-podman.sh imaging-services
$ ./cast-imaging-install-podman.sh imaging-viewer
$ ./cast-imaging-install-podman.sh analysis-node

Step 5 - Verify the installation

Check that all containers are running:

$ docker ps

You should see 12 containers (or 11 if using an external PostgreSQL instance):

Command Expected containers
imaging-services 6
imaging-viewer 5
analysis-node 1

Full list:

Container Port(s) Base OS
postgres 2285 Debian GNU/Linux 12
gateway 8090 Alpine Linux
console 8091 Alpine Linux
auth-service 8092 Alpine Linux
sso-service 8096 Red Hat Enterprise Linux 9
control-panel 2381, 8098 Alpine Linux
neo4j 7473, 7474, 7687 Debian GNU/Linux 13
etl 9001 Debian GNU/Linux 13
open_ai_manager 8082 Alpine Linux
server 9000, 8084, 8083 Alpine Linux
imaging-apis 8070 Debian GNU/Linux 13
analysis-node 8089 Rocky Linux 8

Set permissions on the analysis-node data volume

Run the following command to ensure the root user has access to the persistent volumes shared with the analysis-node container:

$ chown -R 0:0 /opt/cast/shared

Replace /opt/cast/shared with the shared sub-folder of your INSTALL_DIR value if you changed the default.

Data storage

All analysis data is stored under the INSTALL_DIR path (/opt/cast by default).

Database data for the embedded PostgreSQL instance is stored in Docker volume v3-db-data (view with docker volume ls). If you reinstall imaging-services and this volume already exists, it will be reused and existing applications will remain visible.


Step 6 - Initial startup configuration

Browse to:

http://<IMAGING_SERVICES_HOSTNAME>:8090

Log in using the default credentials: admin / admin

Configure the Licensing strategy. Choose one of:

  • Named Application - each onboarded application requires its own dedicated license key
  • Contributing Developers - a global license key based on the number of contributing developers

License key

Configure CAST Extend settings and Proxy settings:

CAST Extend settings

Verify that all components are available:

http://<IMAGING_SERVICES_HOSTNAME>:8090/admin/services

Services


Step 7 - Configure authentication

Out-of-the-box, CAST Imaging uses Local Authentication (admin/admin) managed by Keycloak.

CAST recommends switching to your enterprise authentication system (LDAP or SAML) before onboarding applications. Access the Keycloak UI using the kcadmin account (or the value of KEYCLOAK_LOGIN_ADMIN_USER if customized during installation). See Authentication for full instructions.


Next steps