GUI · API · MCP

Panel de control Cipi y API: lo que los dos extensiones opcionales desbloquean

By · Last updated: · free to read, no paywall

Cipi es, y permanece, CLI-primero. Todo lo que necesita un servidor (aplicaciones, bases de datos, SSL, implementaciones, copias de seguridad) es uno cipi comando sobre SSH. Desde v4.7.0 puedes agregar dos paquetes opcionales: cipi/api y cipi/gui. Esta guía trata sobre lo que desbloquean juntos y por qué no es necesario.

In this guide
  1. Dos extensiones, cero lock-in
  2. La API es el eje
  3. Qué puedes hacer con la API
  4. Tokens Sanctum y abilities granulares
  5. Jobs asíncronos y polling
  6. MCP: Cipi dentro del Cursor, VS Code y Claude
  7. El panel UI como cabina multiservidor
  8. Qué puedes hacer en el navegador
  9. Server cockpit
  10. Cómo instalarlas
  11. SSL, 2FA and IP whitelist
  12. Casos de uso: equipos, agencias, hosting, IA
  13. cipi-cli and WHMCS on the same wire
  14. FAQ

Dos extensiones, cero lock-in

Cipi no es un panel que oculta un CLI. Es un CLI que, si se quiere, deja al descubierto un API y un salpicadero. Omita ambos paquetes y el servidor se ejecutará exactamente como antes: sin demonios adicionales, sin superficie web, sin nada que escuche. Instala sólo lo que necesitas.

Todo lo que hagas en el navegador, puedes hacerlo desde el shell. Cualquier cosa que hagas desde el shell, puedes automatizarla en más de HTTP. Ambos paquetes son clientes de la misma superficie, no un segundo Cipi.

The normative source is still the documentation: Advanced → cipi api and Control panel (GUI). Esta guía es la historia de las capacidades, no de todos los puntos finales.

La API es el eje

Habilite el API antes de tocar el GUI. Un comando dispone Laravel bajo /opt/cipi/api, el Nginx vhost, SSL, una cola SQLite y cipi-queue.service:

$ cipi api api.example.com
$ cipi api ssl
$ cipi api token create

The package is server-level automation — distinct from the Cipi Agent (cipi/agent dentro de cada aplicación Laravel). El Agente cubre webhooks por aplicación, estado y MCP. El API cubre todo el cuadro: aplicaciones, bases de datos, PHP, SSH, servicios, SMTP, comprobaciones de estado, lista blanca de IP.

PHP-FPM runs as www-data y ejecuta Cipi comandos a través de sudo contra una lista blanca explícita en /etc/sudoers.d/cipi-api. Las contraseñas de Vault y MariaDB permanecen dentro de Cipi, no en PHP. después cipi self-update, if /docs or /mcp return HTTP 500, cipi api fix-permissions Repara el almacenamiento y la propiedad de SQLite.

Qué puedes hacer con la API

La superficie OpenAPI cubre el ciclo de vida de un servidor Cipi. Las lecturas son sincrónicas; escribe (crear, editar, eliminar, implementar, SSL, alias, www, bases de datos) devolver 202 Accepted with a job_id.

