Skip to content

Deployment and Infrastructure

Deployer

Prodgy uses Docker containers for most services, except for the Assistant (.NET) which runs on a Windows VM.

ServiceDeploy MethodRecommended Platform
APIContainerAzure Container Apps, ECS, Kubernetes
WebContainer or StaticAzure Static Web Apps, S3 + CloudFront, Vercel
ServiceContainerAzure Container Apps, ECS, Kubernetes
StudioContainerAzure Container Apps, ECS, Kubernetes
EngineContainerAzure Container Apps, ECS, Kubernetes
GatewayContainerAzure Container Apps, ECS, Kubernetes
AgenticContainerAzure Container Apps, ECS, Kubernetes
AssistantWindows VMAzure VM, EC2 Windows, bare metal
DocsContainer or StaticAzure Static Web Apps, Vercel, Netlify

Each service has its own Dockerfile:

ServiceFileBase Image
APIapps/api/Dockerfilenode:18-alpine
Webapps/web/Dockerfilenode:18-alpine
Serviceapps/service/Dockerfilenode:18-alpine
Studioapps/studio/Dockerfilenode:18-alpine
Gatewayapps/gateway/Dockerfilenode:18-alpine
Agenticapps/agentic/Dockerfilenode:18-alpine
EngineDockerfile.engine (root)python:3.13-slim
# API
docker build -f apps/api/Dockerfile -t prodgy-api .

# Web
docker build -f apps/web/Dockerfile -t prodgy-web .

# Service
docker build -f apps/service/Dockerfile -t prodgy-service .

# Studio
docker build -f apps/studio/Dockerfile -t prodgy-studio .

# Gateway
docker build -f apps/gateway/Dockerfile -t prodgy-gateway .

# Agentic
docker build -f apps/agentic/Dockerfile -t prodgy-agentic .

# Engine
docker build -f Dockerfile.engine -t prodgy-engine .

The docker-compose.yml at the project root configures auxiliary services for local development:

docker compose up -d

Included services:

  • Redis (port 6379) — queue broker and cache
  • Redis Commander (port 8081) — web interface for monitoring
  • Engine (port 8001) — AI engine

Prodgy uses Azure DevOps Pipelines with automatic change detection:

EnvironmentTriggerBranch
DevelopmentAuto pushmain
StagingAuto pushstaging
ProductionTag v*Git tags

The pipeline checks which services were changed and only builds/deploys the affected ones:

Change inAffected Services
apps/api/API only
apps/web/Web only
apps/service/Service only
apps/studio/Studio only
apps/gateway/Gateway only
apps/agentic/Agentic only
apps/engine/ or Dockerfile.engineEngine only
apps/assistant/Assistant only
packages/, pnpm-lock.yaml, turbo.jsonAll Node.js services

Each environment requires a Variable Group in Azure DevOps with:

azureServiceConnection         # Azure RM connection
resourceGroup                  # Resource Group
containerRegistry              # Container Registry name
registryLoginServer            # Registry URL
apiContainerAppName            # API Container App
serviceContainerAppName        # Service Container App
webContainerAppName            # Web Container App
studioContainerAppName         # Studio Container App
gatewayContainerAppName        # Gateway Container App
agenticContainerAppName        # Agentic Container App
engineContainerAppName         # Engine Container App
AZURE_STATIC_WEB_APP_API_TOKEN # Static Web App token
VM_IP                          # Windows VM IP (Assistant)
VM_USER                        # VM username
VM_PASSWORD                    # VM password (secret)

The Assistant service requires special deployment on a Windows VM:

  1. The pipeline compiles the .NET project
  2. Generates a compressed artifact
  3. Connects to the VM via WinRM (PowerShell remoting)
  4. Stops the service via NSSM
  5. Replaces files (preserving appsettings.Production.json)
  6. Restarts the service

  • Environment variables configured for the target environment
  • Service tokens generated (unique per environment)
  • PostgreSQL/Supabase database provisioned
  • Redis provisioned and accessible
  • DNS configured for public services
  • SSL certificates issued
  • CORS configured on the API with correct origins
  • Service health checks (API, Engine, Service, Gateway, Agentic)
  • Authentication test (login, JWT, API tokens)
  • Inter-service communication test
  • Verify database connection
  • Verify Redis connection
  • Test Playground (send message to an agent)
  • Check logs for each service