Apps
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)
$ cipi app create
Laravel Octane (FrankenPHP)
$ 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)
$ 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
Apps
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–8999und Geschäfteoctane/octane_portinapps.json - Nginx vhost verwendet
proxy_passbis Octane und stellt statische Dateien bereit voncurrent/public— Kein FPM-Pool pro App - Supervisor Programm
${app}-octaneneben Warteschlangenarbeitern - Bereitstellungsvorlage
laravel-octane.phpstartet / 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.
# 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.
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:
$ cipi app create --custom --user=mysite --domain=mysite.com \
--repository=git@github.com:you/mysite.git --docroot=dist
Nur SFTP – weglassen --repository und --branch:
$ 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.
$ 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.
$ 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
cipi app limits
Seitdem v5.0Legen Sie Ressourcenlimits pro App fest, wobei feste Obergrenzen durch Cipi erzwungen werden.
$ 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
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/.
$ 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
:443Block, 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 sichtbar —
cipi app listmarkiert gesperrte Apps;cipi domainsanhängt⏸ suspendedin jeder Zeile
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.
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:
$ 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:
$ 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:
$ 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:
# 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) |
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.
# 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.
$ 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.
/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/.
$ 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
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.
$ 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:
# 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:
$ 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:
$ 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
# 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.
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.