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.