Skip to main content

Deploy a Custom App

This guide covers two deployment paths for your Custom App: Docker Compose for local development and Helm for Kubernetes production environments. You should already have a working Custom App with a Dockerfile.

Goal​

Package and deploy your Custom App so DIAL Core can route requests to it.

Prerequisites​

  • A Custom App with a working Dockerfile (see Getting started with DIAL SDK)
  • For local deployment: Docker and Docker Compose (V2) installed
  • For Kubernetes deployment: kubectl and helm CLI tools configured for your cluster

Deploy locally with Docker Compose​

Add your app as a service in your docker-compose.yml alongside DIAL Core:

services:
my-app:
build: ./my-app
depends_on:
- core

# ========= DIAL =========
core:
image: epam/ai-dial-core:0.25.1
platform: linux/amd64
environment:
aidial.config.files: '["/opt/config/config.json"]'
aidial.storage.overrides: '{ "jclouds.filesystem.basedir": "data" }'
aidial.redis.singleServerConfig.address: "redis://redis:6379"
aidial.identityProviders.test.rolePath: 'roles'
aidial.identityProviders.test.disableJwtVerification: 'true'
aidial.encryption.secret: 'salt'
aidial.encryption.key: 'password'
ports:
- "8080:8080"
volumes:
- ./core:/opt/config
depends_on:
- redis

themes:
image: epam/ai-dial-chat-themes:0.10.0
platform: linux/amd64

chat:
image: epam/ai-dial-chat:0.26.0
platform: linux/amd64
ports:
- "3000:3000"
depends_on:
- themes
- core
environment:
NEXTAUTH_SECRET: "secret"
THEMES_CONFIG_HOST: "http://themes:8080"
DIAL_API_HOST: "http://core:8080"
DIAL_API_KEY: "dial_api_key"
ENABLED_FEATURES: "conversations-section,prompts-section,top-settings,top-clear-conversation,top-chat-info,top-chat-model-settings,empty-chat-settings,header,footer,request-api-key,report-an-issue,likes,conversations-sharing,input-files,attachments-manager,custom-applications,marketplace"

redis:
image: redis:7.2.4-alpine3.19
command: >
redis-server
--maxmemory 256mb
--maxmemory-policy volatile-lfu
--save ""
--appendonly no

Register the app in your core/config.json using the Docker network hostname:

{
"applications": {
"my-app": {
"endpoint": "http://my-app:5000/openai/deployments/my-app/chat/completions",
"displayName": "My Application"
}
}
}

Start the stack:

docker compose up --build

Verify: Call the application through DIAL Core:

curl http://localhost:8080/openai/deployments/my-app/chat/completions \
-H "Content-Type: application/json" \
-H "api-key: dial_api_key" \
-d '{"messages": [{"role": "user", "content": "hello"}]}'

Deploy to Kubernetes with Helm​

The DIAL Helm chart provides a dial-extension chart for deploying Custom Apps as Kubernetes services.

Step 1: Create a values file​

Create a values.yaml for your application:

image:
repository: your-registry/my-app
tag: "1.0.0"

replicaCount: 1

service:
port: 5000

resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"

env:
- name: LOG_LEVEL
value: "INFO"

Step 2: Install with Helm​

helm install my-app dial/dial-extension \
-f ./values.yaml \
--version <CHART_VERSION> \
-n <NAMESPACE>

Replace:

  • <CHART_VERSION> — the Helm chart version compatible with your DIAL deployment
  • <NAMESPACE> — the Kubernetes namespace where DIAL is running

Verify: Check the pod is running:

kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/name=my-app

Step 3: Register in DIAL Core​

Add the application to DIAL Core's configuration using the Kubernetes service DNS name:

{
"applications": {
"my-app": {
"endpoint": "http://my-app.<NAMESPACE>.svc.cluster.local/openai/deployments/my-app/chat/completions",
"displayName": "My Application",
"description": "Brief description of what the app does"
}
}
}

Redeploy or reload DIAL Core to apply the configuration change.

Verify: Port-forward DIAL Core and test:

kubectl port-forward svc/core 8080:8080 -n <NAMESPACE>
curl http://localhost:8080/openai/deployments/my-app/chat/completions \
-H "Content-Type: application/json" \
-H "api-key: <YOUR_API_KEY>" \
-d '{"messages": [{"role": "user", "content": "hello"}]}'

Result​

Your Custom App is deployed and registered. DIAL Core routes requests to it, and users can interact with it through DIAL Chat or the Unified API.

Further reading​