cipi php

PHP 8.5 wird beim Setup vorinstalliert. Weitere Versionen können jederzeit hinzugefügt werden; seitdem v4.5.12 Cipi prüft APT Quellen pro Ubuntu Codename – normalerweise die ondrej/php PPA am 24.04, Pakete.sury.org am 26.04, wenn Launchpad keine Suite hat, oder Ubuntu main als letzter Ausweg (koinstallierbar 8.3–8.5, sofern das ausgewählte Repo dies unterstützt).

Seitdem v4.5.4 Cipi Pakete Bereitsteller 8, was erfordert PHP ≥ 8.3. cipi php install, cipi php switch, cipi app create und cipi app edit daher nur akzeptieren 8.3, 8.4 und 8.5. Ältere Versionen (7.4–8.2) bleiben also weiterhin erkennbar und entfernbar Sie können einen Server vor 4.5.4 immer noch mit bereinigen cipi php remove <old-version>.
bash
$ cipi php list              # list installed versions, status, and system default
$ cipi php install 8.4       # install an additional PHP version (8.3–8.5)
$ cipi php switch 8.4        # set system default (root/cipi, API pool)
$ cipi php remove 8.1        # remove a version, incl. legacy (blocks if default or apps use it)
$ cipi php upgrade           # apply security patches to all installed PHP packages

Sicherheitspatch-Upgrades

Seitdem v4.7.13, PHP Pakete sind davon ausgeschlossen unattended-upgrades und stattdessen von Cipi verwaltet. cipi php upgrade läuft apt-get update und --only-upgrade auf jedem installiert php* und libphp* Paket und startet dann die betroffenen PHP-FPM-Pools neu. Wenn SMTP konfiguriert ist und Pakete wurden aktualisiert, Cipi sendet eine E-Mail (php_upgrade auslösen; deaktivieren mit cipi notifications disable php_upgrade).

Eine wöchentliche Prüfung läuft automatisch ab Sonntag um 03:30 Uhr über Root Crontab (umschlossen von cipi-cron-notify). Protokoll: /var/log/cipi/php-upgrade.log. Bestehende Server erhalten den cron cipi self-update (Migration 4.7.13).

Systemstandard vs. App-spezifisch PHP

Die Systemstandard ist die PHP-Version, die von verwendet wird root und cipi Benutzer, der FPM-Pool Cipi API und der Warteschlangenarbeiter API. Benutzen cipi php switch <ver> zu ändere es. Der Befehl migriert den API-Pool (und den GUI FPM-Pool, sofern installiert) und erstellt ihn neu Panel-Sockets und startet den API-Worker neu. Seitdem 5.0.9+, PUT /api/php/default umschließt dies über das Panel API (php-manage Fähigkeit). Seitdem 5.0.10–5.0.12, Schalter toleriert teilweise update-alternatives Bei Erfolg werden schreibgeschützte Roots bei Bedarf erneut bereitgestellt und API/GUI beibehalten. FPM-Pools auf der Zielversion, um nginx 502 zu vermeiden.

RUHE: GET /api/php, POST /api/php/install, DELETE /api/php/{version}, PUT /api/php/default (API 1.15.0+ / Cipi 5.0.6+). CLI JSON: cipi php list --json (seit 5.0.6).

Jede App hat ihre eigene besitzen PHP Version (eingestellt auf app create oder über cipi app edit --php=). Deployer, Composer, Crontab-Bereitstellungstrigger und cipi sync import Wird immer mit dem konfigurierten PHP der App ausgeführt – niemals mit dem Systemstandard.

Um eine vorhandene App auf eine andere Version umzustellen:

bash
$ cipi app edit myapp --php=8.5

Dadurch wird die Version PHP ohne Ausfallzeit im laufenden Betrieb ausgetauscht: Der FPM-Pool, der Nginx-Socket und Supervisor werden aktualisiert. Worker, Crontab, Deployer-Konfiguration und .env in einer atomaren Operation.

cipi db

