Setup & Deployment

Using Docker and Kubernetes

While manual deployment is useful for development and debugging, the recommended way to run OpenSCMS is through its unified deployment mechanism based on Docker, Kubernetes, and Skaffold. This approach deploys the complete OpenSCMS ecosystem in a single, coordinated workflow, including all SCMS services, their databases, and supporting infrastructure such as RabbitMQ.

For local development and evaluation, OpenSCMS provides a reference deployment based on Minikube.

Environment Setup Using Minikube

Installing Required Tooling

All required tooling should be installed using binenv, as described earlier. Their versions can be seen in `.binenv.lock` in the repository root. This ensures that consistent and compatible versions of all Kubernetes-related tools are used across different development environments.

binenv install -l

Configuring Minikube

To simplify cluster management, install the krew plugin manager for kubectl:

(
  set -x; cd "$(mktemp -d)" &&
  OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' \
                         -e 's/\(arm\)\(64\)\?.*/\1\2/' \
                         -e 's/aarch64$/arm64/')" &&
  KREW="krew-${OS}_${ARCH}" &&
  curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/latest/download/${KREW}.tar.gz" &&
  tar zxvf "${KREW}.tar.gz" &&
  ./"${KREW}" install krew
)
echo 'export PATH="$HOME/.krew/bin:$PATH"' >> $HOME/.bashrc
exec $SHELL

Verify the installation:

kubectl krew --help

Finally, install the RabbitMQ plugin to simplify inspection and configuration of the message broker:

kubectl krew install rabbitmq

Starting Minikube and Deploying OpenSCMS

Starting Minikube

Start Minikube with:

minikube start

The first startup may take several minutes as container images are downloaded.

Test Deployment

Once Minikube is running, perform a test deployment of OpenSCMS from the repository root:

scripts/run_test_scms_manager.sh # to generate the certificates
skaffold run && skaffold delete

This command deploys the full SCMS stack and then immediately tears it down, verifying that all components can be built and scheduled correctly.

After the deployment completes, verify that the RabbitMQ components were installed successfully:

kubectl get ns

A namespace named rabbitmq-system should be present.

Accessing Services via Minikube

Minikube exposes services using an IP address that can be obtained with:

minikube ip

For convenience, this IP address can be mapped to a hostname by adding an entry to /etc/hosts:

sudo echo "$(minikube ip) minikube" >> /etc/hosts
ping minikube

This allows services to be accessed using a stable hostname during development and testing.