How to Deploy Semantica to a Production Environment: Complete Platform Guide

Deploying Semantica to production involves provisioning durable graph and vector stores, configuring environment variables like SEMANTICA_SECRET_KEY and SEMANTICA_API_KEY, and applying the appropriate platform manifest (Docker, Kubernetes, Helm, Render, Fly.io, or cloud-native services).

Semantica is a modular, polyglot graph-native platform for building context-aware AI systems. Whether you're running a single-node Docker deployment or scaling to a multi-region Kubernetes cluster, the same core architecture applies: a knowledge-graph engine, decision-intelligence layer, and pluggable vector-store adapters. This guide covers every production deployment pattern available in the semantica-agi/semantica repository.

Production Deployment Patterns Overview

Choose your deployment target based on operational requirements:

Pattern Best For Key Files
Docker Quick self-hosted rollout Dockerfile
Kubernetes / Helm High-availability, scalable clusters deploy/kubernetes/, deploy/helm/
Render Managed SaaS-style hosting deploy/render/render.yaml
Fly.io Low-latency global edge deployment deploy/fly/fly.toml
Google Cloud / Azure Enterprise cloud-native environments Cloud-specific manifests
On-prem / Private cloud Strict data sovereignty Raw Kubernetes manifests

All patterns share the same runtime: the MCP Server (semantica/mcp/server.py) exposes the graph over REST, while semantica/context.py provides the ContextGraph implementation and semantica/vector_store.py handles vector-store abstraction.

Kubernetes Production Deployment

Kubernetes is the recommended path for production workloads requiring scalability and rollout control.

Step 1: Configure Secrets

Create your secrets file from the provided template:

cp deploy/kubernetes/secret.yaml.example deploy/kubernetes/secret.yaml

# Edit secret.yaml to set:

# - SEMANTICA_SECRET_KEY (32+ byte random hex)

# - DATABASE_URL (persistent graph store)

# - VECTOR_STORE_URL (Qdrant, Pinecone, etc.)

The secret.yaml file is intentionally excluded from kustomization.yaml to prevent credential leakage. See deploy/kubernetes/README.md for details.

Step 2: Update Image and Ingress

Modify deploy/kubernetes/kustomization.yaml:

  • Replace the placeholder image digest with semantica/semantica:<version>
  • Set the Ingress host to your public domain (e.g., semantica.mycompany.com)

Step 3: Apply Manifests

kubectl apply -f deploy/kubernetes/secret.yaml
kubectl apply -k deploy/kubernetes
kubectl -n semantica rollout status deployment/knowledge-explorer

Step 4: Verify Deployment

curl -H "X-API-Key: $SEMANTICA_API_KEY" https://semantica.mycompany.com/health
semantica doctor

A passing health check confirms the graph, vector store, and MCP server are reachable.

Helm Deployment for Production Upgrades

For teams preferring declarative Helm management, the chart at deploy/helm/knowledge-explorer supports production values overlays:

helm upgrade --install knowledge-explorer deploy/helm/knowledge-explorer \
  --namespace semantica --create-namespace \
  -f deploy/helm/knowledge-explorer/values.prod.yaml

Reference deploy/helm/README.md for available values.

Managed Platform Deployments

Render Deployment

Render provides automatic API_KEY generation and public URL exposure. Run:

render blueprints validate deploy/render/render.yaml
render blueprint apply deploy/render/render.yaml

Render automatically injects SEMANTICA_API_KEY into your environment. See deploy/render/README.md.

Fly.io Deployment

For edge-aware global deployment with automatic TLS:

flyctl launch --copy-config --config deploy/fly/fly.toml --no-deploy
flyctl deploy --config deploy/fly/fly.toml

Protected routes require the X-API-Key header. Details in deploy/fly/README.md.

Docker Single-Node Production

For self-contained hosting without orchestration:

docker pull semantica/semantica:latest
docker run -d \
  -p 8000:8000 \
  -e SEMANTICA_SECRET_KEY=$(openssl rand -hex 32) \
  -e VECTOR_BACKEND=qdrant \
  -e VECTOR_URL=https://qdrant.mycompany.com \
  semantica/semantica