Cipi erstellt für jeden eine eigene Datenbank Laravel App automatisch während app create. MariaDB (Hafen 3306) ist die native Standardeinstellung; seitdem v4.8.0 Sie können es auch optional installieren PostgreSQL (Hafen 5432) und wählen Sie eine Engine pro Datenbank oder App aus. Benutzerdefinierte Apps erhalten keine Datenbank – verwenden cipi db create --name=<app> wenn Sie eines benötigen (z. B. für WordPress oder ein anderes). CMS). Nach der Einrichtung wird eine gebrauchsfertige Verbindungs-URL angezeigt (MariaDB:mariadb+ssh://), kombiniert SSH-Anmeldeinformationen, Server-IP und Datenbankinformationen für GUI Clients wie TablePlus, DBeaver oder Sequel Pro.

Motoren (v4.8.0+)

bash
$ cipi db install pgsql              # install optional PostgreSQL
$ cipi db uninstall pgsql|mariadb    # remove a non-default engine (destroys data)
$ cipi db default mariadb|pgsql      # server-wide default when --engine is omitted
$ cipi db engines                    # installed engines, ports, and default

Datenbanklebenszyklus

bash
$ cipi db create                              # interactive
$ cipi db create --name=analytics             # non-interactive (default engine)
$ cipi db create --name=analytics --engine=pgsql
$ cipi db list [--engine=mariadb|pgsql]       # list databases with sizes
$ cipi db backup myapp [--engine=…]
$ cipi db restore myapp backup.sql.gz [--engine=…]
$ cipi db password myapp [--engine=…]         # regenerate password
$ cipi db delete analytics [--engine=…]

Laravel Apps speichern die ausgewählte Engine in App-Metadaten; Sichern, synchronisieren und cipi app reset-db-password Folge ihm. Benutzen cipi app create --engine=pgsql (oder die interaktive Eingabeaufforderung), um eine Laravel-App bereitzustellen auf PostgreSQL — .env und die Verbindungs-URL stimmen mit der Engine überein. Zurücksetzen des Root-Passworts: cipi reset db-password [--engine=].

cipi alias

Fügen Sie jeder App mehrere Domänen oder Subdomänen hinzu. Führen Sie nach dem Hinzufügen von Aliasen Folgendes aus: cipi ssl install das Zertifikat mit SAN-Abdeckung für alle bereitzustellen oder zu erneuern Domänen. Seitdemv4.8.0, cipi alias add|remove regeneriert den vhost und wendet SSL erneut an certbot install --redirect daher wird HTTPS nicht gelöscht.

bash
$ cipi alias add myapp www.myapp.com
$ cipi alias add myapp myapp.it
$ cipi alias list myapp
$ cipi alias remove myapp myapp.it

Für kanonische Weiterleitungen www ↔ Apex bevorzugen Sie cipi www anstatt den Gegenhost manuell zu verwalten.

cipi www

Seitdem verfügbar v4.8.0. Verwalten Sie www/apex-Aliase und kanonische 301-Weiterleitungen für eine App. Staat lebt in apps.json (www_redirect); Nginx gibt ein dediziertes aus Umleitungsserverblock (ACME-Pfad bleibt öffentlich), der die vhost-Neugenerierung übersteht. SSL wird erneut angewendet über certbot install --redirect.

bash
$ cipi www add myapp              # add counterpart host (www ↔ apex)
$ cipi www force-to-root myapp    # 301 www.domain → domain
$ cipi www force-from-root myapp  # 301 domain → www.domain
$ cipi www clear myapp            # clear redirect state
$ cipi www status myapp           # inspect redirect state

force-to-root / force-from-root Fügen Sie den fehlenden Alias ​​bei Bedarf automatisch hinzu.

cipi domains

Seitdem verfügbar v4.5.5. Ein Befehl der obersten Ebene, der auflistet jeder Domain und Alias übergreifend alle Apps in einer einzigen Tabelle – das globale Gegenstück zu die Pro-App cipi alias list <app>. Ideal für die Prüfung des Ganzen Domain-zu-App-Mapping oder Erkennen einer Domain, der noch ein Zertifikat fehlt.

bash
$ cipi domains   # list all domains and aliases across every app

Jede Zeile zeigt die folgenden Spalten:

Spalte Beschreibung
DOMÄNE Der Domänen- oder Aliasname. Die Zeilen werden alphabetisch nach Domäne sortiert.
APP Die App, die die Domäne besitzt.
Freundlich primary oder alias.
TYP Laravel oder Custom.
PHP Die PHP-Version der App.
DOCROOT public für Laravel Apps, /<docroot> für benutzerdefinierte Apps.
ZWEIG Der für die App bereitgestellte Git-Zweig.
LETZTE BEREITSTELLUNG Menschenrelatives Alter (just now, 10m ago, 2h ago, 3d ago, 2w ago, 2mo ago, 2y ago) — abgeleitet von der Mtime der App current Symlink, welcher Deployer Zeigt bei jeder erfolgreichen Bereitstellung atomar neu an. Zeigt - als die App war nie eingesetzt.
SSL Status des Zertifikats pro Name (/), erkannt von /etc/letsencrypt/live/<domain>.
REPOSITORY Das Git-Repository, oder (SFTP only) für benutzerdefinierte Apps ohne Repo.
(Suffix) Wenn die besitzende App angehalten wird, endet jede Zeile mit ⏸ suspended (Gelb). In der Fußzeile wird auch angezeigt, wie viele Apps gesperrt sind.

In einer Fußzeile werden die Gesamtzahlen (Anzahl der Domänen, Apps, Zertifikate und gesperrten Apps) zusammengefasst Es ist einfach, die gesamte Zuordnung auf einen Blick zu überprüfen.

cipi ssl

Certbot verwaltet Let's Encrypt Zertifikate. Zertifikate erneuern sich automatisch über einen wöchentlichen cron. cipi ssl status Zeigt Ablaufdaten mit farbcodierten Warnhinweisen an: grün (>30 Tage), gelb (14–30 Tage), rot (<14 Tage).

bash
$ cipi ssl install myapp   # provision / renew — includes all aliases (SAN)
$ cipi ssl force myapp     # re-apply HTTP→HTTPS redirect (no new issuance)
$ cipi ssl renew            # force renewal of all certificates
$ cipi ssl status           # show all certs with expiry dates

# DNS-01 via Cloudflare (v5.0+) — wildcard certs
$ cipi ssl dns set --provider=cloudflare --token=YOUR_CF_TOKEN
$ cipi ssl install myapp --dns=cloudflare
$ cipi ssl install myapp --dns=cloudflare --wildcard

Seitdem v4.8.0, cipi ssl force <app> wendet HTTP → HTTPS erneut an Weiterleitung für eine App, die bereits über ein Let's Encrypt-Zertifikat verfügt – ohne ein neues auszustellen. cipi ssl install setzt auch force_https in apps.json automatisch.

Seitdem v5.0, optional DNS-01 Herausforderungen über Cloudflare ersetzen die Standardfluss HTTP-01, wenn Sie Platzhalterzertifikate benötigen oder Port 80 nicht verfügbar machen können. Einmal konfigurieren mit cipi ssl dns set, dann pass --dns=cloudflare (und optional --wildcard) zu cipi ssl install.

Nach dem Hinzufügen von Domänenaliasen mit cipi alias add, immer laufen cipi ssl install erneut, um ein neues SAN-Zertifikat bereitzustellen, das alle Domänen abdeckt. Wenn die Umleitung HTTPS nach einer vhost-Änderung verloren gegangen ist, verwenden Sie cipi ssl forcestatt Neuausgabe.

cipi backup

Sichern Sie Datenbanken und Speicher auf Amazon S3 oder einem beliebigen S3-kompatiblen Anbieter (Hetzner Object Storage, DigitalOcean Spaces, Backblaze B2, MinIO usw.).

Einrichtung

bash
$ cipi backup configure
# → AWS Access Key ID
# → AWS Secret Access Key
# → Bucket name
# → Region
# → Endpoint URL (leave empty for AWS; required for other providers)

S3-kompatible Endpunkte

Anbieter Endpunkt-URL
AWS S3 leer lassen
Hetzner https://<datacenter>.your-objectstorage.com
DigitalOcean Spaces https://<region>.digitaloceanspaces.com
Backblaze B2 https://s3.<region>.backblazeb2.com
MinIO https://your-minio-host

Backups ausführen

bash
$ cipi backup configure              # configure S3 credentials
$ cipi backup run                    # backup all apps
$ cipi backup run myapp              # backup a single app
$ cipi backup list                   # list all backups
$ cipi backup list myapp             # list backups for one app
$ cipi backup prune myapp --weeks=4  # delete backups older than 4 weeks

Jedes Backup wird hochgeladen s3://your-bucket/cipi/appname/YYYY-MM-DD_HHMMSS/ und enthält:

  • db.sql.gz — komprimierter Datenbank-Dump
  • shared.tar.gz – das Ganze shared/ Verzeichnis (.env + storage/)

Seitdem v4.7.14, Backup-Staging ist standardmäßig auf /var/tmp (Festplatte) statt /tmp (häufig ein kleines RAM-gestütztes tmpfs), sodass große Apps nicht mehr während der Sicherung ausfallen, wenn tmpfs füllt sich. Überschreiben mit tmpdir in backup.json (eingestellt über cipi backup configure) oder die CIPI_BACKUP_TMPDIR Umgebungsvariable.

Automatische Backups planen

bash
# Add to root crontab (crontab -e)
0 2 * * * /usr/local/bin/cipi backup run >> /var/log/cipi/backup.log 2>&1

Alte Backups aus S3 bereinigen

Mit der Zeit sammeln sich Backups an. Benutzen cipi backup prune um Sicherungsordner zu löschen, die älter sind als N Wochen von S3. Führen Sie es als cron-Job neben der Sicherung selbst aus.

bash
$ cipi backup prune myapp --weeks=4   # delete backups older than 4 weeks
$ cipi backup prune myapp --weeks=2   # keep only the last 2 weeks

Fügen Sie beide Befehle zur Root-Crontab hinzu, damit sie automatisch ausgeführt werden:

bash
# root crontab — backup at 02:00, prune at 03:00 (keep 4 weeks)
0 2 * * * /usr/local/bin/cipi backup run myapp >> /var/log/cipi/backup.log 2>&1
0 3 * * * /usr/local/bin/cipi backup prune myapp --weeks=4 >> /var/log/cipi/backup-prune.log 2>&1
cipi backup prune liest S3 Anmeldeinformationen aus /etc/cipi/backup.conf, geschrieben von cipi backup configure. Es funktioniert mit jedem S3-kompatiblen Anbieter. Anpassen --weeks passend zu Ihrer Aufbewahrungsrichtlinie (z. B. --weeks=2 für zwei Wochen, --weeks=8 für zwei Monate).

Benutzer-Crontab

Cipi fügt automatisch einen Crontab-Eintrag für den Laravel-Planer hinzu, wenn eine App erstellt wird:

bash
# installed automatically by cipi app create
* * * * * /usr/bin/php8.5 /home/myapp/current/artisan schedule:run >> /dev/null 2>&1

Dieser Eintrag läuft als myapp Linux-Benutzer jede Minute unter Verwendung der ausgewählten Version PHP die App. Es wird automatisch aktualisiert, wenn Sie die Version von PHP über ändern cipi app edit myapp --php=X.

Anzeigen der aktuellen Crontab

bash
# as root — view the app user's crontab
$ crontab -u myapp -l

# or after switching to the app user
$ su - myapp
myapp@server:~$ crontab -l

Hinzufügen benutzerdefinierter cron-Jobs

Sie können der Crontab des App-Benutzers zusätzliche cron-Jobs hinzufügen. Wechseln Sie zuerst zum App-Benutzer, um Jobs sicherzustellen Mit dem richtigen Benutzerkontext und den richtigen Dateiberechtigungen ausführen:

bash
$ su - myapp
myapp@server:~$ crontab -e

Beispieleinträge, die Sie hinzufügen könnten:

bash
# existing Laravel scheduler (do not remove)
* * * * * /usr/bin/php8.5 /home/myapp/current/artisan schedule:run >> /dev/null 2>&1

# nightly database backup at 2 AM
0 2 * * * /usr/local/bin/cipi db backup myapp >> /home/myapp/logs/backup.log 2>&1

# custom script every 15 minutes
*/15 * * * * /home/myapp/current/scripts/sync.sh >> /home/myapp/logs/sync.log 2>&1
Entfernen Sie nicht den Scheduler-Eintrag Laravel. Cipi fügt es nicht erneut hinzu automatisch, wenn es gelöscht wird – Sie müssten es ausführen cipi app edit myapp --php=<current-version> um es wiederherzustellen. Behalten Sie immer die schedule:run Geben Sie die Zeile als ersten Eintrag ein, damit sie leicht zu identifizieren ist.
Cron Jobs werden als App-Benutzer ausgeführt. Sie respektieren die gleichen Dateisystembeschränkungen wie die App selbst. Wenn ein cron-Job Dateien schreiben muss, stellen Sie sicher, dass der Zielpfad darin enthalten ist /home/myapp/. Jobs, die Root-Zugriff erfordern, sollten zur Root-Crontab hinzugefügt werden stattdessen mit crontab -e als Wurzel.

Überprüfen, ob cron funktioniert

bash
# check system cron log
$ grep CRON /var/log/syslog | grep myapp | tail -20

# check Laravel scheduler execution
$ cipi app artisan myapp schedule:list

cipi schedule

Seitdem v5.0, verwalten Sie den Laravel Scheduler-Crontab-Eintrag, der ausgeführt wird schedule:run (Die Crontab selbst existierte bereits; sie ist jetzt umschaltbar und kann nachverfolgt werden apps.json).

bash
$ cipi schedule on myapp
$ cipi schedule off myapp
$ cipi schedule status myapp

cipi worker & Laravel Horizon

Jede App erhält einen Standard-Supervisor-Worker für default Warteschlange. Sie können weitere hinzufügen Warteschlangen mit benutzerdefinierten Prozesszahlen und Zeitüberschreitungen.

bash
$ cipi worker add myapp --queue=emails --processes=3
$ cipi worker add myapp --queue=exports --processes=1 --timeout=7200
$ cipi worker list myapp
$ cipi worker edit myapp --queue=default --processes=3
$ cipi worker remove myapp emails
$ cipi worker restart myapp   # restart all workers for the app
$ cipi worker stop myapp      # stop all workers for the app (used during deploys)

# Laravel Horizon (v5.0+) — mutually exclusive with queue:work workers
$ cipi worker horizon enable myapp
$ cipi worker horizon status myapp
$ cipi worker horizon disable myapp

Mit Horizon aktiviert, die Bereitstellung wird ausgeführt horizon:terminate und startet neu Arbeiter über cipi-worker. Sie können nicht klassisch laufen queue:work Arbeiter und Horizon gleichzeitig in derselben App.

Flagge Beschreibung
--queue=<Name> Zu verwendender Warteschlangenname (z. B. default, emails, exports)
--processes=<n> Anzahl paralleler Worker-Prozesse
--timeout=<Sekunden> Job-Timeout in Sekunden. Der Standardwert ist 60.

Worker werden vor dem Symlink-Austausch gestoppt und nach jedem Deployment neu gestartet, um dies zu verhindern Supervisor von der Abholung veraltet artisan Wege. Supervisor ist mit konfiguriert autorestart=unexpected Daher werden Worker nur bei unerwarteten Exits neu gestartet, nicht bei ordnungsgemäßen Exits stoppt.

App-Benutzerhelfer: cipi-worker

Jeder App-Benutzer kann Worker ohne Root neu starten, stoppen oder überprüfen – über einen eingeschränkten sudo-Helper installiert bei /usr/local/bin/cipi-worker:

bash
# run as the app user (SSH or sudo su - myapp)
$ sudo cipi-worker status myapp
$ sudo cipi-worker stop myapp      # used by Deployer before symlink swap
$ sudo cipi-worker restart myapp

Als Root verwenden cipi worker list|restart|stop <app> stattdessen. Es gibt keine cipi worker status Admin-Befehl – verwenden cipi worker list oder der App-Benutzer Helfer oben.

cipi health

Seitdem v5.0, konfigurieren Sie HTTP Integritätsprüfungen pro App. Ein cron wird alle 5 Minuten ausgeführt. danach 3 aufeinanderfolgende Fehler Cipi benachrichtigt über health_fail Trigger (SMTP wann konfiguriert).

bash
$ cipi health set myapp --url=https://myapp.com/up --expect=200
$ cipi health check myapp
$ cipi health list
$ cipi health unset myapp

# Structured output (v5.0.6+) — panel API / scripts
$ cipi health list --json
$ cipi health check myapp --json

RUHE: GET /api/health, GET|PUT|DELETE /api/apps/{name}/health, POST /api/apps/{name}/health/check (API 1.15.0+ / Cipi 5.0.6+).

cipi firewall

Cipi installiert UFW mit standardmäßig geöffneten Ports 22, 80 und 443. Verwenden Sie zur Verwaltung die Firewall-Befehle zusätzliche Regeln, ohne UFW direkt zu berühren.

bash
$ cipi firewall allow 3306                  # open a port
$ cipi firewall allow 3306 --from=10.0.0.5  # allow from specific IP
$ cipi firewall allow 3306 --from=10.0.0.0/24 # allow from subnet
$ cipi firewall deny 8080                   # block a port
$ cipi firewall list                        # show all rules

cipi ban

Überprüfen und verwalten Sie Fail2ban-Verbote direkt aus dem CLI. Cipi konfiguriert Fail2ban mit Progressive Sperre: eine 24-Stunden-Grundsperre, die sich bei jedem wiederholten Vergehen verdoppelt, bis zu einer Höchstdauer von 7 Tagen, mit maximaler Wiederholungsversuche auf 3 reduziert. Ein dedizierter recidive Nach drei Sperren werden Wiederholungstäter für sieben Tage ins Gefängnis gesperrt innerhalb von 24 Stunden.

bash
$ cipi ban list                        # list all banned IPs, grouped by jail
$ cipi ban unban 203.0.113.42           # unban a specific IP from all jails

cipi ban list

Listet alle derzeit von Fail2ban gesperrten IP-Adressen auf, gruppiert nach Gefängnis (z. B. sshd, recidive). Nützlich für eine schnelle Sicherheitsüberprüfung oder vor der Durchführung einer Aufhebung des Banns.

cipi ban unban <IP>

Entfernt die angegebene IP von alle Fail2ban-Gefängnisse auf einmal. Praktisch, wenn Sie ein legitimer Benutzer sind oder der CI-Läufer wird versehentlich ausgesperrt.

Vorhandene Installationen werden bei der Ausführung automatisch durch das 4.3.0-Migrationsskript aktualisiert cipi self-update. Es ist keine manuelle Konfiguration erforderlich.

cipi service

Überprüfen und steuern Sie die Systemdienste, die Cipi direkt vom CLI aus versorgen. Nginx verwendet eine anmutige Neuladen (keine Ausfallzeit) anstelle eines vollständigen Neustarts.

bash
$ cipi service list                    # status of all services
$ cipi service list nginx              # status of a specific service
$ cipi service restart                 # restart all services
$ cipi service restart nginx           # graceful reload (zero downtime)
$ cipi service restart php             # restart all PHP-FPM versions
$ cipi service start fail2ban
$ cipi service stop supervisor         # asks for confirmation

# Structured output (v5.0.6+) — panel API
$ cipi service list --json

RUHE: GET /api/services, POST /api/services/{name}/restart (API 1.15.0+ / Cipi 5.0.6+; Fähigkeiten services-view / services-manage).

Unterstützte Dienstnamen: nginx, mariadb, postgresql (Aliasnamen: pgsql, postgres — bei Installation über cipi db install pgsql), valkey-server, supervisor, fail2ban, php<ver>-fpm (z.B. php8.5-fpm). Das Schlüsselwort php zielt auf alle installierten PHP-FPM-Versionen gleichzeitig ab. Für das Cache-Backend: redis-server, redis, und valkey werden als Aliase von akzeptiert valkey-server.

Valkey – der BSD-lizenzierte, Redis-kompatible Fork – ist im Standard-Stack enthalten und ersetzt ihn redis-server seit Cipi 4.5.6. Es wird mit einem Passwort installiert, an das gebunden ist localhost nur und seine Anmeldeinformationen (Benutzer, Passwort) werden darin gespeichert /etc/cipi/server.json und am Ende der Installation angezeigt. valkey-server wird zur Blacklist für unbeaufsichtigte Upgrades hinzugefügt – Cipi verwaltet es, also ist es nicht automatisch aktualisiert. Siehe die Valkey Weitere Informationen finden Sie im Abschnitt und die automatische Redis → Valkey Migration.

cipi ssh – SSH-Schlüsselverwaltung

Verwalten Sie die autorisierten SSH-Schlüssel für cipi user – der Administrator-SSH-Einstiegspunkt. Die cipi Benutzer (Gruppe cipi-ssh) verwendet nur den öffentlichen Schlüssel; Root-Login ist deaktiviert. App-Benutzer (Gruppe cipi-apps) Mit Passwort verbinden – siehe SSH als der App-Benutzer.

Befehle

bash
$ cipi ssh list                 # list all authorized keys with fingerprint, comment, and current-session marker
$ cipi ssh add [key]             # add a new SSH public key (validates format, prevents duplicates)
$ cipi ssh remove [n]            # remove a key by number
$ cipi ssh rename [n] [name]     # change the display name / comment of a key

# Structured output (v5.0.6+) — panel API
$ cipi ssh list --json

RUHE: GET|POST /api/ssh/keys, DELETE /api/ssh/keys/{n} (API 1.15.0+ / Cipi 5.0.6+).

Sicherheitsmechanismen

cipi ssh remove enthält zwei Sicherheitsmaßnahmen zur Verhinderung einer Aussperrung:

  • Schutz der aktuellen Sitzung – Sie können den von Ihrem aktiven SSH verwendeten Schlüssel nicht entfernen Sitzung.
  • Schutz des letzten Schlüssels — Sie können den letzten verbleibenden autorisierten Schlüssel nicht entfernen.

Wichtige Kommentare

SSH-Schlüssel werden mit intakten Originalkommentaren gespeichert, sodass sich die einzelnen Schlüssel leicht identifizieren lassen gehört dazu. Benutzen cipi ssh rename So ändern Sie den Anzeigenamen einer beliebigen Taste:

bash
# list keys to find the number
$ cipi ssh list

# rename key #2
$ cipi ssh rename 2 "john-macbook"

E-Mail-Benachrichtigungen

Wenn SMTP konfiguriert ist, sendet Cipi jedes Mal eine E-Mail-Benachrichtigung, wenn ein Schlüssel hinzugefügt, entfernt oder umbenannt wird. Die Benachrichtigung umfasst den Server-Hostnamen, die IP-Adresse, den Schlüsselfingerabdruck, den Schlüsselkommentar, den Zeitstempel, und verbleibende Schlüsselanzahl. Umbenennungsbenachrichtigungen enthalten auch den alten und neuen Schlüsselnamen.

cipi – Server- und Selbstaktualisierung

Befehle der obersten Ebene für den Serverstatus und die Cipi-Selbstverwaltung.

bash
$ cipi status              # CPU, RAM, disk, services, PHP versions, apps
$ cipi version             # show installed Cipi version
$ cipi self-update         # update Cipi to the latest version
$ cipi self-update --check # check for updates without installing

Zurücksetzen von Passwort und Anmeldeinformationen

Cipi bietet Befehle zum Neugenerieren von Passwörtern auf Serverebene. Neue Passwörter werden in gespeichert /etc/cipi/server.json (über Vault verschlüsselt) und auf dem Bildschirm angezeigt. Speichern Sie sie sofort — Sie werden nur einmal angezeigt.

bash
$ cipi reset root-password              # regenerate the root Linux user SSH password
$ cipi reset db-password [--engine=…]   # regenerate root password (default or chosen engine)
$ cipi reset valkey-password           # regenerate the Valkey password and restart the service
cipi reset valkey-password (alias cipi reset redis-password) startet den Dienst Valkey neu. Verbundene Clients werden vorübergehend getrennt. Wenn Ihre Apps Verwenden Sie Valkey für Cache oder Sitzungen. Erwarten Sie eine kurze Unterbrechung.