Area What it unlocks
Apps Laravel y CRUD personalizado, Octane/FrankenPHP, motor de base de datos en el momento de la creación, suspender/reactivar (HTTP 503), cambiar el nombre del dominio principal, HTTP autenticación básica, registros paginados, .env, Composer auth.json, Artisan and whitelisted app run, implementar-config, recrear webhooks de Git
Deploy Implementación, reversión y desbloqueo de versiones atascadas sin tiempo de inactividad
Aliases and WWW Alias, contraparte apex/www, forzar a raíz / forzar desde raíz, redirecciones claras
SSL Let's Encrypt (SAN en primario + alias) y forzar HTTPS sin volver a emitir el certificado
Databases MariaDB y PostgreSQL: lista/motores, crear, eliminar, realizar copias de seguridad, restaurar, contraseña, instalar el motor y los valores predeterminados del sistema
Server GET /api/status (CPU, RAM, disco, servicios, PHP grupos, recuento de aplicaciones): la misma instantánea que cipi status
Cockpit PHP 8.3/8.4/8.5 (instalar, eliminar, predeterminado), claves SSH, reinicios de servicio, SMTP, HTTP comprobaciones de estado, lista blanca de IP activada /api/* and /mcp

Ejemplo mínimo: enumerar aplicaciones y leer el estado del servidor:

export CIPI_API_URL="https://api.example.com"
export CIPI_API_TOKEN="1|your-sanctum-token"

curl -sS "${CIPI_API_URL}/api/apps" \
  -H "Authorization: Bearer ${CIPI_API_TOKEN}" \
  -H "Accept: application/json"

curl -sS "${CIPI_API_URL}/api/status" \
  -H "Authorization: Bearer ${CIPI_API_TOKEN}"

Cree una aplicación Laravel Octane (asincrónica, API 1.13+ / Cipi 5.0+):

curl -sS -X POST "${CIPI_API_URL}/api/apps" \
  -H "Authorization: Bearer ${CIPI_API_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "shop.example.com",
    "repository": "git@github.com:you/shop.git",
    "branch": "main",
    "octane": true,
    "engine": "mariadb"
  }'

Swagger UI at https://api.example.com/docs es el patio de recreo: pruebe cada operación con el mismo token, inspeccione la solicitud/respuesta y los tipos de trabajo. La especificación vive en public/api-docs/openapi.json.

Tokens Sanctum y abilities granulares

La autenticación es Laravel Sanctum. Cada token lleva uno o más abilities: a CI token can hold only deploy-manage and apps-view; a panel token needs the full set. cipi api token create lee la lista canónica del paquete (igual que php artisan cipi:token-abilities).

Las capacidades cubren aplicaciones (ver/crear/editar/eliminar/suspender/basicauth/env/auth/artisan/run/deploy-config), alias, www, implementar, SSL, bases de datos, estado, MCP y – desde API. 1.15+ — PHP, SSH, servicios, SMTP, estado y lista blanca de IP. Revocar con cipi api token revoke <id>. No reutilice un token de capacidad total en una canalización pública.

Jobs asíncronos y polling

A deploy or db create no vive en la solicitud HTTP: el API pone en cola el trabajo y regresa 202 + job_id. Poll GET /api/jobs/{id} for status, CLI output and exit_code. Esa es la misma superposición que muestra GUI y el mismo bucle que cipi-cli jobs wait.

curl -sS -X POST "${CIPI_API_URL}/api/apps/myapp/deploy" \
  -H "Authorization: Bearer ${CIPI_API_TOKEN}"

curl -sS "${CIPI_API_URL}/api/jobs/JOB_ID" \
  -H "Authorization: Bearer ${CIPI_API_TOKEN}"

Since Cipi 4.6.3 el paquete API se actualiza todas las noches a las 04:30 (cipi api update), por lo que los puntos finales REST y las herramientas MCP se mantienen actualizados sin un paso manual.

MCP: Cipi dentro del Cursor, VS Code y Claude

The MCP server at /mcp (Streamable HTTP) exposes 50+ tools: aplicaciones, alias, www, bases de datos, implementación, SSL, autenticación básica, cabina del servidor, .env / auth.json / app-run / deploy-config, jobs, logs and ServerStatus. From API 1.11.1+ a token with only mcp-access es suficiente para cada herramienta MCP: las capacidades REST por punto final no se verifican en /mcp.

Cursor config in ~/.cursor/mcp.json:

{
  "mcpServers": {
    "cipi-api": {
      "type": "http",
      "url": "https://api.example.com/mcp",
      "headers": {
        "Authorization": "Bearer 1|your-token"
      }
    }
  }
}

VS Code (Copilot) utiliza el mismo transporte HTTP; Claude Code agrega el servidor con claude mcp add --transport http; Claude Desktop goes through mcp-remote. Las herramientas de registro ocultan secretos comunes antes de que regresen. El mismo protocolo, en el lado de la aplicación, es lo que in-app Agent MCP expone: dos superficies, un estándar.

El panel UI como cabina multiservidor

El GUI es una fina capa visual encima del API. vive en /opt/cipi/gui, es Laravel 12 y no mantiene trabajadores de cola locales: se autentica en el API de cada servidor, distribuye trabajos y sondea su estado. Derribe el panel y reconstrúyalo en otro lugar sin tocar un servidor administrado.

Un inicio de sesión, muchos servidores. Registre el punto final + el token para las cajas de producción, preparación y cliente, luego cambie entre ellas. Es la cabina que deseas cuando tienes más de un VPS y no quieres diez sesiones SSH abiertas.

The panel needs the API on every servidor que desea administrar, con un token de portador con capacidad total (incluye www-manage, status-view and, for app tooling, apps-env, apps-auth, apps-artisan, apps-run, apps-deploy-config). Sin el API, el GUI es un caparazón vacío.

Qué puedes hacer en el navegador

Server cockpit

From API 1.15+ / Cipi 5.0.6+ el panel no sólo gestiona las aplicaciones: gestiona la caja.

Ésa es la pieza que hace del GUI una alternativa real a un panel SaaS, sin mover la fuente de la verdad fuera del servidor.

Cómo instalarlas

Orden requerido: API en cada servidor administrado, luego GUI donde desee que esté el navegador. El GUI puede vivir en la misma caja o en una pequeña máquina dedicada; es solo un cliente HTTP.

# on every server you will manage
$ cipi api api.example.com
$ cipi api ssl
$ cipi api token create

# on the panel box (can be the same machine)
$ cipi gui panel.example.com
$ cipi gui ssl

cipi gui solicita el primer correo electrónico y contraseña del administrador (mínimo 12 caracteres, superior, inferior, dígito, especial, no 4 caracteres idénticos seguidos). La configuración aterriza en /etc/cipi/gui.json. PHP-FPM, vhost y el programador provienen del instalador: no inicia Laravel manualmente.

Updates: cipi gui update / cipi api update for the daily soft update; upgrade for a full rebuild. cipi gui refresh-theme recompiles the theme only. cipi gui remove desinstala vhost, pool y programador: los servidores administrados permanecen intactos. cipi gui reset-user es la ruta de recuperación si un administrador pierde 2FA.

SSL, 2FA and IP whitelist

El panel comienza en HTTP: emite Let's Encrypt inmediatamente con cipi gui ssl (renovación automática, mismo ACME que los dominios de aplicaciones). El inicio de sesión se basa en sesiones; cada administrador puede habilitar TOTP 2FA (Google Authenticator, 1Password, Aegis) desde su perfil: participación voluntaria, no obligatoria.

Restringir quién puede hablar con API y MCP:

$ cipi api ip-whitelist add 203.0.113.10
$ cipi api ip-whitelist set --ips=203.0.113.0/24,2001:db8::/32
$ cipi api ip-whitelist show --json

Default file: /etc/cipi/api-ip-whitelist with * (allow all). Rejected clients get 403. REST equivalents live under /api/ip-whitelist; a restricting PUT agrega la IP de la persona que llama automáticamente a menos que ensure_client_ip: false.

Casos de uso: equipos, agencias, hosting, IA

cipi-cli and WHMCS on the same wire

The CLI client es un binario de Go que habla REST desde su computadora portátil: aplicaciones, alias, implementación, SSL, bases de datos, estado global, trabajos. Mismos tokens, mismos perfiles multiservidor. ¿Prefieres la terminal? No necesitas el GUI. ¿Prefieres el navegador? no necesitas cipi-cli. ¿Necesitas ambos en días diferentes? Mismo API.

$ cipi-cli api token add prod
$ cipi-cli prod apps list
$ cipi-cli prod deploy myapp
$ cipi-cli status

WHMCS es el tercer cliente oficial: aprovisionamiento de alojamiento sin Composer, acceso directo a la carpeta de módulos. Ninguno de los tres reemplaza cipi on the server — they remote it.

Try both extensions on a Cipi VPS

Cipi permanece libre, open-source CLI. API y GUI son paquetes opcionales: instálelos cuando necesite un navegador, un CI webhook o un agente de IA, y elimínelos cuando no los necesite.

wget -O - https://cipi.sh/setup.sh | fiesta

Preguntas frecuentes

¿Necesito el panel UI para usar Cipi?

No. Cipi is CLI-first. Without cipi api and without cipi gui el servidor sigue haciendo el mismo trabajo: aplicaciones, implementaciones, SSL, copias de seguridad, firewall. Ambos paquetes son extensiones optativas desde la versión 4.7.0.

¿Puedo usar la GUI sin la API?

No. El panel es un cliente HTTP del REST API. Todo servidor gestionado necesita cipi api y una ficha de Portador con las habilidades que deseas exponer. Sin el API no hay nada que mostrar.

¿El GUI reemplaza al CLI en el servidor?

No. Cada acción del navegador es la misma cipi comando ejecutado vía sudo por el panel API. Puede seguir trabajando en SSH en paralelo, sin un estado de cerebro dividido.

¿Cuál es la diferencia entre REST, MCP y cipi-cli?

Lo mismo API, tres clientes. REST es para scripts, CI y WHMCS. MCP es para agentes de IA (Cursor, VS Code, Claude). cipi-cli es el terminal del portátil. El GUI es el cuarto cliente, construido para humanos.

¿Puedo gestionar varios servidores desde un solo panel?

Sí. Registre el punto final y el token para cada cuadro y cambie entre ellos con el mismo inicio de sesión. El panel no tiene estado en relación con su infraestructura: no almacena el estado del servidor, lo lee desde el API.

Sigue leyendo