Configuring Production Data Stores

Production workloads require durable backends. Configure via environment variables:

Graph Stores (LPG/RDF)

  • Neo4j, FalkorDB, Apache AGE, AWS Neptune → GRAPH_BACKEND_URL
  • Blazegraph, Apache Jena, Oxigraph → RDF store endpoints

Vector Stores

  • Qdrant, Pinecone, Weaviate, Milvus, PgVector → QDRANT_URL, PINECONE_API_KEY, etc.

Update these before starting the service—data written to in-memory backends will not persist across restarts.

Monitoring and Observability

Semantica emits structured logs to stdout for aggregation into Loki, Datadog, or similar systems. For metrics:

  • Scrape the /metrics endpoint with Prometheus
  • Configure alerting on graph store connection failures and vector store latency

Production Code Examples

Connect to Hosted Vector Store

from semantica.context import ContextGraph
from semantica.vector_store import VectorStore

# Production Qdrant instance

vs = VectorStore(
    backend="qdrant",
    url="https://qdrant.mycompany.com",
    api_key=os.getenv("QDRANT_API_KEY")
)
graph = ContextGraph(advanced_analytics=True, vector_store=vs)

# Persisted decision with full provenance

decision_id = graph.record_decision(
    category="risk_assessment",
    scenario="Transaction flagged for review",
    reasoning="Velocity pattern matches known fraud",
    outcome="manual_review",
    confidence=0.87
)

Query Production API from Client Service

import requests

API_URL = "https://semantica.mycompany.com/api"
API_KEY = os.getenv("SEMANTICA_API_KEY")

def audit_decision(decision_id: str) -> dict:
    resp = requests.get(
        f"{API_URL}/decisions/{decision_id}/trace",
        headers={"X-API-Key": API_KEY}
    )
    resp.raise_for_status()
    return resp.json()

audit = audit_decision(decision_id)

Key Production Files Reference

File Purpose
Dockerfile Production container build
deploy/kubernetes/secret.yaml.example Secrets template
deploy/kubernetes/README.md K8s deployment guide
deploy/helm/knowledge-explorer/ Helm chart
deploy/render/render.yaml Render blueprint
deploy/fly/fly.toml Fly.io configuration
semantica/mcp/server.py REST API implementation
semantica/context.py ContextGraph core
semantica/vector_store.py Vector store abstraction

Summary

Deploying Semantica to production follows a consistent pattern across platforms:

  • Provision durable stores for graph and vector data
  • Secure secrets (SEMANTICA_SECRET_KEY, SEMANTICA_API_KEY) outside version control
  • Apply platform manifests (Kubernetes, Helm, Docker, Render, or Fly.io)
  • Verify health before accepting traffic
  • Enable monitoring via structured logs and Prometheus metrics

The modular ContextGraph and VectorStore abstractions in semantica/context.py and semantica/vector_store.py ensure backend swaps require no code changes.

Frequently Asked Questions

What environment variables are required for semantica production deployment?

Minimum required variables are SEMANTICA_SECRET_KEY (32+ byte random hex for session/cookie signing) and SEMANTICA_API_KEY (for API authentication). Additionally, configure backend-specific variables: DATABASE_URL or GRAPH_BACKEND_URL for the graph store, and QDRANT_URL, PINECONE_API_KEY, or equivalent for your chosen vector store.

Can semantica run without Kubernetes?

Yes. Docker supports single-node production deployments. Render and Fly.io provide managed alternatives with minimal configuration. The same container image (semantica/semantica) powers all deployment patterns, and the MCP server (semantica/mcp/server.py) functions identically regardless of orchestration layer.

How do I migrate between vector stores in production?

Use the VectorStore abstraction in semantica/vector_store.py. Instantiate the source and target backends, export embeddings via the store's native tools, then update VECTOR_BACKEND and VECTOR_URL environment variables. No application code changes are required because ContextGraph accepts any VectorStore implementation.

Is there a health check endpoint for load balancer configuration?

Yes. The MCP server exposes /health which validates connectivity to the graph store, vector store, and internal services. Configure your load balancer or ingress to hit this endpoint—successful responses indicate the deployment is ready for traffic.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →