Template System Overview
AI Admin Panel includes a curated catalog of 45 templates for deploying services with a single click. Templates define everything needed to run a service: Docker Compose configuration, environment variables, health checks, resource requirements, and routing rules.
Categories
| Category | Count | Description |
|---|---|---|
| AI Services | 23 | LLM inference, chat interfaces, AI automation |
| Databases | 5 | Relational and NoSQL databases |
| DevTools | 7 | Development, CI/CD, monitoring tools |
| Web Apps | 10 | Content management, collaboration, analytics |
How Templates Work
Each template is a YAML specification stored in the panel's embedded catalog at internal/templates/catalog/{category}/. When you deploy a template, the panel:
- Reads the YAML spec and presents configurable variables in the UI
- Generates a Docker Compose file with your variable values substituted
- Adds Traefik labels for automatic routing and SSL
- Applies resource limits based on the template's minimum requirements
- Starts the container and monitors the health check
Template YAML Structure
name: uptime-kuma
displayName: Uptime Kuma
description: Self-hosted monitoring tool
category: devtools
version: "1"
featured: false
logo: uptime-kuma.svg
compose:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
volumes:
- data:/app/data
restart: unless-stopped
volumes:
data:
variables:
- name: SERVICE_NAME
label: Service Name
type: string
required: true
minResources:
cpu: 0.5
memoryMB: 256
storageMB: 1024
healthcheck:
path: /
port: 3001
interval: 30s
timeout: 10s
expose:
port: 3001
protocol: http
securityProfile: secure
Key Fields
| Field | Description |
|---|---|
compose | Standard Docker Compose spec — the panel generates the final file from this |
variables | User-configurable fields shown in the deploy form |
minResources | Minimum CPU, memory, and storage requirements |
healthcheck | How the panel verifies the service is running |
expose | Which port and protocol Traefik should route to |
securityProfile | Security classification (see below) |
Variables
Templates define variables that users fill in during deployment. Variable types include:
| Type | Description | Example |
|---|---|---|
string | Free-text input | Service name, hostname |
password | Auto-generated or user-provided secret | Database password |
number | Numeric input | Port number, worker count |
select | Dropdown with predefined options | Model size, storage engine |
boolean | Toggle switch | Enable/disable features |
Variables marked required: true must be provided before deployment. Optional variables use their default value if not set.
Security Profiles
Each template declares a security profile that controls container capabilities:
| Profile | Description | Constraints |
|---|---|---|
secure | Default. Runs with minimal privileges. | No host networking, no privileged mode, no extra capabilities |
advanced | Needs specific capabilities (e.g., GPU access). | May request specific Linux capabilities or device access |
raw | Full Docker access (use with caution). | No restrictions — user accepts responsibility |
The panel displays the security profile in the template detail view so administrators can make informed decisions.
Custom Templates
You can add custom templates by deploying via the Compose Deploy method with a raw Docker Compose file. The panel supports magic variables in compose files for dynamic value substitution:
{{SERVICE_NAME}}— the service name{{DOMAIN}}— the auto-assigned subdomain{{PASSWORD}}— auto-generated secure password
For recurring custom deployments, you can save compose configurations as reusable templates through the API.
Template Logos
Each template includes an SVG logo displayed in the catalog. Featured templates appear in a highlighted section at the top of the catalog page with larger logo cards.
Resource Validation
Before deploying, the panel checks that the target server has sufficient resources for the template's minResources requirement. If resources are insufficient, the deploy is blocked with a clear error message showing what is needed versus what is available.