cipi app create

cipi app create unterstützt zwei App-Typen: Laravel (Standard) und Benutzerdefiniert (--custom). Laravel Apps erhalten eine vollständig isolierte Umgebung: Linux-Benutzer, PHP-FPM-Pool oder Laravel Octane (FrankenPHP) seitdem v5.0, Nginx vhost, Datenbank (MariaDB standardmäßig; optional PostgreSQL da v4.8.0), Supervisor Worker, Crontab-Eintrag, Deployer-Releases ohne Ausfallzeiten, SSH Bereitstellungsschlüssel und automatisch kompiliert .env. Benutzerdefinierte Apps sind einfacher – siehe custom apps für Einzelheiten.

Laravel App (Standard – PHP-FPM)

bash
$ cipi app create

Laravel Octane (FrankenPHP)

bash
$ cipi app create --octane
$ cipi app create --octane=frankenphp   # explicit (same as --octane)

Siehe Laravel Octane für Anforderungen, Konvertierung und wie der vhost unterscheidet sich von FPM.

Nicht interaktiv (Flaggen)

bash
$ cipi app create \
    --user=myapp \
    --domain=myapp.com \
    --repository=git@github.com:you/myapp.git \
    --branch=main \
    --php=8.5

# Laravel Octane (FrankenPHP) — v5.0+
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --octane

# optional PostgreSQL (v4.8.0+, after cipi db install pgsql)
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --engine=pgsql
--userLinux-Benutzername für die App. Muss einzigartig sein, Kleinbuchstaben, alphanumerisch.
--domainPrimäre Domain (z. B. myapp.com). Wird für Nginx vhost und verwendet APP_URL.
--repositorySSH-Git-URL (z. B. git@github.com:you/repo.git). Muss SSH sein, nicht HTTPS.
--branchVerzweigung zur Bereitstellung. Standardmäßig ist main.
--phpPHP-Version für diese App (z. B. 8.5). Standardmäßig ist PHP 8,5. Muss eine installierte Version sein – nur 8.3, 8.4 und 8.5 werden seit v4.5.4 akzeptiert (Deployer 8 erfordert PHP ≥ 8.3).
--octane / --octane=frankenphpHTTP servieren über Laravel Octane (FrankenPHP) statt PHP-FPM (seit v5.0). Nur Laravel Apps – abgelehnt mit --custom. Siehe Laravel Octane.
--engineDatenbank-Engine: mariadb (Standard) oder pgsql (seit v4.8.0; erfordert cipi db install pgsql). Interaktive Eingabeaufforderungen, wenn PostgreSQL ist installiert. Schreibt passend .env / connection URL.
Wenn ein GitHub- oder GitLab-Token konfiguriert ist, fügt Cipi automatisch den SSH-Bereitstellungsschlüssel hinzu und erstellt die webhook im Repository – keine manuellen Schritte erforderlich. Siehe Git-Auto-Setup für Einrichtungsanweisungen und Fallback-Optionen, wenn die automatische Konfiguration nicht verfügbar ist.

Laravel Octane (FrankenPHP)

Seitdem v5.0Laravel Apps können HTTP bereitstellen Laravel Octane mit dem FrankenPHP Server statt pro App PHP-FPM-Pool. Octane und klassische FPM-Apps laufen nebeneinander auf demselben Cipi Server.

Was Cipi konfiguriert

  • Weist einen Localhost-Port zu 8100–8999 und Geschäfte octane / octane_port in apps.json
  • Nginx vhost verwendet proxy_pass bis Octane und stellt statische Dateien von bereitcurrent/publicno per-app FPM pool
  • Supervisor Programm${app}-octane neben Warteschlangenarbeitern
  • Deployer template laravel-octane.php startet / lädt Octane bei der Bereitstellung neu
  • .env: OCTANE_SERVER=frankenphp, OCTANE_HTTPS=true

App-Anforderungen

Ihr Laravel-Repository muss enthalten laravel/octane und laufen php artisan octane:install --server=frankenphp. Octane beginnt nach dem ersten erfolgreiche Bereitstellung.

bash
# create an Octane app
$ cipi app create --user=myapp --domain=myapp.com \
    --repository=git@github.com:you/myapp.git --octane

# convert an existing FPM app → Octane (or the reverse)
$ cipi app convert myapp --to=octane
$ cipi app convert myapp --to=fpm

# tune Octane workers (also see app limits)
$ cipi app limits myapp --octane-workers=4

