GUI · API · MCP

Pannello UI e API di Cipi: tutte le potenzialità delle due estensioni

Di · Ultimo aggiornamento: · lettura gratuita, nessun paywall

Cipi è, e resta, CLI-first. Tutto ciò che un server richiede — app, database, SSL, deploy, backup — sta in un comando cipi via SSH. Dalla v4.7.0 puoi aggiungere due package opzionali: cipi/api e cipi/gui. Questa guida racconta cosa sbloccano insieme, e perché nessuno dei due è obbligatorio.

In questa guida
  1. Due estensioni, zero lock-in
  2. L'API è il filo conduttore
  3. Cosa puoi fare con l'API
  4. Token Sanctum e ability granulari
  5. Job asincroni e polling
  6. MCP: Cipi dentro Cursor, VS Code e Claude
  7. Il pannello UI come cockpit multi-server
  8. Cosa puoi fare dal browser
  9. Server cockpit
  10. Come si installano
  11. SSL, 2FA e IP whitelist
  12. Casi d'uso: team, agenzie, hosting, AI
  13. cipi-cli e WHMCS sullo stesso filo
  14. FAQ

Due estensioni, zero lock-in

Cipi non è un pannello che nasconde una CLI. È una CLI che, se vuoi, espone un'API e una dashboard. La differenza non è cosmetica: salti entrambi i package e il server gira esattamente come prima — niente daemon extra, niente superficie web, niente in ascolto. Installi solo quello che ti serve.

Qualsiasi cosa fai nel browser, la puoi fare dalla shell. Qualsiasi cosa fai dalla shell, la puoi automatizzare via HTTP. I due package sono client della stessa superficie, non un secondo Cipi.

La fonte normativa resta la documentazione: Avanzato → cipi api e Pannello di controllo (GUI). Questa guida è il racconto delle potenzialità, non il riferimento di ogni endpoint.

L'API è il filo conduttore

Prima di toccare la GUI, abilita l'API. Un comando provisiona Laravel in /opt/cipi/api, il vhost Nginx, SSL, una coda SQLite e cipi-queue.service:

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

Il package è automazione a livello server — distinta dal Cipi Agent (cipi/agent dentro ogni app Laravel). L'Agent serve webhook, health e MCP per-app. L'API serve il box intero: app, database, PHP, SSH, servizi, SMTP, healthcheck, IP whitelist.

PHP-FPM gira come www-data ed esegue i comandi Cipi via sudo con una whitelist esplicita in /etc/sudoers.d/cipi-api. Vault e password MariaDB restano dentro Cipi, non in PHP. Dopo un cipi self-update, se /docs o /mcp rispondono HTTP 500, cipi api fix-permissions ripara ownership di storage e database SQLite.

Cosa puoi fare con l'API

La superficie OpenAPI copre il ciclo di vita di un server Cipi. Le letture sono sincrone; le scritture (create, edit, delete, deploy, SSL, alias, www, database) rispondono 202 Accepted con un job_id.

