Skip to main content

Installation

This page brings the complete stack up on one machine: voraus.core, the parameter server, the 3D visualization and voraus Robot UI, each as a container.

1. Create the Compose file

Create an empty directory and save the following file in it as docker-compose.yml. It is the reference configuration with every widget enabled. The comments say what to adjust, and Configuration lists the environment variables of voraus-robot-ui.

docker-compose.yml
services:
# CodeMeter runtime. All voraus services are licensed through it. It expects the license server
# on the Docker host; if it runs elsewhere, set CODEMETER_LICENSE_SERVER, for example in a .env file.
codemeter:
hostname: codemeter
image: docker.io/wibusystems/codemeter:9.10
environment:
CM_REMOTE_SERVER: ${CODEMETER_LICENSE_SERVER:-host.docker.internal}
extra_hosts:
- host.docker.internal:host-gateway

# Robot Control and Error Handler.
voraus-core:
image: voraus.jfrog.io/docker/voraus-core:2.27.0
hostname: voraus-core
environment:
CODEMETER_HOST: codemeter
depends_on:
codemeter:
condition: service_healthy

# Stores the poses of the Pose Management widget. Optional: to run without it, remove this
# service and its depends_on entry below, and set PARAMETER_SERVER_ENABLED to "false".
voraus-parameter:
image: voraus.jfrog.io/docker/voraus-parameter:1.0.0
hostname: voraus-parameter
volumes:
- ./data:/data
environment:
CODEMETER_HOST: codemeter
depends_on:
codemeter:
condition: service_healthy

# Renders the robot for the 3D Visualization widget. Optional: to run without it, remove this
# service and its depends_on entry below, and set VORAUS_3D_VISU_ENABLED to "false".
voraus-3d-visu:
image: voraus.jfrog.io/docker/voraus-3d-visu:3.1.3
hostname: voraus-3d-visu
ports:
- 8077:80
environment:
CODEMETER_HOST: codemeter
# Hosts the visualization may load models from. The robot model comes from voraus-core.
V3DVISU_ALLOWED_HOSTS: voraus-core
# Initial camera view.
V3DVISU_CAMERA__POSITION: "[8.5, 6.3, 4.2]"
V3DVISU_ORBITCONTROLS__INITIAL_TARGET: "[0, 0, 0.5]"
# The address under which the browser opens voraus Robot UI.
V3DVISU_POST_MESSAGE_ALLOWED_ORIGINS: '["http://localhost:3001"]'
depends_on:
codemeter:
condition: service_healthy

voraus-robot-ui:
image: voraus.jfrog.io/docker/voraus-robot-ui:1.1.1
# The UI exits when a service it needs is not reachable at startup, see Troubleshooting.
restart: on-failure
ports:
- 3001:80
environment:
CODEMETER_HOST: codemeter
# Robot Control and Error Handler. With ERROR_HANDLER_ENABLED "false", error resets go to
# Robot Control and OPCUA_ERROR_URL is not needed.
OPCUA_URL: opc.tcp://voraus-core:48401/
OPCUA_ERROR_URL: opc.tcp://voraus-core:48404/
ERROR_HANDLER_ENABLED: "true"
# Pose Management, needs the voraus-parameter service.
PARAMETER_SERVER_ENABLED: "true"
PARAMETER_SERVER_URL: http://voraus-parameter:80
# 3D Visualization, needs the voraus-3d-visu service. Without it, the three URLs below are
# not needed. VORAUS_3D_VISU_SYNC_ENABLED "false" keeps the widget but stops voraus Robot UI
# from adding the robot, the jogging arrows and the pose previews to the scene.
VORAUS_3D_VISU_ENABLED: "true"
VORAUS_3D_VISU_SYNC_ENABLED: "true"
VORAUS_3D_VISU_BROWSER_URL: http://localhost:8077 # as reachable by the browser
VORAUS_3D_VISU_SYNC_URL: http://voraus-3d-visu:80 # as reachable by this container
VORAUS_CORE_URL: http://voraus-core:80 # robot configuration and model for the visualization
depends_on:
voraus-core:
condition: service_healthy
voraus-parameter:
condition: service_healthy
voraus-3d-visu:
condition: service_healthy
codemeter:
condition: service_healthy

Connecting voraus.core to your robot is configured on the voraus-core service. See the voraus.core documentation for that. The parameter server keeps the poses in ./data next to the Compose file. To back them up, stop the stack and copy that directory.

2. Start the stack and open the user interface

docker compose up -d

The first start pulls the images. voraus Robot UI waits until voraus.core, the parameter server and the visualization report healthy, so it is the last container to come up. Then open http://localhost:3001. If the page shows No Connection, see Troubleshooting. Otherwise continue with the User guide.

Adapting the stack

The dashboard rearranges its panels to the widgets that are enabled.

  • Without the parameter server. Remove the voraus-parameter service and its depends_on entry, and set PARAMETER_SERVER_ENABLED to "false". The Pose Management widget disappears.
  • Without the 3D visualization. Remove the voraus-3d-visu service and its depends_on entry, and set VORAUS_3D_VISU_ENABLED to "false". The 3D Visualization widget disappears. To keep the widget but leave the scene to another application, set VORAUS_3D_VISU_SYNC_ENABLED to "false" instead; voraus Robot UI then adds nothing to the scene.

Access from other computers

Two values in the reference file contain localhost: VORAUS_3D_VISU_BROWSER_URL on voraus-robot-ui and V3DVISU_POST_MESSAGE_ALLOWED_ORIGINS on voraus-3d-visu. That works for a browser on the Docker host only. For other computers, replace localhost in both values with the name or address under which they reach the Docker host. All other URLs are used inside the Docker network and stay as they are.

Behind a reverse proxy

A reverse proxy can serve the user interface and the 3D visualization under one host name, each under its own path prefix, for example http://robot-host.example.com/robot-ui and http://robot-host.example.com/3d-visu. Both services need the same two things from the proxy:

  1. Strip the prefix before forwarding, so the service receives / instead of /robot-ui/.
  2. Send the stripped prefix in the X-Forwarded-Prefix header. voraus Robot UI puts it into the base path of the web application, so the page loads its files and opens its WebSocket under the prefix. The proxy has to pass WebSocket connections through.

Then adjust the two browser-facing values from the previous section. VORAUS_3D_VISU_BROWSER_URL is the public address of the visualization, http://robot-host.example.com/3d-visu. V3DVISU_POST_MESSAGE_ALLOWED_ORIGINS is the origin of the user interface, which has no path, http://robot-host.example.com. With TLS at the proxy, both start with https://. The ports 3001 and 8077 can then be removed from the Compose file. The voraus 3D Visu documentation shows a complete Traefik setup for the visualization; voraus Robot UI takes the same labels with its own prefix.