Cube.dev Setup
Cube.dev universal semantic layer with Cubestore cache engine.
Prerequisites
- Keycloak installed and configured
oauth2ctool available via mise- PostgreSQL or other data source for Cube.dev
Setup
-
Configure environment variables:
# Required for Ingress export CUBE_HOST=cube.your-domain.com # Optional: Customize storage and callback port export CUBE_STORAGE_SIZE=2Gi export CUBE_OIDC_CALLBACK_PORT=9877 -
Create Keycloak client:
just cube::create-keycloak-client -
Install Cube.dev and Cubestore:
just cube::install -
Access Cube Playground:
# Via Ingress (if CUBE_HOST is set) open https://${CUBE_HOST} # Via port-forward (for local development) just cube::port-forward -
Get JWT token for authentication:
just cube::show-token
Authentication Flow
- Run
just cube::get-tokento authenticate with Keycloak via browser - Copy the JWT token to Cube Playground
- Use the token in Playground > Add Security Context > Token tab
Architecture
Frontend App → Keycloak (OIDC) → JWT Token → Cube.dev API
↓
Cubestore Cache
↓
Data Warehouse
Configuration
- Namespace:
cube - Keycloak OIDC Client:
cube-cli(public client) - JWT Verification: Uses Keycloak JWKS endpoint
- Cache: Cubestore cluster with 2 workers
- OAuth2c Callback Port:
9876(customizable viaCUBE_OIDC_CALLBACK_PORT) - Ingress: Automatically enabled when
CUBE_HOSTis set - Persistent Storage:
1GiPVC for schema files and configuration (customizable viaCUBE_STORAGE_SIZE)
Commands
just cube::install- Install Cube.dev and Cubestorejust cube::get-token- Get JWT token via oauth2cjust cube::show-token- Display token for Playgroundjust cube::port-forward- Access Playground (localhost:4000)just cube::status- Check installation statusjust cube::logs- View Cube.dev logsjust cube::test-api- Test API connectionjust cube::uninstall- Remove everything
Data Sources Configuration
Option 1: Playground Setup Wizard (Recommended)
- Access Cube Playground and follow the Setup Wizard
- Select your database type (PostgreSQL, MySQL, BigQuery, etc.)
- Enter connection details
- Test connection and auto-generate schema
Option 2: Environment Variables
Edit cube-values.gomplate.yaml or use kubectl:
kubectl create configmap cube-db-config -n cube \
--from-literal=CUBEJS_DB_TYPE=postgres \
--from-literal=CUBEJS_DB_HOST=your-host \
--from-literal=CUBEJS_DB_NAME=your-database
kubectl create secret generic cube-db-secret -n cube \
--from-literal=CUBEJS_DB_USER=your-user \
--from-literal=CUBEJS_DB_PASS=your-password
Option 3: Multiple Data Sources
Use cube.js configuration file for advanced setups with multiple databases.
Persistent Storage
The PVC stores:
- Schema files: Generated data models from Setup Wizard
- Configuration files:
cube.js, custom settings - Custom schemas: Hand-written data models
- Cache metadata: Query optimization data
Storage is mounted at /cube/conf and persists across pod restarts.
Security Context
JWT tokens are verified using Keycloak's JWKS endpoint. The security context includes:
sub- User IDrealm_access.roles- User rolesemail- User email- Custom claims as configured in Keycloak