Skip to main content

Quick Start

Get Optimal Platform running in minutes with these deployment options.

Option A: Local Development (Fastest)

Perfect for demos and development on your laptop.

1. Clone and Setup

git clone https://github.com/optimal-platform/optimal-platform.git
cd optimal-platform

# Verify prerequisites
make doctor

2. Create Kind Cluster

# Create local Kubernetes cluster with ingress
kind create cluster --name optimal-local --config k8s/kind-config.yaml

3. Deploy Platform

# Install dependencies and deploy
make helm-deps
make deploy-local

# Wait for pods to be ready
kubectl get pods -n optimal-system -w

4. Access Services

# Port forward for local access
make port-forward
ServiceURLCredentials
Portalhttp://localhost:3000SSO Login
API Docshttp://localhost:8000/docs-
Grafanahttp://localhost:3001admin/admin
Keycloakhttp://localhost:8080admin/(from values)

Option B: Cloud Deployment (AWS)

1. Configure AWS

# Authenticate
aws configure
# Or: aws sso login --profile your-profile

# Copy configuration
cp infra/terraform/aws/terraform.tfvars.example infra/terraform/aws/terraform.tfvars

Edit terraform.tfvars:

aws_region  = "us-east-1"
environment = "development"
domain_name = "yourdomain.com" # Optional

2. Deploy Infrastructure

cd infra/terraform/aws
terraform init
terraform apply # Takes ~15 minutes

3. Configure kubectl

aws eks update-kubeconfig --name optimal-development --region us-east-1

4. Deploy Platform

cd ../../..
make helm-deps
helm upgrade --install optimal-platform k8s/helm-charts/optimal-platform \
--namespace optimal-system \
--create-namespace \
-f k8s/helm-charts/optimal-platform/values-development.yaml

5. Get Access URL

kubectl get svc -n ingress-nginx ingress-nginx-controller \
-o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

Option C: Cloud Deployment (GCP)

1. Configure GCP

gcloud auth login
gcloud config set project YOUR_PROJECT_ID

cp infra/terraform/gcp/terraform.tfvars.example infra/terraform/gcp/terraform.tfvars

Edit terraform.tfvars:

project_id  = "your-project-id"
region = "us-central1"
environment = "development"

2. Deploy Infrastructure

cd infra/terraform/gcp
terraform init
terraform apply

3. Configure kubectl

gcloud container clusters get-credentials optimal-development --region us-central1

4. Deploy Platform

cd ../../..
make helm-deps
helm upgrade --install optimal-platform k8s/helm-charts/optimal-platform \
--namespace optimal-system \
--create-namespace \
-f k8s/helm-charts/optimal-platform/values-development.yaml

Option D: Airgap Deployment (Outpost)

For disconnected environments. See Outpost Deployment for detailed instructions.

# On connected machine: Create package
outpost package create --config outpost.yaml --output optimal-bundle.tar.gz

# Transfer to airgap environment
# On disconnected machine: Deploy
outpost deploy --bundle optimal-bundle.tar.gz

Verify Deployment

# Check all pods are running
kubectl get pods -n optimal-system

# Check services
kubectl get svc -n optimal-system

# View logs
kubectl logs -n optimal-system -l app=optimal-portal --tail=50

Expected output:

NAME                               READY   STATUS    RESTARTS   AGE
optimal-portal-xxx-xxx 1/1 Running 0 5m
optimal-api-gateway-xxx-xxx 1/1 Running 0 5m
optimal-sbom-service-xxx-xxx 1/1 Running 0 5m
optimal-vuln-service-xxx-xxx 1/1 Running 0 5m

Troubleshooting

Pods not starting?

kubectl describe pod <pod-name> -n optimal-system
kubectl logs <pod-name> -n optimal-system

Can't connect to services?

# Check ingress
kubectl get ingress -n optimal-system

# Port forward directly
kubectl port-forward svc/optimal-portal 3000:80 -n optimal-system

Database connection issues?

# Verify database secret
kubectl get secret optimal-db-credentials -n optimal-system -o yaml

# Test connectivity from pod
kubectl exec -it <api-pod> -n optimal-system -- nc -zv postgresql 5432

Next Steps