Full codebase including API server (32 modules + routes), dashboard frontend, DashCA certificate distribution, installer script, and deployment skills.
3.8 KiB
3.8 KiB
Deploy Service Skill
Deploy Docker containers with complete infrastructure integration (DNS, reverse proxy, dashboard).
When to Use This Skill
Activate this skill when the user wants to:
- Deploy a Docker container
- Set up a new service
- Install an application
- Add a service to the dashboard
- Run/start/spin up a container
Workflow
1. Understand Requirements
Parse the user's request to identify:
- Service name (Emby, Jellyfin, Nginx, etc.)
- Port preferences (if specified)
- Subdomain preferences (if specified)
- Volume/storage requirements
2. Deploy Docker Container
Use appropriate Docker image and configuration:
docker run -d \
--name <service-name> \
-p <host-port>:<container-port> \
-v <host-path>:<container-path> \
-e <ENV_VAR>=<value> \
--restart unless-stopped \
<image:tag>
Get the service IP/host:
- If using port mapping → use
localhostor127.0.0.1+ host port - If using bridge network → get container IP with
docker inspect
3. Integrate with Infrastructure
Call the automation API (single call does everything):
curl -X POST http://localhost:3001/api/automation/service/create \
-H "Content-Type: application/json" \
-d '{
"name": "Display Name",
"subdomain": "subdomain",
"ip": "service.ip.address",
"port": "exposed_port",
"ttl": 300,
"token": "ca5f88874d8d8545f387787a7c82a66e39fc61294e38762acd76fc52c2c40d2a",
"zone": "sami",
"createDns": true,
"logo": "/assets/service.png"
}'
This creates:
- ✓ DNS record (subdomain.sami → IP)
- ✓ Caddy reverse proxy config
- ✓ Dashboard entry
4. Verify & Report
- Check container:
docker ps | grep <name> - Test URL:
curl -k https://<subdomain>.sami - Report to user: "Service deployed at https://subdomain.sami"
Common Services
Emby
docker run -d --name emby \
-p 8096:8096 \
-v /path/config:/config \
-v /path/media:/media \
--restart unless-stopped \
emby/embyserver:latest
Then: subdomain=emby, ip=localhost, port=8096
Jellyfin
docker run -d --name jellyfin \
-p 8096:8096 \
-v /path/config:/config \
-v /path/media:/media \
--restart unless-stopped \
jellyfin/jellyfin:latest
Then: subdomain=jellyfin, ip=localhost, port=8096
Portainer
docker run -d --name portainer \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
--restart unless-stopped \
portainer/portainer-ce:latest
Then: subdomain=portainer, ip=localhost, port=9000
Nginx
docker run -d --name nginx \
-p 8080:80 \
-v /path/html:/usr/share/nginx/html \
--restart unless-stopped \
nginx:alpine
Then: subdomain=nginx or web, ip=localhost, port=8080
Uptime Kuma
docker run -d --name uptime-kuma \
-p 3001:3001 \
-v uptime-kuma:/app/data \
--restart unless-stopped \
louislam/uptime-kuma:1
Then: subdomain=uptime, ip=localhost, port=3001
DNS Token
DNS2 Admin Token: ca5f88874d8d8545f387787a7c82a66e39fc61294e38762acd76fc52c2c40d2a
Always use this token in the automation API calls.
Key Points
- Always use automation API - it handles DNS + Caddy + Dashboard in one call
- Port mapping - Host port can differ from container port
- Use localhost - When using
-pport mapping, target islocalhost:<host-port> - Check conflicts - Verify port is available before deploying
- Meaningful names - Subdomain should match service name
- Verify success - Check container logs if issues arise
Example
User: "Deploy Emby and put it on my dashboard"
Actions:
- Deploy Emby container on port 8096
- Call automation API with:
- name: "Emby"
- subdomain: "emby"
- ip: "localhost"
- port: "8096"
- Verify and report: "Emby deployed at https://emby.sami"