cipi app convert --to=octane|fpm schreibt den Pool / vhost / Supervisor / Deployer neu Vorlage /.envund wendet SSL erneut an, wenn bereits ein Zertifikat vorhanden ist.

Octane tip: Behalten Sie die Arbeit in der Warteschlange mit langer Laufzeit bei cipi worker oder Horizon — Octane behandelt nur HTTP. Kombiniere es mit Reverb für WebSockets.

cipi app create --custom

Erstellt eine benutzerdefinierte App mit klassischer Bereitstellung (keine Null-Ausfallzeit): Code wird bereitgestellt htdocs – nein current/shared Symlinks. Ideal für statische Websites, SPAs (Vue, React, Svelte), WordPress, andere CMS oder jedes Nicht-Laravel PHP-Projekt oder Framework.

Bei der Erstellung wählen Sie nur das Dokumentstammverzeichnis (Standard)./, oder z.B. www, dist, public). Nginx ist mit vorkonfiguriert index index.html index.php, try_files $uri $uri/ /index.php?$args, und error_page 404 /404.html – keine Eingabeaufforderungen für try_files oder Einstiegspunkt.

Git optional (nur SFTP)

Das Git-Repository ist optional für benutzerdefinierte Apps. Laravel Apps benötigen weiterhin ein Repository. Wenn Sie das Repository für eine benutzerdefinierte überspringen App, Cipi schafft /home/<app>/htdocs mit einem Platzhalter index.html und tut Konfigurieren Sie keinen Bereitstellungsschlüssel oder webhook – Sie laden Dateien mit hoch SFTP (oder SCP/rsync) zu ~/htdocsals App-Benutzer. Die Onboarding-Ausgabe erklärt dies „kein Repo – nur SFTP“ Arbeitsablauf. Wenn Sie ein Repository bereitstellen, bleibt das Verhalten unverändert: verwenden cipi deploy <app> to pull code into htdocs.

Was ist enthalten und was Sie hinzufügen

Benutzerdefinierte Apps haben keine Datenbank, Nein .env, nein cron, und nein Warteschlangenarbeiter. Wenn ein Repository konfiguriert ist, sind ein Bereitstellungsschlüssel und (mit Git-Auto-Setup) webhook vorhanden gezeigt; Bei reinen SFTP-Apps entfallen diese. In der Zusammenfassung nach der Erstellung werden der SSH-Zugriff und weitere aufgeführt Schritte entsprechend.

Wenn Ihre benutzerdefinierte App eine Datenbank benötigt (z. B. WordPress, Drupal), erstellen Sie eine mit cipi db create --name=<app> nach dem Einsatz. Siehecipi db für Backup, Wiederherstellung und Passwortverwaltung.

Mit Git – nicht interaktives Beispiel:

bash
$ cipi app create --custom --user=mysite --domain=mysite.com \
    --repository=git@github.com:you/mysite.git --docroot=dist

Nur SFTP – weglassen --repository und --branch:

bash
$ cipi app create --custom --user=mysite --domain=mysite.com --docroot=dist

Mit einem Repository verwenden cipi deploy <app> einsetzen; Code wird geklont /home/<app>/htdocs.

app list / app show / app edit / app delete

