Skip to content

Harbor Container Registry

AKKO ships 14 custom Docker images. Harbor provides a private registry at harbor.<domain> for distributing them to clients and deployment targets.

Architecture

graph LR
    Dev[Developer] -->|docker build| Local[Local Images]
    Local -->|docker push| Harbor[harbor.akko-ai.com]
    Harbor -->|docker pull| K8s[k3s / EKS / GKE]
    Harbor -->|docker pull| Client[Client Cluster]

Access

URL Credentials Usage
https://harbor.<domain>/ Web UI (basic auth) Browse images, tags, digests
https://harbor.<domain>/v2/ Docker API (basic auth) docker pull/push

Default demo credentials

User Password Scope
akko-client AkkoDemo2026! Read-only (client demos)
admin AkkoAdmin2026! Read-write (push images)

Production: replace these with strong passwords via infrastructure/harbor/htpasswd.

Images (14)

Image Tag Description
akko-cockpit 2026.04 Portal UI (nginx)
akko-aden 2026.04 NL→SQL engine (FastAPI)
akko-ai-service 2026.04 AI gateway (FastAPI)
akko-trino 2026.04 Trino + 17 AI functions plugin
akko-spark 2026.04 Spark + Iceberg + PostgreSQL JDBC
akko-notebook 2026.04 JupyterHub user image (Python/R/Julia/Scala)
akko-postgres 2026.04 PostgreSQL + PostGIS + pgvector
akko-mlflow 2026.04 MLflow tracking server
akko-airflow 2026.04 Airflow + trino/mlflow/boto3
akko-dbt 2026.04 dbt Core + dbt-trino
akko-docs 2026.04 MkDocs Material site
akko-streamlit 2026.04 ADEN dashboard runtime
akko-mcp-trino 2026.04 MCP Server Trino
akko-mcp-openmetadata 2026.04 MCP Server OpenMetadata

Workflow: Build → Push → Deploy

1. Build all images

bash helm/scripts/build-images.sh

2. Push to Harbor

# Login
docker login harbor.akko-ai.com -u admin -p 'AkkoAdmin2026!'

# Tag + push all
for img in akko-cockpit:2026.04 akko-aden:2026.04 akko-trino:2026.04 \
           akko-spark:2026.04 akko-notebook:2026.04 akko-postgres:2026.04 \
           akko-mlflow:2026.04 akko-airflow:2026.04 akko-dbt:2026.04 \
           akko-docs:2026.04 akko-streamlit:2026.04 akko-ai-service:2026.04 \
           akko-mcp-trino:2026.04 akko-mcp-openmetadata:2026.04; do
  docker tag $img harbor.akko-ai.com/$img
  docker push harbor.akko-ai.com/$img
done

3. Deploy from Harbor

# Generate domain values
bash helm/scripts/generate-domain-values.sh <your-domain>

# Install with Harbor registry
helm install akko helm/akko/ -n akko --create-namespace \
  --set global.image.registry=harbor.akko-ai.com \
  -f helm/examples/values-dev.yaml \
  -f helm/examples/values-domain.yaml \
  -f helm/examples/values-dev-secrets.yaml \
  --set-file akko-keycloak.realm.data=helm/examples/realm-domain.json

4. Client pull (demo)

docker login harbor.akko-ai.com -u akko-client -p 'AkkoDemo2026!'
docker pull harbor.akko-ai.com/akko-cockpit:2026.04

Infrastructure

Harbor runs as Docker containers on the same server as AKKO:

  • infrastructure/harbor/docker-compose.yml — registry + UI
  • infrastructure/caddy/Caddyfile — TLS + basic auth reverse proxy

Troubleshooting

Issue Fix
unauthorized on push docker login harbor.akko-ai.com -u admin
Mixed content in UI Ensure REGISTRY_URL is unset, only NGINX_PROXY_PASS_URL
502 on harbor subdomain Check Caddy logs + registry container running
Image not found after push Check tag matches: docker images \| grep akko