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

bash
$ 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:

bash
$ SSH_PUBKEY="ssh-ed25519 AAAA..." wget -O - https://cipi.sh/setup.sh | bash
Wenn Sie noch keinen SSH-Schlüssel haben, generieren Sie einen mit: ssh-keygen -t rsa -b 4096

AWS (Root-Anmeldung standardmäßig deaktiviert)

bash
$ 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.

Speichern Sie die SSH-Zugangsdaten, das Root-Passwort und das Root-Passwort MariaDB. Angezeigt nur einmal während Installation. Anmeldeinformationen werden verschlüsselt gespeichert /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:

bash
# 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 -s auf 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 wird nicht lokal ausgeführt. Es ist nicht mit lokalem Dockerized kompatibel Umgebungen. Das Installationsprogramm scheint auf einer Laptop-VM oder einem Container erfolgreich zu sein, aber SSL Bereitstellung, Domänenrouting und Produktionsworkflows funktionieren nicht ohne eine echte Öffentlichkeit Server. Siehe Warum nicht lokal? für die vollständige Erklärung.

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.

bash
$ cipi app create
$ cipi app create --octane   # Laravel Octane (FrankenPHP)

Oder übergeben Sie alle Flags direkt, um den interaktiven Modus zu überspringen:

bash
$ 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:

bash
$ php artisan cache:table
$ php artisan session:table
$ php artisan queue:table
$ php artisan migrate
Cipi wird automatisch ausgeführt artisan migrate --force bei jedem Einsatz. Der Cache, Sitzungs- und Warteschlangentabellen werden bei der ersten Bereitstellung erstellt, wenn Sie die Migrationen festschreiben.

4. Bereitstellen

bash
$ 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

bash
$ 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.