Befehl Beschreibung
cipi app list Listen Sie alle Apps mit Domäne, PHP-Version und Status auf ((suspended) wann offline)
cipi app show <app> Vollständige Details: Domäne, PHP, Bereitstellungsschlüssel, Worker, webhook, Suspend-Status. Für benutzerdefinierte Apps: Geben Sie „Benutzerdefiniert“ ein, docroot; webhook (und Bereitstellungsschlüssel) entfällt, wenn nur SFTP ohne a Repository.
cipi app edit <app> --php=8.5 Hot-Swap-Version PHP. Aktualisiert FPM-Pool, Nginx Socket, Supervisor, Crontab, Deployer config und .env – Keine Ausfallzeiten
cipi app edit <app> --branch=develop Ändern Sie den Bereitstellungszweig
cipi app edit <app> --domain=new.example.com Benennen Sie die primäre Domäne um (seit v4.6.2). Validiert Format und Einzigartigkeit, verschiebt die alte Primärdatei in Aliase, generiert den Nginx vhost neu, aktualisiert APP_URL, aktualisiert Git-Webhooks bei automatischer Konfiguration und gibt sie erneut aus Let's Encrypt, wenn bereits ein Zertifikat vorhanden war
cipi app edit <app> --repository=<SSH-URL> Hängen Sie das Git-Repository an oder ändern Sie es (z. B. aktivieren Sie die Bereitstellung auf einer benutzerdefinierten Nur-SFTP-App). erstellt ohne --repository). Zusammensetzbar mit--branch, --php, und --domain
cipi app edit <app> --node-build='npm ci && npm run build' Führen Sie bei jeder Bereitstellung einen Knoten-Build nach Composer Anbietern aus (seit v5.0). Der Deployer führt aus .deployer/node-build.sh(Fail-Closed; Befehl wird validiert). Klar mit --no-node-build
cipi app edit <app> --predeploy-snapshot Aktivieren Sie vor jeder Bereitstellung einen Datenbank-Dump (seitdem). v5.0). Gleiches Verhalten wie beim Passieren --snapshot auf jedem cipi deploy. Siehe Stellen Sie DB-Snapshots vorab bereit
cipi App konvertieren <app> --to=octane|fpm Konvertieren Sie zwischen PHP-FPM und Laravel Octane (seit v5.0). Siehe Laravel Octane
cipi app env <app> [--show|--get|--set|--unset] Öffnen Sie die App .env in Nano, oder Schlüssel verwalten seitdem nicht interaktiv v5.0.3 (--show/--get/--set/--unset, optional --json). Wird bei benutzerdefinierten Apps mit einem Fehler beendet (keine .env).
cipi app run <app> <cmd> [args…] Nicht interaktiver Befehl als App-Benutzer auf die Whitelist gesetzt (seit v5.0.3). Siehe app run
cipi App Deploy-Config <App> Strukturierte Deployer-Rezeptoptionen (seit v5.0.3). Siehe deploy-config
cipi App webhook <App> neu erstellen [--rotate-secret] Erstellen Sie die GitHub/GitLab neu und stellen Sie webhook bereit; optionale geheime Rotation Aktualisierungen CIPI_WEBHOOK_TOKEN (seit v5.0.6). RUHE: POST /api/apps/{name}/webhook/recreate (API 1.15.0+). Seitdem 5.0.6, app edit --repository= Erstellt nur webhook/Deploy-Schlüssel neu wenn sich die Repository-URL tatsächlich ändert.
cipi App-Reset-Passwort <App> Generieren Sie das SSH-Passwort des Linux-Benutzers der App neu. Das neue Passwort wird angezeigt Bildschirm – speichern Sie es sofort
cipi app reset-db-password <app> Generieren Sie das Datenbankpasswort der App neu (MariaDB oder PostgreSQL pro App). engine) und automatisch aktualisieren DB_PASSWORD in der App .env. Wird bei benutzerdefinierten Apps (keine Datenbank) mit einem Fehler beendet.
cipi App <App> löschen Entfernen Sie dauerhaft die App, den Benutzer, die Datenbank (falls Laravel), Nginx vhost, den FPM-Pool usw Supervisor Arbeiter. Bei benutzerdefinierten Apps wird das Löschen der Datenbank übersprungen (es wurde keine erstellt). Fragt nach Bestätigung.
cipi app delete <app> --force Identisch mit Löschen, überspringt jedoch die Bestätigungsaufforderung – für Skripte das Bedienfeld API und cipi-cli

cipi app reverb

Laravel Reverb ist Laravels eigener WebSocket-Server. Cipi betreibt ihn seit v5.0; v5.1.2 macht ihn produktionsreif — generierte Zugangsdaten, Schema vom Zertifikat, höhere Verbindungslimits und ein Proxy, der eigene Routen nicht mehr verschluckt.

Enable verdrahtet vier Dinge: einen Localhost-Port 9000–9099, das Supervisor-Programm ${app}-reverb, einen nginx-Proxy für /app/{key} und /apps/{id}/… auf der App-Domain, und REVERB_* / VITE_REVERB_* in der .env.

bash
$ cipi app reverb enable myapp
$ cipi app reverb enable myapp --restart-supervisor   # neues Open-File-Limit sofort anwenden
$ cipi app reverb status myapp
$ cipi app reverb disable myapp

Reverb ist nur Laravel. enable erneut ist sicher: Port und Keys bleiben, Host und Schema werden neu abgeleitet. Der Node-Build muss nach enable laufen — Vite backt VITE_REVERB_* ein. Siehe node_build.

