This repository contains the installation and configuration scripts for deploying a complete EUCAIM node infrastructure on Kubernetes.
The installation script (install.py) automates the deployment of:
- Keycloak (authentication/authorization)
- Dataset Service (core data management)
- Dataset Explorer (web frontend)
- Guacamole (remote desktop gateway)
- Harbor (container registry)
- Kubeapps (application management)
- Kubernetes Dashboard
- DSWS Operator (workspace management)
- Traefik (ingress controller)
- cert-manager (SSL certificate management)
- Operating System: Linux (Ubuntu/Debian recommended)
- Kubernetes: Minikube or production Kubernetes cluster
The following tools must be installed before running the installation:
-
Python 3 with dependencies
sudo apt-get install python3 python3-pip python3-yaml
-
Git (version control)
sudo apt-get install git
-
Docker (container runtime)
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
-
Minikube (only for development/single-node setup — skip if using a production Kubernetes cluster)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
-
For production Kubernetes, ensure
kubectlis installed and your kubeconfig is configured to point to the target cluster:# Example: install kubectl curl -LO "https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo install kubectl /usr/local/bin/kubectl # Verify cluster access kubectl cluster-info
-
Helm (Kubernetes package manager)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash -
Node.js / npm (required for orthanc-wrapper on production clusters)
sudo apt-get install nodejs npm
Some repositories must be cloned manually before running the installation:
-
This one
git clone https://github.com/EUCAIM/mini-node.git cd mini-node -
k8s-deploy-node — all Helm charts and Kubernetes manifests
git clone --branch mininode https://github.com/EUCAIM/k8s-deploy-node.git
-
jobman — job manager service (cloned inside k8s-deploy-node)
cd k8s-deploy-node git clone --depth 1 --branch v2.2.6 https://github.com/EUCAIM/jobman.git -
dataset-explorer — web frontend (cloned inside k8s-deploy-node)
git clone https://github.com/EUCAIM/dataset-explorer.git cd ..
-
config.private.yaml - Main configuration file
- Template:
config.yaml - Contains: domain, passwords, database settings, OIDC configuration, etc.
The first time you must create your own private copy from the template
and adjust the values in your copy according to your deployment case using your favorite editor:cp config.yaml config.private.yaml nano config.private.yaml - Template:
-
eucaim-node-realm.private.json - Keycloak realm configuration
- Template:
eucaim-node-realm.json - Contains: client secrets, realm settings, identity providers
You don't need to create this one, it is automatically created by the script the first time with random client secrets and later, when upgrading, it will be read to keep the same secrets.
- Template:
The script supports the deployment on Kubernetes, selected via the --k8s flag:
| Flag | Target | kubectl command used |
|---|---|---|
--k8s |
Production Kubernetes cluster | kubectl |
-
Prepare the environment
- Ensure all required software has been installed (see Required Software above).
- Ensure all required repositories has been downloaded (see Required Repositories above).
- Prepare your private copy of the configuration file (see Required Configuration Files above).
-
Start Minikube with the host data folder mounted
minikube start --mount --mount-string="/home/ubuntu/<host-data-path>:/var/hostpath-provisioner" -
Run the installation
python3 install.py <flavor> # flavor: micro | mini | standard # or explicitly: python3 install.py <flavor> --release minikube
-
Prepare the environment
- Ensure all required software has been installed (see Required Software above).
Ensure
kubectlis configured for the target cluster:kubectl cluster-info - Ensure all required repositories has been downloaded (see Required Repositories above).
- Prepare your private copy of the configuration file (see Required Configuration Files above).
- Ensure all required software has been installed (see Required Software above).
Ensure
-
Run the installation
python3 install.py <flavor> --k8s
Manual steps for production clusters:
- OIDC kube-apiserver: Configure OIDC flags on the API server (see installer output for details)
- Orthanc wrapper: The installer extracts files and runs
npm installlocally using{host_path}/orthanc/orthanc-wrapper/. Ensurenpmis available on the machine. - Bindfs mounts: Set up manually on cluster nodes if datalake symlink resolution is needed
- Ingress: Ensure an ingress controller (nginx) is installed in the cluster
Never commit these files to public repositories:
config.private.yamleucaim-node-realm.private.json- Any files ending in
.private.* - Password files like
guacamole-eucaim-user-creator-password.txt