Skip to main content

Getting Started

Getting Started

Prerequisites​

You need:

  • A development machine with Docker Engine or Docker Desktop running and Docker Compose v2 installed.
  • Git to clone the repository.
  • Bash, curl, and jq to run the firmware update script and API examples.
  • A browser for Dozzle and the Symphony Portal.
  • Internet access to GitHub Container Registry (ghcr.io) and Docker Hub to pull container images.

No physical ECU, Kubernetes cluster, local Rust toolchain, or local JVM is needed when using the published container images. If an image is unavailable for your host architecture, see Troubleshooting.

Verify the command-line tools:

docker version
docker compose version
git --version
bash --version
curl --version
jq --version

docker version must report a reachable server, not just a client version.

Before You Start​

Use a trusted development host. The stack includes demo credentials and tokens, a Kuksa connection without TLS, and Dozzle with a mounted Docker socket. Do not deploy the configuration unchanged on a public server or production vehicle.

Most published ports are bound to 127.0.0.1, but the CDA and ECU Simulator control ports bind to all host interfaces by default. To keep those diagnostic APIs local, run the following in the same Bash session as the Compose commands:

export CDA_PORT=127.0.0.1:20002
export SIM_CONTROL_PORT=127.0.0.1:8181

The Compose port mappings append the container ports to these values. Keep the same variables set for later Compose commands. Review firewall rules and access controls before sharing any service.

1. Clone the Repository​

git clone https://github.com/eclipse-sdv-blueprints/commercial-sdv-stack.git
cd commercial-sdv-stack

All subsequent shell commands assume this repository root as the working directory unless stated otherwise.

2. Start the Stack​

docker compose up -d
docker compose ps --all

The first start pulls several images and may take longer than subsequent starts. Give the services time to initialize. The MQTT broker and ECU Simulator have health checks; a running container alone does not prove every downstream API is ready.

To inspect startup logs:

docker compose logs --tail=100 mosquitto ecu-sim sovd-cda
docker compose logs --tail=100 symphony-api symphony-agent

3. Verify Access​

ServiceDefault host addressVerification
Dozzlehttp://localhost:8080Container list and live logs are visible
Symphony APIhttp://localhost:8082/v1alpha2/greetingsReturns Hello from Symphony K8s control plane (S8C)
Symphony Portalhttp://localhost:3000Log in as admin with an empty password; inspect Targets
SOVD APIhttp://localhost:20002/vehicle/v15Use the authenticated requests in API Exploration
ECU Simulator control APIhttp://localhost:8181The control server responds
Kuksa Databrokerlocalhost:55555gRPC endpoint, not a browser UI
MQTT brokerlocalhost:1883MQTT endpoint, not a browser UI

You can check the Symphony greeting directly:

curl --fail-with-body http://localhost:8082/v1alpha2/greetings

When using a remote development host or dev container, localhost refers to the machine running Docker. Forward the required ports to your browser's machine. Do not make demo endpoints publicly accessible to work around a forwarding issue.

4. Run the Use Cases​

  • Firmware Update: create a deployment target and watch the ECU Updater process it.
  • ECU Configuration: observe the Fleet Management System automatically cycle powertrain modes.

The configuration use case starts with the stack. The firmware use case starts only when you run its script.

5. Stop and Clean Up​

Finish the firmware script by pressing Enter so it deletes its target, then stop the stack:

docker compose down

Compose preserves the named Mosquitto data and log volumes. For a fresh environment, the following command also deletes those volumes and their stored contents:

docker compose down --volumes

Neither command deletes your repository files. The ECU Updater's in-memory deployment state is lost when its container stops.

Next Steps​

Continue with the Firmware Update Walkthrough, or read Troubleshooting if a service did not start.