/app und /apps gehören zum Protokoll. Bis 5.1.1 war der Proxy location /app (nginx-Präfix) — also landeten /appointments und /application/… in Reverb. Seit 5.1.2 gilt ~ ^/apps?(/|$). Eine App mit eigener /app-Route braucht eine eigene Subdomain.

ws:// oder wss:// kommt vom Zertifikat. Eine Wildcard wird zu einem konkreten Host. status zeigt die Client-URL und warnt bei fehlenden Keys, altem Schema oder altem Open-File-Limit. --restart-supervisor startet alle Queue-Worker des Servers neu.

disable stellt BROADCAST_CONNECTION wieder her (Fallback log). Ein Clone bekommt eigenen Port, Keys und Domain. Deklaration in workers.reverb. Migration 5.1.2 schreibt gierige vHosts um (Backup /var/lib/cipi/vhost-backup-5.1.2) und füllt fehlende .env-Keys ohne Überschreiben — danach neu deployen.

cipi app clone

Seitdem v5.0, klonen Sie eine vorhandene Laravel-App in eine neue Staging- (oder Review-)App mit eine eigene Domäne. Sets cloned_from in apps.json; tut nicht Kopieren Sie webhook oder Git-IDs. Hat die Quelle Reverb, bekommt der Clone eigenen Port, Keys und Host (seit v5.1.2). Siehe cipi app reverb.

bash
$ cipi app clone myapp --domain=staging.myapp.com
$ cipi app clone myapp --domain=staging.myapp.com --name=myapp-stg --branch=develop --with-db
$ cipi app clone myapp --domain=staging.myapp.com --no-db
--domainErforderlich. Primäre Domäne für die neue App.
--nameOptionaler Linux-Benutzername für den Klon.
--branchZweig für den Klon bereitstellen (standardmäßig der Zweig der Quell-App).
--with-dbErstellen Sie eine neue Datenbank für Klonen.
--no-dbÜberspringen Sie die Datenbankbereitstellung für Klonen.

cipi app limits

Seitdem v5.0Legen Sie Ressourcenlimits pro App fest, wobei feste Obergrenzen von Cipi erzwungen werden.

bash
$ cipi app limits myapp --fpm-max-children=20 --memory-limit=256M
$ cipi app limits myapp --octane-workers=4 --worker-procs=3
$ cipi app limits myapp   # show current limits
--fpm-max-childrenPHP-FPM pm.max_children für FPM-Apps.
--memory-limitPHP memory_limit.
--octane-workersOctane Arbeitszahl für FrankenPHP Apps.
--worker-procsSupervisor Warteschlangenarbeitsprozess zählen.

app suspend / app unsuspend

Seitdem verfügbar v4.5.8. Nehmen Sie eine App offline, ohne sie zu löschen – nützlich für die Abrechnung Laderäume, Wartungsfenster oder Staging-Standorte, die vollständig abgedunkelt werden sollen. Durch das Anhalten wird der Nginx vhost ausgetauscht eine Statik HTTP 503 page served from /var/www/cipi-suspended/.

bash
$ cipi app suspend myapp      # take offline (503 page)
$ cipi app unsuspend myapp    # restore normal vhost
Befehl Beschreibung
cipi app suspend <app> Sets suspended: true in apps.json, baut den vhost neu auf Geben Sie 503 für alle Anfragen zurück. Idempotent, wenn bereits suspendiert.
cipi App-Suspendierung von <App> aufheben Löscht das Flag, stellt den normalen Laravel/benutzerdefinierten Vhost wieder her und wendet SSL Blöcke erneut an. Idempotent, wenn bereits online.

Verhalten

  • HTTPS inklusive – certbot klont den Suspensions-Vhost in den :443 Block, daher zeigt HTTPS auch die Offline-Seite an
  • Let's Encrypt funktioniert immer noch – die /.well-known/acme-challenge/ Pfad bleibt öffentlich, sodass Zertifikate während der Sperrung ausgestellt oder erneuert werden können
  • Überlebt die Vhost-Regeneration – Alias-Änderungen, PHP Bearbeitungen und SSL Installationen Respektieren Sie die hängende Flagge
  • Visible in listingscipi app list markiert gesperrte Apps; cipi domains anhängt ⏸ suspendedin jeder Zeile
