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 (standardmäßig MariaDB; optional PostgreSQL seitdem v4.8.0), Supervisor Worker, Crontab-Eintrag, Deployer-Releases ohne Ausfallzeiten, SSH Bereitstellungsschlüssel und automatisch kompiliert .env. Benutzerdefinierte Apps sind einfacher – siehe benutzerdefinierte 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=frankenphpServieren HTTP ü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 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.0, Laravel Apps können HTTP über 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 bereit von current/publicKein FPM-Pool pro App
  • Supervisor Programm ${app}-octane neben Warteschlangenarbeitern
  • Bereitstellungsvorlage 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 Tipp: 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 vorkonfiguriert mit 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 erstellt /home/<app>/htdocs mit einem Platzhalter index.html und tut Konfigurieren Sie keinen Bereitstellungsschlüssel oder webhook – mit dem Sie Dateien hochladen SFTP (oder SCP/rsync) zu ~/htdocs als 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> Code hineinziehen 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. Siehe cipi Datenbank 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-Liste 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) wird weggelassen, wenn nur SFTP ohne a Repository.
cipi app edit <app> --php=8.5 Hot-Swap-Version PHP. Aktualisiert den 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ärdatenbank in Aliase, generiert den Nginx vhost neu und 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 (seitdem) einen Knoten-Build nach Composer-Anbietern aus 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 GitHub/GitLab neu. Deploy webhook; 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 den Schlüssel webhook/deploy 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 Datenbankkennwort 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), den 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 Panel API und cipi-cli

cipi app reverb

Seitdem v5.0, aktivieren Laravel Reverb für Erstanbieter-WebSockets auf a Laravel App. Cipi weist einen Localhost-Port zu 9000–9099, fügt das Programm Supervisor hinzu ${app}-reverb, Proxys Nginx /app an diesen Port und schreibt REVERB_* in .env.

bash
$ cipi app reverb enable myapp
$ cipi app reverb status myapp
$ cipi app reverb disable myapp

cipi app clone

Seitdem v5.0, klonen Sie eine vorhandene Laravel-App in eine neue Staging- (oder Überprüfungs-)App mit eine eigene Domäne. Sets cloned_from in apps.json; tut nicht Kopieren Sie webhook oder Git-IDs.

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 durch 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 Worker-Anzahl 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 vhost Nginx ausgetauscht eine Statik HTTP 503 Seite bereitgestellt von /var/www/cipi-suspended/.

bash
$ cipi app suspend myapp      # take offline (503 page)
$ cipi app unsuspend myapp    # restore normal vhost
Befehl Beschreibung
cipi App hält <App> an 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/custom vhost wieder her und wendet SSL-Blöcke erneut an. Idempotent, wenn bereits online.

Verhalten

  • HTTPS enthalten – 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
  • In Einträgen sichtbarcipi app list markiert gesperrte Apps; cipi domains anhängt ⏸ suspended in 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 Zugriff.

cipi basicauth

Seitdem verfügbar v4.5.2. Schützen Sie jede App – Laravel oder benutzerdefiniert – 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 Basisauthentifizierung HTTP. Anmeldeinformationen werden generiert, wenn sie weggelassen werden, und werden einmal angezeigt Bildschirm – speichern Sie sie sofort
cipi basicauth deaktiviert <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 gehasht openssl passwd -apr1 (nein apache2-utils benötigt) und darin gespeichert /etc/nginx/cipi-basicauth/<app>.htpasswd; Der aktivierte Zustand lebt in apps.json. Die auth_basic Anweisungen werden pro injiziert location blockieren, sodass der Schutz die vhost-Neugenerierung übersteht (Aliasänderungen, PHP-Änderungen) und in die geklont wird :443 Blockierung durch Certbot – HTTPS ist 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, das den Composer verwaltet auth.json für private Paket-Repositorys.

ENV-Variablen verwalten

Jeder Laravel App hat eine Single .env Datei wohnhaft bei /home/<app>/shared/.env. Benutzerdefinierte Apps haben keine .env. Es wird währenddessen von Cipi erstellt und vorab gefü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ähigkeit apps-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

Von Cipi festgelegte Schlüssel-ENV-Variablen

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 Engine 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
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 aus den „App-Befehlen“ CLI, Panel API und Web GUI. 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-Befehle) 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 der täglichen Protokolle Laravel (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 Zugriffs- und Fehlerprotokolle
--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 und Tinker als App-Benutzer mit der richtigen PHP-Version aus 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 als App-Benutzer

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 (Administratorpfad)

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 Einschränkung beschränkt PHP auf /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.