Erste Schritte
Cipi installieren
Cipi installiert einen vollständigen Laravel-bereiten Produktionsstapel auf Ubuntu 24.04 oder 26.04 mit einem einzigen
Befehl. Das Installationsprogramm dauert etwa 10 Minuten und richtet Nginx, MariaDB, PHP, Valkey ein.
(optional PostgreSQL über cipi db install pgsql nach der Installation),
Supervisor, Fail2ban, UFW, Certbot, Deployer und die cipi CLI selbst.
Während der Installation wird der Assistent fragt nach Ihrem öffentlichen SSH-Schlüssel (akzeptierte Formate:
ssh-rsa, ssh-ed25519, ecdsa), bevor ein Paket vorliegt
installiert. Cipi erstellt eine dedizierte cipi Linux-Benutzer für Admin-SSH
Zugang
und wendet SSH-Härtung an: Root-Login ist deaktiviert, cipi verwendet nur den öffentlichen Schlüssel (Gruppe
cipi-ssh), App-Benutzer (Gruppe cipi-apps) kann sich mit Passwort verbinden. Anmelden
Versuche sind auf 3 mit einer Kulanzfrist von 20 Sekunden begrenzt und die X11-Weiterleitung ist deaktiviert.
Das Installationsprogramm generiert außerdem eine Zufälliges 40-stelliges Root-Passwort, speichert es in
/etc/cipi/server.jsonund zeigt es in der Installationszusammenfassung an. Eingefügte SSH-Schlüssel sind
automatisch bereinigt – Kommentare, Wagenrückläufe und überschüssiger Leerraum werden zuvor entfernt
Validierung.
Standardinstallation
$ wget -O - https://cipi.sh/setup.sh | bash
Nicht interaktive Installation
Für automatisierte Setups übergeben Sie Ihren öffentlichen SSH-Schlüssel über SSH_PUBKEY Umgebungsvariable
So überspringen Sie die interaktive Eingabeaufforderung:
$ SSH_PUBKEY="ssh-ed25519 AAAA..." wget -O - https://cipi.sh/setup.sh | bash
ssh-keygen -t rsa -b 4096
AWS (Root-Anmeldung standardmäßig deaktiviert)
$ ssh ubuntu@your-server-ip $ sudo -s $ wget -O - https://cipi.sh/setup.sh | bash
Am Ende der Installation sehen Sie einen Zusammenfassungsbildschirm mit den SSH-Zugriffsdetails
automatisch generiertes Root-Passwort und das Root-Passwort MariaDB.
Speichern Sie sie sofort — Sie werden nur einmal angezeigt. Anmeldeinformationen werden in gespeichert
/etc/cipi/server.json, was – wie alle Cipi-Konfigurationsdateien – der Fall ist
im Ruhezustand verschlüsselt Verwenden von AES-256-CBC über die integrierte Funktion Tresor
System. Anmeldeinformationen, SSH-Schlüssel, .env Dateien und Datenbank-Dumps sind beide geschützt
Festplatte
und während der Übertragung (via Synchronisieren verschlüsselte Archive). Cipi wird ebenfalls erzwungen
DSGVO-konforme Protokollaufbewahrung mit automatischen Rotationsrichtlinien für die Bewerbung,
Sicherheit und HTTP-Protokolle – siehe Protokollaufbewahrung für Einzelheiten.
/etc/cipi/server.json.Zugriff nach der Installation
Nach der Installation, Admin-Zugriff verwendet die Public-Key-Authentifizierung als
cipi Benutzer (Root-Anmeldung ist deaktiviert). App-Benutzer kann SSH direkt mit
ssh myapp@server-ip und das bei der App-Erstellung generierte Passwort. Laufen
cipi Wenn Sie Befehle ausführen oder Verwaltungsaufgaben ausführen möchten, stellen Sie eine Verbindung her als cipi und
dann eskalieren:
# 1. connect to the server (key-based auth only) $ ssh cipi@your-server-ip # 2. escalate to root to run cipi commands cipi@server:~$ sudo -s # 3. now you can use all cipi commands root@server:~# cipi status root@server:~# cipi app list # 4. to work as an app user, switch with su root@server:~# su - myapp
Anforderungen
- Ubuntu 24.04 oder 26.04 LTS (nur Neuinstallationen; Zwischenversionen werden nicht unterstützt)
- Root-Zugriff (bzw
sudo -sauf AWS) - Die Ports 22, 80 und 443 sind geöffnet
- Ein sauberer Server – installieren Sie Cipi nicht auf einem Server mit einem vorhandenen Web-Stack
- A öffentlicher, mit dem Internet verbundener Server mit einem routbaren öffentliches IPv4 Adresse – Nur NAT VPS, Heimnetzwerke hinter einem Router und Hosts, die nicht erreichbar sind Das Internet wird nicht unterstützt
- Vollständige KVM- oder Bare-Metal-Virtualisierung – nicht OpenVZ, LXC-Container oder Shared-Kernel Umgebungen (einschließlich lokaler Docker, Docker Desktop, OrbStack, Colima, WSL und ähnliches). Desktop-Container-Laufzeiten)
Cipi ist getestet und funktioniert auf: DigitalOcean, AWS EC2, Vultr, Linode / Akamai, Hetzner, Google Cloud, OVH, Scaleway und jeder KVM- oder Bare-Metal-Host, auf dem Ubuntu mit einer öffentlichen IP ausgeführt wird.
Schnellstart
1. Erstellen Sie Ihre erste App
Der interaktive Assistent fragt nach einem Benutzernamen, einer primären Domäne, einer Git-Repository-URL (SSH-Format) und
Zweig
falls zutreffend, und PHP-Version. Laravel Apps erfordern immer ein Repository; für
Brauch
Apps können Sie das Repository leer lassen, um die Site nur über SFTP zu hosten – siehe
benutzerdefinierte Apps. Seitdem v5.0, Laravel Apps können verwendet werden
klassisch PHP-FPM oder Laravel Octane (FrankenPHP) mit
--octane – siehe Laravel Octane.
$ cipi app create $ cipi app create --octane # Laravel Octane (FrankenPHP)
Oder übergeben Sie alle Flags direkt, um den interaktiven Modus zu überspringen:
$ cipi app create \
--user=myapp \
--domain=myapp.com \
--repository=git@github.com:you/myapp.git \
--branch=main \
--php=8.5
Am Ende gibt Cipi eine Zusammenfassung der Anmeldeinformationen aus – Speichern Sie es, es wird nur einmal angezeigt – einschließlich
die öffentliche IP-Adresse des Servers (für die DNS-Konfiguration), den SSH-Bereitstellungsschlüssel, Datenbankanmeldeinformationen,
ein gebrauchsfertiges mariadb+ssh:// Verbindungs-URL für GUI-Clients (TablePlus, DBeaver,
Sequel Pro), webhook URL und webhook Token.
2. Fügen Sie den Bereitstellungsschlüssel zu Ihrem Git-Anbieter hinzu
Wenn Sie über ein GitHub- oder GitLab-Token konfiguriert haben cipi git, dieser Schritt ist
automatisch – Cipi fügt den Bereitstellungsschlüssel hinzu und erstellt webhook für Sie. Siehe
Git-Auto-Setup für Einzelheiten.
Andernfalls kopieren Sie die ssh-ed25519 ... Schlüssel, der nach der App-Erstellung angezeigt wird, und fügen Sie ihn als hinzu
Stellen Sie den Schlüssel in Ihrem Repository bereit:
- GitHub: Repository → Einstellungen → Schlüssel bereitstellen → Bereitstellungsschlüssel hinzufügen
- GitLab: Repository → Einstellungen → Repository → Schlüssel bereitstellen
3. Bereiten Sie Ihr Laravel-Projekt vor
Cipi verwendet den Datenbanktreiber für Cache, Sitzungen und Warteschlangen. Führen Sie diese einmal in Ihrem Laravel aus Projektieren, Festschreiben und Pushen der generierten Migrationen:
$ php artisan cache:table $ php artisan session:table $ php artisan queue:table $ php artisan migrate
artisan migrate --force bei jedem Einsatz. Der Cache,
Sitzungs- und Warteschlangentabellen werden bei der ersten Bereitstellung erstellt, wenn Sie die Migrationen festschreiben.4. Bereitstellen
$ cipi deploy myapp
Der Deployer klont Ihr Repo in ein neues releases/N/ Verzeichnis, läuft
composer install --no-dev, Links .env und storage/, läuft
Migrationen, Läufe artisan optimize, schafft storage:link, tauscht die
current Symlink atomar und startet Warteschlangenarbeiter neu. Keine Ausfallzeiten.
5. Installieren Sie SSL
$ cipi ssl install myapp
Certbot stellt ein Let's Encrypt-Zertifikat bereit, konfiguriert Nginx für HTTPS und aktualisiert
APP_URL in .env. Ihre Laravel-App ist jetzt live
https://myapp.com.
Tech-Stack
Cipi bringt einen vollständigen, produktionsbereiten Stack auf Ihren Ubuntu-Server. Hier ist alles, was es gibt installiert und konfiguriert:
| Komponente | Rolle |
|---|---|
| Ubuntu | Basisbetriebssystem (24.04 oder 26.04 LTS) |
| Nginx | Webserver, Reverse-Proxy, SSL-Terminierung. Seitdem v4.5.9, Hauptlinie
nginx von nginx.org
(1.29.8+) mit max_headers 1000 für HTTP/2-Härtung – nicht für Ubuntu
Archivpaket |
| PHP-FPM | Standardmäßig PHP Laufzeit pro App (8.3–8.5; ondrej/php, packets.sury.org oder Ubuntu main pro Veröffentlichung) |
| Laravel Octane | Optionaler FrankenPHP HTTP Server pro Laravel App (seit v5.0) —
cipi app create --octane; FPM- und Octane-Apps existieren gleichzeitig auf demselben Server
|
| MariaDB | Standardmäßige relationale Datenbank (Drop-In-Ersatz MySQL, Port 3306). Optional
PostgreSQL über cipi db install pgsql (Port 5432) seit v4.8.0 |
| Valkey | In-Memory-Speicher für Cache, Sitzungen, Warteschlangen, Broadcast (BSD-lizenzierter Redis-Fork) |
| Supervisor | Prozessmanager für Laravel Warteschlangenarbeiter, Octane, Horizon und Reverb |
| Bereitsteller | Bereitstellungstool ohne Ausfallzeiten |
| Certbot | Let's Encrypt SSL Zertifikate |
| UFW | Firewall (Ports 22, 80, 443) |
| Fail2ban | Fortschrittlicher Brute-Force-Schutz mit Wiederholungsgefängnis |
| Unbeaufsichtigte Upgrades | Automatische Sicherheitspatches |
| Composer | PHP Abhängigkeitsmanager |
| cipi CLI | Serververwaltung und Orchestrierung |
App-Struktur
Wenn du rennst cipi app create, Cipi erstellt eine vollständig isolierte Umgebung für die App.
Hier ist alles, was eingerichtet wird:
/home/myapp/ ← isolierter Linux-Benutzer (chmod 750) ├── .ssh/ │ ├── id_ed25519 ← Schlüssel bereitstellen (privat) │ └── id_ed25519.pub ← Schlüssel bereitstellen (öffentlich – zu Git hinzufügen) ├── .deployer/ │ └── deploy.php ← Deployer-Konfiguration (automatisch generiert) ├── aktuell -> releases/3/ ← Symlink zur aktiven Version ├── releases/ │ ├── 1/ │ ├── 2/ │ └── 3/ ← neueste Version (letzte 5 behalten) ├── shared/ │ ├── .env ← automatisch kompiliert von Cipi │ └── storage/ ← Persistenter Speicher └── logs/ ├── nginx-access.log ├── nginx-error.log ├── php-fpm-error.log ├── worker-default.log └── deploy.log
Zusätzlich zum Home-Verzeichnis erstellt Cipi diese Systemdateien:
PHP-FPM pool: /etc/php/8.5/fpm/pool.d/meineapp.conf (user=myapp; weggelassen für Octane Apps) Octane (v5+): Supervisor meineapp-octane + Nginx proxy_pass → 127.0.0.1:81xx Nginx vhost: /etc/nginx/sites-available/meineapp Supervisor: /etc/supervisor/conf.d/meineapp.conf Crontab: * * * * * php artisan schedule:run MariaDB: database 'meineapp', user 'meineapp'@'localhost'
Die .env wird automatisch mit allen Anmeldeinformationen kompiliert – Datenbankname, Passwort, webhook-Token,
und APP_KEY. Sie müssen es nie manuell anfassen, können es aber jederzeit mit bearbeiten
cipi app env myapp.