Suspend vs. Basisauthentifizierung: cipi basicauth zeigt eine Anmeldeaufforderung an, führt Ihre App jedoch weiterhin aus. app suspend stoppt PHP vollständig und stellt eine statische Offline-Seite bereit – Besucher erreichen nie Laravel. Verwenden Sie suspend für „Site geschlossen“; Basisauthentifizierung für „Vorschau nur auf Einladung“.

Auch erhältlich über die RUHE API (POST /api/apps/{name}/suspend), cipi-cli (apps suspend) und die WHMCS-Modul (Aussetzen / Tasten zum Aufheben der Suspendierung). Erfordert Token-Fähigkeit apps-suspend für API Zugang.

cipi basicauth

Seitdem verfügbar v4.5.2. Schützen Sie jede App – Laravel oder benutzerdefinierte – hinter einem Nginx Eingabeaufforderung für Benutzername/Passwort. Nützlich zum Staging von Websites, internen Tools oder Apps, die noch nicht bereit sind noch kein öffentlicher Verkehr.

Befehl Beschreibung
cipi basicauth enable <app> [--user=NAME] [--password=PASS] Aktivieren Sie die HTTP-Basisauthentifizierung. Anmeldeinformationen werden generiert, wenn sie weggelassen werden, und werden einmal angezeigt Bildschirm – speichern Sie sie sofort
cipi basicauth deaktiviere <app> Entfernen Sie die Eingabeaufforderung und löschen Sie die gespeicherten Anmeldeinformationen
cipi BasicAuth-Status <App> Zeigt an, ob die Basisauthentifizierung aktiviert ist und den konfigurierten Benutzer

Anmeldeinformationen werden mit gehashtopenssl passwd -apr1 (nein apache2-utils benötigt) und darin gespeichert /etc/nginx/cipi-basicauth/<app>.htpasswd; Der aktivierte Zustand lebt inapps.json. Die auth_basic Anweisungen werden pro injiziert locationblockieren, sodass der Schutz die vhost-Neugenerierung übersteht (Aliasänderungen, PHP Bearbeitungen) und in den geklont wird :443 Blockierung durch Certbot – HTTPS sind ebenfalls abgedeckt. ACME-Herausforderungen bleiben bestehen öffentlich, sodass die Ausstellung und Erneuerung von Zertifikaten niemals blockiert wird. Die Basisauthentifizierung wird automatisch entfernt cipi app delete.

Dies unterscheidet sich von cipi auth, der die Composer verwaltet auth.json für private Paket-Repositorys.

ENV-Variablen verwalten

Jeder LaravelApp hat eine Single.env Datei wohnhaft bei /home/<app>/shared/.env. Benutzerdefinierte Apps haben keine .env. Es wird im Laufe von Cipi erstellt und vorbefüllt app create mit der Datenbank Anmeldeinformationen, APP_KEY, APP_URL, Cache-/Sitzungs-/Warteschlangeneinstellungen und die webhook-Token. Die shared/ Das Verzeichnis ist mit jeder Version symbolisch verknüpft, also dasselbe .env ist immer aktiv, unabhängig davon, welche Version aktuell ist.

Interaktiv bearbeiten über CLI

Der sicherste Weg, ENV-Werte zu ändern, ist über Cipi selbst – es öffnet die Datei in Nano als App Benutzer mit den richtigen Berechtigungen:

bash
$ cipi app env myapp

Sparen Sie mit Strg+O dann beenden Sie mit Strg+X. Änderungen werden für neue sofort wirksam Anfragen – für die meisten Werte ist kein Neustart erforderlich. Wenn Sie die Warteschlangenverbindung oder den Cache-Treiber ändern, Starten Sie die Arbeiter neu:

bash
$ cipi worker restart myapp

Nicht interaktive Flags (v5.0.3+)

Seitdem v5.0.3, Skripte, das Panel API und das Web GUI verwalten können.env ohne einen Editor zu öffnen:

bash
$ cipi app env myapp --show
$ cipi app env myapp --show --json
$ cipi app env myapp --get=APP_URL
$ cipi app env myapp --set=APP_DEBUG=false
$ cipi app env myapp --unset=LEGACY_KEY

RUHE: GET|PUT /api/apps/{name}/env (Fähigkeitapps-env, API 1.14+). MCP: AppEnvShow, AppEnvUpdate.

Direkt über SSH bearbeiten

Sie können die Datei auch direkt über SSH als Root oder als App-Benutzer bearbeiten:

bash
# as root
$ nano /home/myapp/shared/.env

