7.4 KiB
7.4 KiB
🚀 Easypanel Deploy Skill
Skill Name: easypanel-deploy
Category: quick
Load Skills: [] (standalone)
🎯 Purpose
Deploy and manage services on Easypanel automatically via API.
CRITICAL: Follow the workflow exactly. Do NOT add parameters by yourself. Use ONLY the exact JSON structure provided.
🔧 Prerequisites
Easypanel API Credentials
MUST exist in ~/.easypanel/credentials:
EASYPANEL_URL=http://110.164.146.47:3000
EASYPANEL_API_TOKEN=your-api-token-here
EASYPANEL_DEFAULT_PROJECT=default
If credentials don't exist, ask user to create them first.
🚀 Workflow - FOLLOW EXACTLY
Phase 1: Deploy New Service
Input Required:
- Project name (ask user)
- Service name (ask user)
- Git repository URL (ask user)
- Branch (default: main)
- Port (default: 4321)
Execute in EXACT order:
Step 1: Create Project (if not exists)
curl -X POST "$EASYPANEL_URL/api/trpc/projects.createProject" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"json":{"name":"PROJECT_NAME"}}}'
Step 2: Create Service
curl -X POST "$EASYPANEL_URL/api/trpc/services.app.createService" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"json":{"projectName":"PROJECT_NAME","domains":[{"host":"$(EASYPANEL_DOMAIN)"}],"serviceName":"SERVICE_NAME"}}}'
Step 3: Update Git Source
curl -X POST "$EASYPANEL_URL/api/trpc/services.app.updateSourceGit" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"json":{"projectName":"PROJECT_NAME","serviceName":"SERVICE_NAME","repo":"GIT_URL","ref":"main","path":"/"}}}'
Step 4: Update Build Type
curl -X POST "$EASYPANEL_URL/api/trpc/services.app.updateBuild" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"json":{"projectName":"PROJECT_NAME","serviceName":"SERVICE_NAME","build":{"type":"dockerfile"}}}}'
Step 5: Deploy Service
curl -X POST "$EASYPANEL_URL/api/trpc/services.app.deployService" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"json":{"projectName":"PROJECT_NAME","serviceName":"SERVICE_NAME"}}}'
Step 6: Check Status
curl "$EASYPANEL_URL/api/trpc/services.app.inspectService?input=%7B%22json%22%3A%7B%22projectName%22%3A%22PROJECT_NAME%22%2C%22serviceName%22%3A%22SERVICE_NAME%22%7D%7D" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN"
Phase 2: Redeploy Existing Service
Input Required:
- Project name (ask user)
- Service name (ask user)
Execute in EXACT order:
Step 1: Find Service
curl "$EASYPANEL_URL/api/trpc/projects.listProjectsAndServices" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN"
Step 2: Trigger Redeploy
curl -X POST "$EASYPANEL_URL/api/trpc/services.app.deployService" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"input":{"json":{"projectName":"PROJECT_NAME","serviceName":"SERVICE_NAME"}}}'
Step 3: Check Status
curl "$EASYPANEL_URL/api/trpc/services.app.inspectService?input=%7B%22json%22%3A%7B%22projectName%22%3A%22PROJECT_NAME%22%2C%22serviceName%22%3A%22SERVICE_NAME%22%7D%7D" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN"
Phase 3: Check Status
Input Required:
- Project name (ask user)
- Service name (ask user)
Execute:
curl "$EASYPANEL_URL/api/trpc/services.app.inspectService?input=%7B%22json%22%3A%7B%22projectName%22%3A%22PROJECT_NAME%22%2C%22serviceName%22%3A%22SERVICE_NAME%22%7D%7D" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN"
Phase 4: View Logs
Input Required:
- Project name (ask user)
- Service name (ask user)
- Lines (default: 50, ask user)
Execute:
curl "$EASYPANEL_URL/api/trpc/services.common.getLogs?input=%7B%22json%22%3A%7B%22projectName%22%3A%22PROJECT_NAME%22%2C%22serviceName%22%3A%22SERVICE_NAME%22%2C%22lines%22%3A50%7D%7D" \
-H "Authorization: Bearer $EASYPANEL_API_TOKEN"
⚠️ IMPORTANT RULES
- DO NOT add parameters - Use ONLY the exact JSON structure provided
- Follow workflow order - Execute steps in exact order
- Use URL-encoded GET - For inspect/logs endpoints
- Use POST for actions - For create/deploy/update endpoints
- Verify credentials - Check
~/.easypanel/credentialsexists - Report status - After each step, report success/failure
🔒 Authentication
ALL API calls MUST include:
Authorization: Bearer $EASYPANEL_API_TOKEN
Content-Type: application/json
⚠️ Error Handling
| Error | Action |
|---|---|
| 401 Unauthorized | Tell user: "API token invalid. Check ~/.easypanel/credentials" |
| 404 Not Found | Tell user: "Project or service not found. Verify names." |
| 500 Server Error | Tell user: "Easypanel server error. Check server status." |
| Build Failed | Tell user: "Build failed. Check logs with /use easypanel-deploy logs" |
🎯 Success Criteria
After deployment, verify:
- ✅ Service created (Step 2 success)
- ✅ Git connected (Step 3 success)
- ✅ Build type set (Step 4 success)
- ✅ Deployment triggered (Step 5 success)
- ✅ Status shows "running" or "ready" (Step 6 success)
📝 JSON Structure - DO NOT MODIFY
Create Service
{
"input": {
"json": {
"projectName": "my-project",
"domains": [{"host":"$(EASYPANEL_DOMAIN)"}],
"serviceName": "my-service"
}
}
}
Update Git Source
{
"input": {
"json": {
"projectName": "my-project",
"serviceName": "my-service",
"repo": "https://git.moreminimore.com/user/repo.git",
"ref": "main",
"path": "/"
}
}
}
Update Build
{
"input": {
"json": {
"projectName": "my-project",
"serviceName": "my-service",
"build": {
"type": "dockerfile"
}
}
}
}
Deploy Service
{
"input": {
"json": {
"projectName": "my-project",
"serviceName": "my-service"
}
}
}
Inspect Service (URL-encoded)
?input=%7B%22json%22%3A%7B%22projectName%22%3A%22my-project%22%2C%22serviceName%22%3A%22my-service%22%7D%7D
🔄 Ongoing Operations
For auto-deploy enabled services:
- User pushes to Git → Easypanel auto-deploys
- User checks status → Use Phase 3
- User views logs → Use Phase 4
For manual deployments:
- Use Phase 2 to trigger redeploy
- Monitor build progress with Phase 3
- Verify deployment with Phase 3
🎯 Example Session
User: /use easypanel-deploy deploy
AI: I'll help you deploy a service to Easypanel.
First, what's your project name?
User: my-website
AI: What's your service name?
User: my-website-service
AI: What's your Git repository URL?
User: https://git.moreminimore.com/user/my-website.git
AI: Great! Deploying now...
[Execute Step 1: Create Project]
✅ Project created
[Execute Step 2: Create Service]
✅ Service created
[Execute Step 3: Update Git Source]
✅ Git repository connected
[Execute Step 4: Update Build Type]
✅ Build type set to dockerfile
[Execute Step 5: Deploy Service]
✅ Deployment triggered
[Execute Step 6: Check Status]
✅ Status: building
Your service is deploying! Check status with:
/use easypanel-deploy status