feat(infraestrutura): adiciona plugin infraestrutura (agents, skills, knowledge e metadados do projeto)
This commit is contained in:
@@ -0,0 +1,283 @@
|
||||
# EasyPanel API - Service Configuration
|
||||
|
||||
**Verificado:** 12-03-2026 (engenharia reversa do backend.js)
|
||||
|
||||
---
|
||||
|
||||
## Actualizar Source (GitHub)
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateSourceGithub" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"owner":"ealmeida",
|
||||
"repo":"MeuRepo",
|
||||
"ref":"main",
|
||||
"path":"/"
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Source (Git Custom)
|
||||
|
||||
**IMPORTANTE:** Os parametros `repo`, `ref`, `path` devem estar no nivel RAIZ do JSON, NAO dentro de um objecto `source`.
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateSourceGit" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"repo":"https://ealmeida:TOKEN@git.descomplicar.pt/ealmeida/repo",
|
||||
"ref":"main",
|
||||
"path":"/"
|
||||
}}'
|
||||
```
|
||||
|
||||
**Errado (causa zodErrors):**
|
||||
```json
|
||||
{"json":{"projectName":"x","serviceName":"y","source":{"type":"git","repo":"...","ref":"main","path":"/"}}}
|
||||
```
|
||||
|
||||
**Correcto:**
|
||||
```json
|
||||
{"json":{"projectName":"x","serviceName":"y","repo":"...","ref":"main","path":"/"}}
|
||||
```
|
||||
|
||||
## Actualizar Source (Docker Image)
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateSourceImage" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"image":"node:22-alpine"
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Environment Variables
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateEnv" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"env":"NODE_ENV=production\nPORT=3000\nDATABASE_URL=postgres://..."
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Build Config
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateBuild" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"build":{
|
||||
"type":"nixpacks",
|
||||
"buildCommand":"npm run build",
|
||||
"startCommand":"npm start"
|
||||
}
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Resources
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateResources" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"resources":{
|
||||
"memoryLimit":"512m",
|
||||
"memoryReservation":"256m",
|
||||
"cpuLimit":1,
|
||||
"cpuReservation":0.5
|
||||
}
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Deploy (Replicas, Command)
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateAdvanced" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"deploy":{
|
||||
"replicas":2,
|
||||
"command":"node dist/index.js",
|
||||
"zeroDowntime":true
|
||||
}
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Redirects
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateRedirects" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"redirects":[]
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Basic Auth
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateBasicAuth" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"basicAuth":{"enabled":false}
|
||||
}}'
|
||||
```
|
||||
|
||||
## Actualizar Maintenance Mode
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.updateMaintenance" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-api",
|
||||
"maintenance":{"enabled":false}
|
||||
}}'
|
||||
```
|
||||
|
||||
## Database Backup Config
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.postgres.updateBackup" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"minha-db",
|
||||
"backup":{
|
||||
"enabled":true,
|
||||
"schedule":"0 3 * * *",
|
||||
"destination":{
|
||||
"type":"s3",
|
||||
"bucket":"backups",
|
||||
"region":"eu-west-1",
|
||||
"accessKey":"...",
|
||||
"secretKey":"..."
|
||||
}
|
||||
}
|
||||
}}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Domains API (Namespace separado)
|
||||
|
||||
**IMPORTANTE:** Os dominios NAO sao geridos por `services.app.*` mas sim pelo namespace `domains.*`.
|
||||
|
||||
### Listar Dominios (GET)
|
||||
|
||||
```bash
|
||||
INPUT='{"json":{"projectName":"descomplicar"}}'
|
||||
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$INPUT'))")
|
||||
curl -s "http://localhost:3000/api/trpc/domains.listDomains?input=$ENCODED" \
|
||||
-H "Authorization: Bearer $TOKEN"
|
||||
```
|
||||
|
||||
### Criar Dominio (POST)
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/domains.createDomain" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{
|
||||
"id":"meu-dominio-id",
|
||||
"https":true,
|
||||
"host":"app.descomplicar.pt",
|
||||
"path":"/",
|
||||
"middlewares":[],
|
||||
"certificateResolver":"letsencrypt",
|
||||
"wildcard":false,
|
||||
"destinationType":"service",
|
||||
"serviceDestination":{
|
||||
"protocol":"http",
|
||||
"port":3000,
|
||||
"path":"/",
|
||||
"projectName":"descomplicar",
|
||||
"serviceName":"meu-servico"
|
||||
}
|
||||
}}'
|
||||
```
|
||||
|
||||
**Notas:**
|
||||
- O `id` pode ser qualquer string unica (cuid ou slug)
|
||||
- `certificateResolver`: `"letsencrypt"` para HTTPS, `""` para dominios internos
|
||||
- `destinationType`: `"service"` para servicos EasyPanel, `"custom"` para destinos externos
|
||||
|
||||
### Actualizar Dominio (POST)
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/domains.updateDomain" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{...mesmo schema de createDomain...}}'
|
||||
```
|
||||
|
||||
### Remover Dominio (POST)
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/domains.deleteDomain" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"id":"meu-dominio-id"}}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Resumo de Endpoints de Configuracao
|
||||
|
||||
| Endpoint | Tipo | Descricao | Verificado |
|
||||
|----------|------|-----------|:----------:|
|
||||
| `services.app.updateSourceGithub` | POST | Source GitHub (`owner`,`repo`,`ref`,`path`) | Sim |
|
||||
| `services.app.updateSourceGit` | POST | Source Git custom (`repo`,`ref`,`path` RAIZ) | Sim |
|
||||
| `services.app.updateSourceImage` | POST | Source Docker image (`image`) | Sim |
|
||||
| `services.app.updateEnv` | POST | Variaveis de ambiente (`env` string) | Sim |
|
||||
| `services.app.updateBuild` | POST | Build config (`type`,`buildCommand`,`startCommand`) | Sim |
|
||||
| `services.app.updateResources` | POST | CPU/RAM limits | Sim |
|
||||
| `services.app.updateAdvanced` | POST | Deploy avancado (replicas, command, zeroDowntime) | Sim |
|
||||
| `services.app.updateRedirects` | POST | Redireccionamentos HTTP | Sim |
|
||||
| `services.app.updateBasicAuth` | POST | Autenticacao basica | Sim |
|
||||
| `services.app.updateMaintenance` | POST | Modo manutencao | Sim |
|
||||
| `domains.listDomains` | GET | Listar dominios (`projectName`) | Sim |
|
||||
| `domains.createDomain` | POST | Criar dominio | Sim |
|
||||
| `domains.updateDomain` | POST | Actualizar dominio | Sim |
|
||||
| `domains.deleteDomain` | POST | Remover dominio | Sim |
|
||||
|
||||
**Endpoints que NAO existem na versao instalada:**
|
||||
- ~~`services.app.updateDomains`~~ — usar `domains.createDomain`
|
||||
- ~~`services.app.updateMounts`~~ — nao encontrado
|
||||
- ~~`services.app.updatePorts`~~ — nao encontrado
|
||||
- ~~`services.app.saveDomains`~~ — nao existe
|
||||
- ~~`services.app.saveGithubSource`~~ — usar `updateSourceGithub` ou `updateSourceGit`
|
||||
|
||||
---
|
||||
|
||||
*Actualizado: 12-03-2026*
|
||||
@@ -0,0 +1,135 @@
|
||||
# EasyPanel API - Services
|
||||
|
||||
**Verificado:** 12-03-2026 (engenharia reversa do backend.js)
|
||||
|
||||
## Service Types
|
||||
|
||||
| Type | Descricao |
|
||||
|------|-----------|
|
||||
| `app` | Aplicacao (Node.js, Python, Go, Rust, etc.) |
|
||||
| `mysql` | MySQL database |
|
||||
| `mariadb` | MariaDB database |
|
||||
| `postgres` | PostgreSQL database |
|
||||
| `mongo` | MongoDB database |
|
||||
| `redis` | Redis cache |
|
||||
|
||||
## Criar Servico App
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.createService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"minha-api"}}'
|
||||
```
|
||||
|
||||
## Criar Servico Database
|
||||
|
||||
```bash
|
||||
# PostgreSQL
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.postgres.createService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"minha-db"}}'
|
||||
|
||||
# MySQL
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.mysql.createService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"mysql-db"}}'
|
||||
|
||||
# Redis
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.redis.createService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"cache"}}'
|
||||
```
|
||||
|
||||
## Inspeccionar Servico (GET)
|
||||
|
||||
```bash
|
||||
INPUT='{"json":{"projectName":"descomplicar","serviceName":"dashboard_descomplicar"}}'
|
||||
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$INPUT'))")
|
||||
curl -s "http://localhost:3000/api/trpc/services.app.inspectService?input=$ENCODED" \
|
||||
-H "Authorization: Bearer $TOKEN"
|
||||
```
|
||||
|
||||
Response parcial:
|
||||
```json
|
||||
{
|
||||
"projectName": "descomplicar",
|
||||
"name": "dashboard_descomplicar",
|
||||
"type": "app",
|
||||
"enabled": true,
|
||||
"token": "deploy-webhook-token",
|
||||
"source": {"type": "git", "repo": "https://...", "ref": "main"},
|
||||
"build": {"type": "nixpacks", "buildCommand": "npm run build"},
|
||||
"env": "VAR=value",
|
||||
"mounts": [],
|
||||
"ports": []
|
||||
}
|
||||
```
|
||||
|
||||
## Deploy Servico
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.deployService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"minha-api"}}'
|
||||
```
|
||||
|
||||
## Stop / Start / Restart Servico
|
||||
|
||||
```bash
|
||||
# Parar servico
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.stopService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"minha-api"}}'
|
||||
|
||||
# Iniciar servico
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.startService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"minha-api"}}'
|
||||
|
||||
# Reiniciar servico
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.restartService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"minha-api"}}'
|
||||
```
|
||||
|
||||
**IMPORTANTE:** `enableService` e `disableService` NAO existem na versao instalada. Usar `startService`/`stopService`.
|
||||
|
||||
## Destruir Servico
|
||||
|
||||
```bash
|
||||
curl -s -X POST "http://localhost:3000/api/trpc/services.app.destroyService" \
|
||||
-H "Authorization: Bearer $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"json":{"projectName":"descomplicar","serviceName":"minha-api"}}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Resumo de Endpoints
|
||||
|
||||
| Endpoint | Tipo | Descricao | Verificado |
|
||||
|----------|------|-----------|:----------:|
|
||||
| `services.app.createService` | POST | Criar servico app | Sim |
|
||||
| `services.postgres.createService` | POST | Criar PostgreSQL | Sim |
|
||||
| `services.mysql.createService` | POST | Criar MySQL | Sim |
|
||||
| `services.redis.createService` | POST | Criar Redis | Sim |
|
||||
| `services.app.inspectService` | GET | Inspeccionar servico | Sim |
|
||||
| `services.app.deployService` | POST | Fazer deploy | Sim |
|
||||
| `services.app.stopService` | POST | Parar servico | Sim |
|
||||
| `services.app.startService` | POST | Iniciar servico | Sim |
|
||||
| `services.app.restartService` | POST | Reiniciar servico | Sim |
|
||||
| `services.app.destroyService` | POST | Destruir servico | Sim |
|
||||
|
||||
**Endpoints que NAO existem:** `enableService`, `disableService`, `redeployService`
|
||||
|
||||
---
|
||||
|
||||
*Actualizado: 12-03-2026*
|
||||
Reference in New Issue
Block a user