# or switch to the app user first
$ su - myapp
$ nano ~/shared/.env

Wichtige ENV-Variablen, festgelegt durch Cipi

Variabel Beschreibung Festgelegt von
APP_KEY Laravel Verschlüsselungsschlüssel – wird einmal bei der App-Erstellung generiert Cipi
APP_URL Automatisch aktualisiert von cipi ssl install Cipi
DB_CONNECTION mysql für MariaDB (Drop-in-kompatibel), oder pgsql wenn die App Motor ist PostgreSQL (v4.8.0+) Cipi
DB_DATABASE / DB_USERNAME / DB_PASSWORD Automatisch generierte Anmeldeinformationen für die isolierte Datenbank der App Cipi
CACHE_STORE database – nutzt die Datenbank der App Cipi
SESSION_DRIVER database Cipi
QUEUE_CONNECTION database Cipi
BROADCAST_CONNECTION Bei Enable auf reverb; beim Disable zurück auf den vorherigen Treiber (oder log) (v5.1.2+) Cipi
REVERB_APP_ID / KEY / SECRET Einmal beim ersten cipi app reverb enable erzeugt, danach nie rotiert. Cipi (v5.1.2+)
REVERB_HOST / PORT / SCHEME Öffentlicher Socket, vom Zertifikat abgeleitet (https/443 oder http/80). Cipi (v5.1.2+)
VITE_REVERB_APP_KEY / HOST / PORT / SCHEME Öffentliche Kopien, von Vite zur Build-Zeit eingebacken. Nach Enable, Domainwechsel oder SSL neu deployen. Cipi (v5.1.2+)
REVERB_SERVER_HOST / PORT Localhost-Bind des Supervisor-Programms. Beim Disable entfernt; die Zugangsdaten bleiben. Cipi
CIPI_WEBHOOK_TOKEN HMAC-Geheimnis für die cipi-Agent webhook-Validierung Cipi
CIPI_APP_USER Linux-Benutzername, dem diese App gehört Cipi
CIPI_MCP Aktivieren oder deaktivieren Sie den integrierten MCP-Server unter /cipi/mcp Benutzer (true standardmäßig)
Ändern Sie die DB-Anmeldeinformationen nicht manuell. Wenn Sie die Datenbank neu generieren müssen Passwortverwendung cipi db password myapp (oder cipi app reset-db-password myapp) – es aktualisiert sowohl die Engine als auch die .env atomar. Wenn Sie sie manuell bearbeiten, besteht die Gefahr, dass die beiden nicht mehr synchron sind.

Hinzufügen eigener Variablen

Fügen Sie am Ende der Datei eine beliebige benutzerdefinierte Variable hinzu, wie Sie es normalerweise in einem Laravel-Projekt tun würden. Sie bleiben über Bereitstellungen hinweg erhalten, da die .env wohnt darin shared/ und ist wird nie vom Deployer überschrieben.

env
# your custom variables
STRIPE_KEY=sk_live_...
STRIPE_SECRET=sk_live_...
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailgun.org

cipi app run

Seitdem v5.0.3, führe a aus auf die Whitelist gesetzt, nicht interaktiv Befehl als App Benutzer – nützlich von CLI, Panel API und Web GUI „App-Befehle“. Editoren, Pager, Shells und REPLs sind blockiert (nano, vim, less, bash, tinker, …). Interaktive Flaggen (z. B. tail -f, php -a) sind abgelehnt.

bash
$ cipi app run myapp composer install --no-dev
$ cipi app run myapp npm ci
$ cipi app run myapp ls -la shared
$ cipi app run --commands          # list allowed binaries
$ cipi app run --commands --json

Zu den zulässigen Binärdateien gehören: composer, npm/npx/yarn/pnpm, ls/ll, cat/head/tail, Dateisystem Helfer, Archive, git, php, node, und find. RUHE: POST /api/apps/{name}/run (asynchroner Job, Fähigkeit apps-run) und GET /api/run-commands (API 1.14+). MCP: AppRun, AppRunCommands.

v5.0.4+ behoben /usr/bin/env: '--': No such file or directory— Jeder Befehl auf der Whitelist (einschließlich GUI App-Befehlen) schlug vor diesem Patch fehl. Lauf cipi self-update.

cipi app logs

