Auto-sync from website-creator
This commit is contained in:
313
skills/easypanel-deploy/SKILL.md
Normal file
313
skills/easypanel-deploy/SKILL.md
Normal file
@@ -0,0 +1,313 @@
|
||||
# 🚀 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`:
|
||||
|
||||
```bash
|
||||
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)
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
curl "$EASYPANEL_URL/api/trpc/projects.listProjectsAndServices" \
|
||||
-H "Authorization: Bearer $EASYPANEL_API_TOKEN"
|
||||
```
|
||||
|
||||
#### Step 2: Trigger Redeploy
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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:**
|
||||
```bash
|
||||
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:**
|
||||
```bash
|
||||
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
|
||||
|
||||
1. **DO NOT add parameters** - Use ONLY the exact JSON structure provided
|
||||
2. **Follow workflow order** - Execute steps in exact order
|
||||
3. **Use URL-encoded GET** - For inspect/logs endpoints
|
||||
4. **Use POST for actions** - For create/deploy/update endpoints
|
||||
5. **Verify credentials** - Check `~/.easypanel/credentials` exists
|
||||
6. **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
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"json": {
|
||||
"projectName": "my-project",
|
||||
"domains": [{"host":"$(EASYPANEL_DOMAIN)"}],
|
||||
"serviceName": "my-service"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Git Source
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"json": {
|
||||
"projectName": "my-project",
|
||||
"serviceName": "my-service",
|
||||
"repo": "https://git.moreminimore.com/user/repo.git",
|
||||
"ref": "main",
|
||||
"path": "/"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Update Build
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"json": {
|
||||
"projectName": "my-project",
|
||||
"serviceName": "my-service",
|
||||
"build": {
|
||||
"type": "dockerfile"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Deploy Service
|
||||
```json
|
||||
{
|
||||
"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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user