314 lines
7.4 KiB
Markdown
314 lines
7.4 KiB
Markdown
# 🚀 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
|
|
```
|
|
|