Tail-Anwendungsprotokolle in Echtzeit. Die Protokolle werden täglich gewechselt und 14 Tage lang aufbewahrt. Von Standardmäßig werden alle Protokolle angezeigt, einschließlich Laravel täglicher Protokolle (laravel-YYYY-MM-DD.log) von shared/storage/logs/.

bash
$ cipi app logs myapp                  # all logs (incl. Laravel daily logs)
$ cipi app logs myapp --type=nginx     # Nginx access + error
$ cipi app logs myapp --type=php       # PHP-FPM errors
$ cipi app logs myapp --type=worker    # queue worker output
$ cipi app logs myapp --type=deploy    # deploy history
$ cipi app logs myapp --type=laravel   # Laravel application logs
--type=nginxNginx access and error logs
--type=phpPHP-FPM-Fehlerprotokoll
--type=workerSupervisor / Ausgabe des Warteschlangenarbeiters
--type=deployDeployer-Ausgabe – vollständiger Bereitstellungsverlauf mit Zeitstempel
--type=laravelLaravel Anwendungsprotokolle von shared/storage/logs/ (täglich wechselnd laravel-YYYY-MM-DD.log)

app artisan & app tinker

Führen Sie Artisan-Befehle aus und basteln Sie als App-Benutzer mit der richtigen PHP-Version und open_basedir Kontext – genau so, wie sie während einer Bereitstellung ausgeführt würden.

bash
$ cipi app artisan myapp migrate:status
$ cipi app artisan myapp queue:retry all
$ cipi app artisan myapp db:seed --class=ProductionSeeder
$ cipi app artisan myapp cache:clear
$ cipi app tinker myapp

SSH as the app user

Jede App läuft unter einem eigenen isolierten Linux-Benutzer. Manchmal muss man direkt darin arbeiten Benutzerumgebung – überprüfen Sie Dateien, führen Sie einmalige Skripts aus oder debuggen Sie etwas, das nur als reproduziert wird der richtige Benutzer.

Direktes SSH als App-Benutzer (empfohlen)

App-Benutzer können mit dem bei der App-Erstellung generierten Passwort direkt eine SSH-Verbindung zum Server herstellen:

bash
# connect as the app user (password auth)
$ ssh myapp@your-server-ip

# you are directly inside the app user's shell
myapp@server:~$ pwd
/home/myapp

myapp@server:~$ cd ~/current
myapp@server:~$ ls

Das Passwort wird angezeigt, wenn die App erstellt (oder verwendet) wird cipi app reset-password myapp zu regenerieren). Dies funktioniert für SFTP-Clients, IDE-Remotesitzungen und Terminalzugriff.

Über cipi (Admin-Pfad)

Wenn Sie bereits als verbunden sind cipikönnen Sie direkt zu jedem App-Benutzer wechseln:

bash
$ ssh cipi@your-server-ip
cipi@server:~$ sudo su - myapp

myapp@server:~$ pwd
/home/myapp

Setzen Sie das App-Benutzerkennwort zurück

Wenn Sie das Passwort eines App-Benutzers neu generieren müssen (z. B. für direktes SSH oder SFTP), verwenden Sie:

bash
$ cipi app reset-password myapp

Das neue Passwort wird auf dem Bildschirm angezeigt – speichern Sie es sofort.

Nützliche Befehle, sobald Sie als App-Benutzer angemeldet sind

bash
# navigate to the active release
myapp@server:~$ cd ~/current

# run artisan directly with the correct PHP version
myapp@server:~$ /usr/bin/php8.5 ~/current/artisan tinker

# inspect the shared .env
myapp@server:~$ cat ~/shared/.env

# tail all logs
myapp@server:~$ tail -f ~/logs/*.log

# check active releases (ll is a built-in alias for ls -al)
myapp@server:~$ ll ~/releases/

Jeder App-Benutzer .bashrc definiert ein Handy ll='ls -al' Alias (seit v4.5.5) für schnellere Verzeichniseinträge über SSH, neben dem deploy und composer Verknüpfungen. Apps, die vor 4.5.5 erstellt wurden, erhalten das ll Alias automatisch beim nächsten Mal cipi self-update über die 4.5.5 Migration.

Die des App-Benutzers open_basedir Beschränkung begrenzt PHP bis /home/myapp. Dies wird auf der PHP-FPM-Ebene erzwungen, nicht auf der Shell-Ebene – Sie können auf jede Datei zugreifen, die Sie haben Shell-Benutzer können lesen, wenn sie im Terminal arbeiten.