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:
kubectlandhelmCLI 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
- Register an app in DIAL Core — detailed options for registration including roles and features
- Getting started with DIAL SDK — build your first Custom App from scratch
- Applications configuration — full reference for all application attributes
- Deploy Custom Apps to a cluster — run a Custom App as a Kubernetes service beside Core