Template Deployment
Template deployment is the simplest way to deploy a service. Select a template from the catalog, fill in the variables, and the panel handles everything else.
How It Works
Step 1: Select Template
Navigate to Deploy > Template Deploy to open the catalog. Browse by category or search by name. Click a template to see its details, including:
- Description and documentation link
- Minimum resource requirements (CPU, memory, storage)
- Security profile
- Configurable variables
Step 2: Configure Variables
Each template defines a set of variables. Some are required (like SERVICE_NAME), others are optional with sensible defaults. Common variable types:
| Type | Behavior |
|---|---|
string | Free-text input field |
password | Masked input, auto-generated if left blank |
number | Numeric input with validation |
select | Dropdown with predefined options |
boolean | Toggle switch |
The SERVICE_NAME determines the subdomain: a service named my-app will be accessible at https://my-app.panel.example.com.
Step 3: Resource Validation
Before deploying, the panel checks that sufficient resources are available:
- CPU cores >= template
minResources.cpu - Available memory >= template
minResources.memoryMB - Available storage >= template
minResources.storageMB
If resources are insufficient, the deploy is blocked with a message showing what is needed.
Step 4: Compose Generation
The panel generates a Docker Compose file from the template spec:
- Substitutes variable values into the compose definition
- Adds Traefik labels for routing and SSL:
labels:
- "traefik.enable=true"
- "traefik.http.routers.${SERVICE_NAME}.rule=Host(`${SERVICE_NAME}.${PANEL_DOMAIN}`)"
- "traefik.http.routers.${SERVICE_NAME}.tls.certresolver=letsencrypt"
- "traefik.http.services.${SERVICE_NAME}.loadbalancer.server.port=${EXPOSE_PORT}" - Adds resource limits based on plan quotas
- Connects all services to the
aiadminpanelDocker network - Removes any
ports:directives (all traffic routes through Traefik)
Step 5: Container Deployment
The panel executes the deployment:
- Creates the Docker Compose project
- Pulls container images
- Creates volumes for persistent data
- Starts containers
- Monitors health check endpoint
Progress updates stream to the UI in real time via WebSocket.
Step 6: DNS and SSL
If Cloudflare DNS integration is configured:
- Panel creates an A record for
{SERVICE_NAME}.{PANEL_DOMAIN}via Cloudflare API - Traefik detects the new route and provisions an SSL certificate
- Service is accessible via HTTPS within seconds
Without Cloudflare, the wildcard DNS record (*.panel.example.com) handles routing automatically.
Step 7: Health Check
The panel polls the template's health check endpoint until it returns a success response:
healthcheck:
path: /
port: 3001
interval: 30s
timeout: 10s
Once healthy, the service status changes to Running and the deploy is marked as successful.
Post-Deploy
After deployment, you can:
- View logs — real-time container log streaming
- Start/Stop/Restart — lifecycle management
- Monitor resources — CPU, memory, and network usage
- Update variables — reconfigure and redeploy
- Delete — stops containers, removes volumes, cleans up DNS
Troubleshooting
Service stuck in "Deploying" state
Check container logs for startup errors:
docker logs {service-container-name}
Common causes: missing environment variables, port conflicts within the compose file, image pull failures.
Health check failing
Verify the health check endpoint is correct for the service. Some services take longer to initialize (especially database-backed services that run migrations on first start). The panel will retry health checks for up to 5 minutes before marking a deploy as failed.
SSL certificate not issued
Ensure DNS resolves to your server. Check Traefik logs for ACME errors:
docker logs aiadminpanel_traefik | grep -i acme