Initial commit: DashCaddy v1.0

Full codebase including API server (32 modules + routes), dashboard frontend,
DashCA certificate distribution, installer script, and deployment skills.
This commit is contained in:
2026-03-05 02:26:12 -08:00
commit f61e85d9a7
337 changed files with 75282 additions and 0 deletions

File diff suppressed because one or more lines are too long

154
skills/deploy.skill.md Normal file
View File

@@ -0,0 +1,154 @@
# 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:
```bash
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 `localhost` or `127.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):
```bash
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
```bash
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
```bash
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
```bash
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
```bash
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
```bash
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
1. **Always use automation API** - it handles DNS + Caddy + Dashboard in one call
2. **Port mapping** - Host port can differ from container port
3. **Use localhost** - When using `-p` port mapping, target is `localhost:<host-port>`
4. **Check conflicts** - Verify port is available before deploying
5. **Meaningful names** - Subdomain should match service name
6. **Verify success** - Check container logs if issues arise
## Example
**User:** "Deploy Emby and put it on my dashboard"
**Actions:**
1. Deploy Emby container on port 8096
2. Call automation API with:
- name: "Emby"
- subdomain: "emby"
- ip: "localhost"
- port: "8096"
3. Verify and report: "Emby deployed at https://emby.sami"