{"id":45741055,"url":"https://github.com/epam/ai-dial-admin-deployment-manager-backend","last_synced_at":"2026-06-02T17:00:27.534Z","repository":{"id":332806458,"uuid":"1118615766","full_name":"epam/ai-dial-admin-deployment-manager-backend","owner":"epam","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-29T08:07:22.000Z","size":3842,"stargazers_count":4,"open_issues_count":39,"forks_count":1,"subscribers_count":0,"default_branch":"development","last_synced_at":"2026-05-29T08:19:55.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/epam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-18T03:07:36.000Z","updated_at":"2026-05-28T07:54:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/epam/ai-dial-admin-deployment-manager-backend","commit_stats":null,"previous_names":["epam/ai-dial-admin-deployment-manager-backend"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/epam/ai-dial-admin-deployment-manager-backend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-admin-deployment-manager-backend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-admin-deployment-manager-backend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-admin-deployment-manager-backend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-admin-deployment-manager-backend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epam","download_url":"https://codeload.github.com/epam/ai-dial-admin-deployment-manager-backend/tar.gz/refs/heads/development","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fai-dial-admin-deployment-manager-backend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33831629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-25T14:15:02.243Z","updated_at":"2026-06-02T17:00:27.525Z","avatar_url":"https://github.com/epam.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DIAL Deployment Manager Backend\n\n[![Java Version](https://img.shields.io/badge/Java-21-blue.svg)](https://www.oracle.com/java/technologies/javase/jdk21-archive-downloads.html)\n[![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.x-green.svg)](https://spring.io/projects/spring-boot)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n\nBackend service module that extends the [AI DIAL Admin Panel](https://github.com/epam/ai-dial-admin-backend), simplifying and democratizing the building and deployment of AI applications and deployments inside Kubernetes. This service is deployed alongside the main admin app and is used by both the admin backend and frontend (feature-flagged).\n\nThe DIAL Deployment Manager Backend makes complex Kubernetes-based AI deployments accessible without requiring deep Kubernetes expertise. It provides a streamlined interface for managing container image builds, deployments, and lifecycle operations for AI workloads.\n\n**Current Focus:**\n- MCP (Model Context Protocol) servers\n- DIAL interceptors\n- NIM support for simplified inference deployment\n\n**Roadmap:**\n- KServe support for simplified inference deployment\n- Agile network rules management in untrusted clusters\n- DIAL adapters\n- DIAL applications\n\nFor more information about the parent AI DIAL Admin Panel, visit the [ai-dial-admin-backend repository](https://github.com/epam/ai-dial-admin-backend) or [DIAL Documentation](https://docs.dialx.ai/).\n\n## Table of Contents\n\n- [Prerequisites](#prerequisites)\n- [Features](#features)\n- [Configuration](#configuration)\n- [Getting Started](#getting-started)\n- [Deploying NVIDIA NIM Models](#deploying-nvidia-nim-models)\n- [Security](#security)\n- [Spec-Driven Development](#spec-driven-development)\n- [Contributing](#contributing)\n- [License](#license)\n- [Documentation](#documentation)\n\n## Prerequisites\n\n- Java 21 or higher\n- Gradle 7.x or higher\n- Docker and Docker Compose (for containerized deployment)\n- Kubernetes cluster (for production deployments)\n- Database (H2/PostgreSQL/SQL Server) - H2 is sufficient for local development\n\n## Features\n\n- **MCP Deployment Management**: Complete lifecycle management for Model Context Protocol servers\n- **Container Image Building**: Automated image building with [BuildKit](https://github.com/moby/buildkit) in Kubernetes jobs, supporting both root and rootless containers.\n- **Image Definition Management**: Support for multiple image definition types (MCP, DIAL Interceptor) with versioning\n- **Knative-Based Deployments**: Serverless container deployments with auto-scaling and automatic HTTPS endpoints\n- **Real-Time Status Updates**: Server-Sent Events (SSE) for real-time build status and deployment monitoring\n- **Kubernetes Event Streaming**: Real-time event streaming for deployment monitoring and troubleshooting\n- **Disposable Resource Management**: Automatic tracking and cleanup of Kubernetes resources with lifecycle state management\n- **Multi-Database Support**: Flexible database options (H2, PostgreSQL, SQL Server) for different deployment scenarios\n- **Multiple Authentication Methods**: Support for JWT and Basic Auth authentication\n- **Identity Providers Support** Integration of different providers (Keycloak, AzureAD and others) for identity management\n- **Health Monitoring**: Comprehensive health checks and metrics endpoints (Prometheus)\n- **Private Registry Support**: Support for private Git repositories and Docker registries in image builds\n- **Environment Variable Management**: Sophisticated handling of environment variables with automatic conversion of sensitive vars to Kubernetes Secrets\n\n## Configuration\n\nComplete list of configuration properties can be found in the [Configuration Documentation](docs/configuration.md).\n\n### Key Configuration Areas\n\n- **Kubernetes Connection**: Configure via config file (`K8S_CONNECT_TYPE=CONFIG_FILE`) or token-based authentication (`K8S_CONNECT_TYPE=TOKEN`)\n- **Docker Registry**: Configure registry URL, protocol, and authentication (`DOCKER_REGISTRY`, `DOCKER_REGISTRY_AUTH`)\n- **Database**: Support for H2, PostgreSQL, and SQL Server via `DATASOURCE_VENDOR` environment variable. H2 is the default but is intended for **development and testing only** — its backup/restore procedures are unreliable, so running it in production is very strongly discouraged; use PostgreSQL or SQL Server instead. See [Datasource Configuration](docs/configuration.md#datasource-configuration).\n- **Security/Authentication**: Configure via `CONFIG_REST_SECURITY_MODE` (none, basic, oidc)\n- **Knative Deployment**: Configure namespaces, timeouts, and scaling parameters\n- **Build Pipeline**: Configure build namespaces, images, and resource limits\n\n### Environment Variables\n\nThe application supports extensive configuration via environment variables. See [Configuration Documentation](docs/configuration.md) for the complete list.\n\n## Getting Started\n\n### Run Application with Gradle\n\nFrom the project's root directory:\n\n```bash\n./gradlew bootRun\n```\n\n### Run with Docker\n\n#### Build Docker Image\n\n```bash\ndocker build -t aidial/ai-dial-admin-deployment-manager-backend:latest .\n```\n\n#### Run Container\n\n```bash\ndocker run -p 8080:8080 aidial/ai-dial-admin-deployment-manager-backend:latest\n```\n\nVerify the installation:\n\n```bash\ncurl -X GET --location \"http://localhost:8080/api/v1/health\"\n```\n\nExpected response:\n```json\n{\n  \"status\": \"UP\"\n}\n```\n\nImport ([Postman](docs/rest-collection/dm_postman_collection.json)) collection to test other requests. \n\n### H2 Database Credentials\n\nFor local development with H2 database, default credentials are provided in the `docker-compose.yml` file. For details on generating new credentials, see the [Development Guide](docs/Development.md#h2-database-credentials).\n\n## Deploying NVIDIA NIM Models\n\nNVIDIA NIM (NVIDIA Inference Microservices) is a technology that provides optimized, containerized AI inference microservices for deploying large language models and other AI workloads. NIM models are pre-optimized containers that enable fast, efficient inference deployment with minimal configuration, leveraging NVIDIA's GPU acceleration and optimization technologies.\n\nThe DIAL Deployment Manager Backend supports deploying NIM models through Kubernetes Custom Resource Definitions (CRDs), allowing you to manage NIM-based inference services alongside other deployment types.\n\n**Legal Notice:** NIM models and the NIM operator are available only with an NVIDIA Enterprise License Key for production use. For evaluation, development, and production deployment of NIM models, you must obtain the appropriate NVIDIA enterprise license and configure the necessary authentication credentials (NGC secrets). Please refer to the [NVIDIA NIM documentation](https://www.nvidia.com/en-us/ai-data-science/products/nim-microservices/) for licensing information, setup instructions, and the latest requirements.\n\n## Documentation\n\nFor detailed developer documentation, including REST API endpoints, development commands, architecture details, and configuration guides, see the [Development Guide](docs/Development.md).\n\n## Architecture Diagram\n\n![Infrastructure Component Diagram](docs/diagramms/infrastructure_component/infrastrucutre-component-diagramm.png)\n\n*[Edit diagram](docs/diagramms/infrastructure_component/infrastrucutre-component-diagramm.drawio) in draw.io*\n\n## Security\n\nFor information about security practices and reporting security issues, please refer to our [SECURITY.md](SECURITY.md) document.\n\n**Security is disabled for default configuration. It's highly not recommended to use default configuration\nfor production environment.**\n\nFor production environment:\n- Set `CONFIG_REST_SECURITY_MODE` environment variable with either `oidc` or `basic` value\n- (optional) Set `MS_SQL_SERVER_OPS` environment variable with `encrypt=true;` value if application is launched with SQL Server.\n\nThe system supports two authentication methods:\n\n1. **Basic Authentication** (Default)\n    - Configure username and password in `application.yml`:\n      ```properties\n      spring.security.user.name=your_username\n      spring.security.user.password=your_password\n      ```\n    - Enable with:\n      ```properties\n      config.rest.security.mode=basic\n      ```\n\n2. **JWT Authentication**\n- Configure Identity Provider settings using environment variables or with the `providers.{provider_name}.*` format.\n  Each provider is configured separately (example for Azure Provider):\n   ```bash\n   # Required properties\n   providers.azure.issuer=your_issuer\n   providers.azure.jwk-set-uri=your_jwk_set_uri\n   providers.azure.audiences=your_audiences\n   \n   # Optional properties\n   providers.azure.aliases=your_aliases  # Azure-specific\n   providers.azure.role-claims=your_role_claims\n   ```\n- Enable with:\n  ```properties\n  config.rest.security.mode=oidc\n  ```\n- Supported providers: azure, keycloak, auth0, okta, cognito\n- See [Configuration Documentation](docs/configuration.md) for complete provider configuration details.\n\n### Keycloak\n\nKeycloak can be used as a simple IDP replacement for local test/development.\nPlease refer to the [Keycloak setup guide](https://github.com/epam/ai-dial-admin-backend/blob/development/docs/keycloak_configuration.md) for more information.\n\n\n## Spec-Driven Development\n\nThis project uses [spec-kit](https://github.com/github/spec-kit) for spec-driven development. AI agents follow the project constitution and structured specs to ensure every feature aligns with architectural principles.\n\n### Developer Setup\n\nRequires Python 3.11+ and [`uv`](https://docs.astral.sh/uv/).\n\n```bash\nuv tool install specify-cli --from git+https://github.com/github/spec-kit.git\n```\n\n### Workflow\n\n| Command | Purpose |\n|---|---|\n| `/speckit.constitution` | View or amend the project constitution (`.specify/memory/constitution.md`) |\n| `/speckit.specify \u003cdescription\u003e` | Create a new feature spec in `specs/N-name/spec.md` on a new branch |\n| `/speckit.plan` | Generate a technical plan (`plan.md`) from the current spec |\n| `/speckit.tasks` | Break the plan into an implementation checklist (`tasks.md`) |\n| `/speckit.implement` | Execute all tasks in order |\n| `/speckit.clarify` | Ask structured questions to de-risk ambiguous requirements |\n| `/speckit.analyze` | Cross-artifact consistency check before implementation |\n| `/speckit.checklist` | Generate quality checklists for the plan |\n\nFeature specs land in `specs/N-feature-name/`. The constitution is at `.specify/memory/constitution.md`.\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\nFor detailed information on how to contribute, see the full [contributing documentation](https://github.com/epam/ai-dial/blob/main/CONTRIBUTING.md) from the parent project.\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fai-dial-admin-deployment-manager-backend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepam%2Fai-dial-admin-deployment-manager-backend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fai-dial-admin-deployment-manager-backend/lists"}