Maize MVP (single script)
The maize-mvp repository bundles all components and a setup.sh that deploys them on one host.
1. Configure
git clone https://github.com/datacrop/maize-mvp.git
cd maize-mvp
cp .env.example .env
Edit the root .env:
| Variable | Set to |
|---|---|
HOST_IP | The IP address or hostname browsers and workers use to reach this host. Required. |
DOCKER_BIN_PATH | Path of the docker binary on the host (default /usr/bin/docker). |
WME_SERVICE_TOKEN | Leave blank — generated on first run (shared backend ↔ worker secret). |
CREDENTIALS_ENCRYPTION_KEY | Leave blank — generated on first run (AES-256-GCM key for stored secrets). |
You only need component .env files for manual or distributed deployments; setup.sh writes them from the root .env.
2. Run
chmod +x setup.sh
./setup.sh
Choose:
- Deploy everything — Keycloak, backend, editor, Airflow and a worker.
- Everything except Keycloak — skip starting the bundled Keycloak.
- Worker only — start the worker stack.
With a root .env present, setup.sh synchronizes component settings before the menu. It overwrites Keycloak URLs and the worker's AIRFLOW_IP with values derived from HOST_IP. Editing the component files beforehand does not preserve those external addresses. Use Manual setup for an existing external Keycloak and Adding workers for a worker on another host.
What the script does:
- Checks
dockeranddocker compose. - Validates
HOST_IP(warns if it looks unset) and generatesWME_SERVICE_TOKEN(openssl rand -hex 32) andCREDENTIALS_ENCRYPTION_KEY(openssl rand -base64 32) if missing, saving them in.env. - Creates any missing component
.envfrom its example and synchronizes host addresses, Keycloak URLs, Airflow/Flower/Kafka/Kibana URLs and the shared secrets into them. - Creates the
maize-wme-networkDocker network and runtime folders. - Deploys, in order: Keycloak (waits for it to be healthy), backend (prepares
config/extra-processors.jsonand a placeholder Logstash pipeline, pulls images), editor, Airflow, worker. - Prints the URLs.
3. Access
| Service | URL | Login |
|---|---|---|
| Workflow Editor | http://HOST_IP:5173, or http://HOST_IP with UI_PORT=80 | admin / admin (Keycloak) |
| Keycloak admin | http://HOST_IP:8180/admin | admin / admin |
| Backend API / Swagger | http://HOST_IP:9090/swagger-ui/index.html | Bearer token |
| Airflow | http://HOST_IP:8080 | airflow / airflow |
| Kibana | http://HOST_IP:5601 | elastic / elastic |
| AKHQ | http://HOST_IP:8081 | — |
| Flower | http://HOST_IP:5555 | — |
The MVP ships well-known passwords (Keycloak admin, realm user admin, Airflow, Elastic, MongoDB). Change them before exposing the host to any network you do not fully trust.
4. Initialize
Log in to the editor and run Settings → Initialize Resources once for each user (details). Then import the worker in Warehouse → Workers (Adding workers).
Optional: ship extra processors
Place an extra-processors.json in maize-model-repository/config/ before initialization to add your own processor definitions to every user's catalogue. Format: Model Repository → Predefined processor definitions.
Check and troubleshoot
# Run from the maize-mvp repository root.
docker compose -f Keycloak/docker-compose.yml ps
docker compose -f maize-model-repository/docker-compose.yml ps
docker compose -f maize-workflow-management-editor/docker-compose.yaml ps
docker compose -f maize-processing-engine-airflow/docker-compose.yaml ps
docker compose -f maize-processing-engine-worker/docker-compose.yaml ps
# Choose one component to inspect its logs.
cd maize-model-repository
docker compose logs -f
- Worker Runtime unavailable — backend and worker must share
WME_SERVICE_TOKEN, port 8090 must be reachable and the agent needs/var/run/docker.sock. - Port conflicts — the editor port (5173, or 80 with
UI_PORT=80), 8080, 8180 and 9090 must be free.
Tear down
./teardown.sh # stop and remove containers (same 3-option menu)
./teardown.sh --volumes # also remove volumes
Components are stopped in reverse order and the network removed. The MongoDB volume (maize-model-repository_mongodb_data) is always kept so your catalogue survives.
The MVP does not yet deploy the preview assistant-runtime service. It runs in the backend stack on the dev/ai-feature branch; see Model Repository → assistant-runtime.