Area Potenzialità
App CRUD Laravel e custom, Octane/FrankenPHP, motore DB alla creazione, suspend/unsuspend (HTTP 503), rename dominio, HTTP Basic Auth, log paginati, .env, auth.json Composer, Artisan e app run in whitelist, deploy-config, ricrea webhook Git
Deploy Deploy zero-downtime, rollback, unlock di un deploy bloccato
Alias e WWW Alias, controparte apex/www, force-to-root / force-from-root, clear redirect
SSL Let's Encrypt (SAN su primario + alias) e force HTTPS senza riemettere il certificato
Database MariaDB e PostgreSQL: list/engines, create, delete, backup, restore, password, install engine e default di sistema
Server GET /api/status (CPU, RAM, disco, servizi, pool PHP, conteggio app) — lo stesso snapshot di cipi status
Cockpit PHP 8.3/8.4/8.5 (install, remove, default), chiavi SSH, restart servizi, SMTP, healthcheck HTTP, IP whitelist su /api/* e /mcp

Esempio minimo — elenco app e stato server:

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}"

Crea un'app Laravel Octane (async, 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 su https://api.example.com/docs è il playground: prova ogni operazione con lo stesso token, vedi request/response e i tipi job. La spec vive in public/api-docs/openapi.json.

Token Sanctum e ability granulari

L'autenticazione è Laravel Sanctum. Ogni token ha una o più ability: un token da CI può avere solo deploy-manage e apps-view; un token da pannello deve coprire l'intero set. cipi api token create legge la lista canonica dal package (stessa di php artisan cipi:token-abilities).

Le ability coprono app (view/create/edit/delete/suspend/basicauth/env/auth/artisan/run/deploy-config), alias, www, deploy, SSL, database, status, MCP e — da API 1.15+ — PHP, SSH, servizi, SMTP, health e IP whitelist. Revoca con cipi api token revoke <id>. Non riusare un token full-ability in una pipeline pubblica.

Job asincroni e polling

Un deploy o un db create non sta nella request HTTP: l'API accoda il lavoro e risponde 202 + job_id. Interroga GET /api/jobs/{id} per stato, output CLI e exit_code. È lo stesso overlay che vedi nella GUI e lo stesso polling di 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}"

Da Cipi 4.6.3 il package API si aggiorna ogni notte alle 04:30 (cipi api update), così endpoint REST e tool MCP restano allineati senza un intervento manuale.

MCP: Cipi dentro Cursor, VS Code e Claude

Il server MCP su /mcp (Streamable HTTP) espone oltre 50 tool: app, alias, www, database, deploy, SSL, Basic Auth, cockpit server, .env / auth.json / app-run / deploy-config, job, log e ServerStatus. Da API 1.11.1+ un token con sola ability mcp-access basta per tutti i tool MCP — le ability REST per-endpoint non vengono verificate su /mcp.

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

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

VS Code (Copilot) usa lo stesso trasporto HTTP; Claude Code si aggiunge con claude mcp add --transport http; Claude Desktop passa da mcp-remote. I tool di log redigono secret comuni prima di consegnare l'output. Lo stesso protocollo, lato app, lo espone l'Agent MCP — due superfici diverse, stesso standard.

Il pannello UI come cockpit multi-server

La GUI è un layer visuale sottile sopra l'API. Vive in /opt/cipi/gui, è Laravel 12, e non tiene queue worker locali: si autentica all'API di ogni server, spedisce job e ne interroga lo stato. Smonti il pannello e lo ricostruisci altrove senza toccare un server gestito.

Un login, tanti server. Registri endpoint + token per produzione, staging e i box dei clienti, poi passi dall'uno all'altro. È il cockpit che manca a chi ha più di una VPS e non vuole dieci sessioni SSH aperte.

Il pannello richiede l'API su ogni server che vuoi gestire, con un token full-ability (includi www-manage, status-view e, per il tooling app, apps-env, apps-auth, apps-artisan, apps-run, apps-deploy-config). Senza API, la GUI è un guscio vuoto.

Cosa puoi fare dal browser

Server cockpit

Da API 1.15+ / Cipi 5.0.6+ il pannello non gestisce solo le app: gestisce il box.

È il pezzo che fa della GUI un'alternativa vera a un pannello SaaS, senza spostare la fonte di verità fuori dal server.

Come si installano

Ordine obbligatorio: API sul server gestito, poi GUI dove vuoi ospitare il browser. La GUI può vivere sullo stesso box o su una macchina dedicata piccola — è solo un client HTTP.

# su ogni server da gestire
$ cipi api api.example.com
$ cipi api ssl
$ cipi api token create

# sul box del pannello (può essere lo stesso)
$ cipi gui panel.example.com
$ cipi gui ssl

cipi gui chiede email e password del primo admin (minimo 12 caratteri, maiuscola, minuscola, cifra, speciale, niente 4 caratteri identici di fila). Config in /etc/cipi/gui.json. PHP-FPM, vhost e scheduler arrivano dall'installer: non monti Laravel a mano.

Aggiornamenti: cipi gui update / cipi api update per il soft update quotidiano; upgrade per un rebuild completo. cipi gui refresh-theme ricompila solo il tema. cipi gui remove disinstalla vhost, pool e scheduler — i server gestiti restano intatti. cipi gui reset-user è il recovery se un admin perde il 2FA.

SSL, 2FA e IP whitelist

Il pannello nasce in HTTP: emetti Let's Encrypt subito con cipi gui ssl (rinnovo automatico, stesso ACME delle app). Il login è session-based; ogni amministratore può attivare 2FA TOTP (Google Authenticator, 1Password, Aegis) dal profilo — opt-in, non obbligatorio.

Restringi chi parla con API e 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

File predefinito: /etc/cipi/api-ip-whitelist con * (consenti tutti). I client rifiutati ricevono 403. Gli equivalenti REST sono sotto /api/ip-whitelist; un PUT che restringe la lista aggiunge da solo l'IP del chiamante, salvo ensure_client_ip: false.

Casi d'uso: team, agenzie, hosting, AI

cipi-cli e WHMCS sullo stesso filo

Il client CLI è un binario Go che parla REST dal portatile: app, alias, deploy, SSL, database, status globale, job. Stessi token, stessi profili multi-server. Preferisci il terminale? Non ti serve la GUI. Preferisci il browser? Non ti serve cipi-cli. Servono entrambi in giorni diversi? Stessa API.

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

WHMCS è il terzo client ufficiale: provisioning hosting senza Composer, drop-in nella cartella moduli. Nessuno dei tre sostituisce cipi sul server — lo remoto.

Prova le due estensioni su un VPS Cipi

Cipi resta una CLI gratuita e open source. API e GUI sono package opt-in: le installi quando ti serve un browser, un webhook CI o un agente AI — e le togli quando non ti servono più.

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

Domande frequenti

Devo installare il pannello UI per usare Cipi?

No. Cipi è CLI-first. Senza cipi api e senza cipi gui il server fa le stesse cose: app, deploy, SSL, backup, firewall. I due package sono estensioni opt-in da v4.7.0.

Posso usare la GUI senza l'API?

No. Il pannello è un client HTTP della REST API. Ogni server gestito deve avere cipi api e un token Bearer con le ability che vuoi esporre. Senza API non c'è nulla da mostrare.

La GUI sostituisce la CLI sul server?

No. Qualsiasi operazione del browser è lo stesso comando cipi eseguito via sudo dalla panel API. Puoi continuare a lavorare in SSH in parallelo, senza conflitti di stato.

Cosa cambia tra REST, MCP e cipi-cli?

La stessa API, tre client. REST è per script, CI e WHMCS. MCP è per agenti AI (Cursor, VS Code, Claude). cipi-cli è il terminale sul portatile. La GUI è il quarto client, fatto per umani.

Posso gestire più server da un solo pannello?

Sì. Registri endpoint e token per ogni box e passi dall'uno all'altro con lo stesso login. Il pannello è stateless rispetto all'infrastruttura: non salva lo stato dei server, lo legge dall'API.

Continua a leggere