Cipi installieren

Cipi installiert einen kompletten Laravel-bereiten Produktionsstapel am 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.

Von Null bis zur Produktion in drei Schritten

bash
# 1 — on a fresh Ubuntu 24.04 / 26.04 VPS, over SSH, as a user with sudo
wget -O - https://cipi.sh/setup.sh | bash

# 2 — create the app (Laravel by default)
cipi app create

# 3 — deploy it and put it behind HTTPS
cipi deploy myapp
cipi ssl install myapp

Das ist der ganze Weg. Erstellen Sie zunächst einen SSH-Schlüssel auf Ihrem Computer (unten) und führen Sie dann das Installationsprogramm aus auf dem Server – Sie werden aufgefordert, diesen öffentlichen Schlüssel einzufügen. Alles, was danach kommt, wird in erklärt der Rest dieser Seite.

Führen Sie das Installationsprogramm auf dem Server aus, nicht auf Ihrem eigenen Computer. SSH ins Neue VPS zuerst und führen Sie es dort als Benutzer mit aus sudo. Cipi versorgt die ganze Box – es ist nichts, was Sie von Ihrem Laptop aus auf einen Remote-Host richten.

Erstellen Sie einen SSH-Schlüssel auf Ihrem Computer

Tun Sie dies auf Ihrem Laptop oder Ihrer Workstation, nicht auf dem VPS. Der Installer benötigt die öffentlich Die Hälfte des Schlüssels, damit der Server gesperrt werden kann: Nach der Einrichtung führen Sie SSH in as aus die cipi Benutzer mit diesem Schlüssel. Die Root-SSH-Anmeldung ist deaktiviert. Fügen Sie niemals das Private ein Schlüssel.

Sehen Sie nach, ob Sie bereits eines haben:

bash
ls ~/.ssh/*.pub

Wenn id_ed25519.pub oder id_rsa.pub aufgeführt ist, haben Sie bereits einen Schlüssel – überspringen Generierung und kopieren Sie die öffentliche Datei mit dem folgenden Befehl. Wenn der Ordner leer ist oder der Befehl Fehler, erstellen Sie einen neuen Ed25519-Schlüssel:

bash
ssh-keygen -t ed25519 -C "you@example.com"

Drücken Sie die Eingabetaste, um den Standardpfad zu akzeptieren (~/.ssh/id_ed25519). Legen Sie eine Passphrase fest, wenn Sie wollen (empfohlen). Führen Sie dies unter macOS und Linux im Terminal aus; Verwenden Sie unter Windows PowerShell oder WSL.

Zeigen Sie den öffentlichen Schlüssel an – dies ist die einzelne Zeile, die Sie einfügen, wenn das Installationsprogramm Sie fragt:

bash
cat ~/.ssh/id_ed25519.pub

Es sieht so aus ssh-ed25519 AAAA… comment. Kopieren Sie die ganze Zeile:

  • macOS: pbcopy < ~/.ssh/id_ed25519.pub
  • Linux: xclip -sel clip < ~/.ssh/id_ed25519.pub (oder kopieren Sie von der Terminal)
  • Windows (PowerShell): Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
Nur die .pub Datei ist öffentlich. Die Datei mit dem Namen id_ed25519 (nein Erweiterung) ist die privat Schlüssel – behalten Sie ihn auf Ihrem Computer und fügen Sie ihn niemals ein in den Installer einfügen oder an den Server senden.

Führen Sie das Installationsprogramm auf dem Server aus

SSH in die neue Ubuntu VPS als Benutzer mit sudo, dann:

bash
wget -O - https://cipi.sh/setup.sh | bash

Der Assistent fragt nach dem öffentlichen Schlüssel bevor ein Paket installiert wird. Fügen Sie die Zeile ein Sie haben oben kopiert (akzeptierte Formate: ssh-ed25519, ssh-rsa, ecdsa). Cipi bereinigt Kommentare, Wagenrückläufe und zusätzliche Leerzeichen und erstellt dann ein engagierter cipi Linux-Benutzer für Administrator-SSH-Zugriff und härtet SSH: Root-Login deaktiviert, cipi Nur öffentlicher Schlüssel (Gruppe cipi-ssh), App-Benutzer (Gruppe cipi-apps) kann sich mit Passwort verbinden. Anmeldeversuche sind auf 3 mit a begrenzt 20-Sekunden-Kulanzfrist; 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. Es ist nicht ein SSH-Passwort: Root-SSH-Anmeldung ist deaktiviert. Es ist das, was Sie eingeben, wenn Sie bereits als angemeldet sind cipi Benutzer mit Ihrem Schlüssel, Sie laufen su root. Bewahren Sie es in einem Passwort auf Manager.

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

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 MariaDB Root-Passwort. 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 mit AES-256-CBC über den eingebauten 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 – sieheLog retention für Einzelheiten.

Speichern Sie die SSH-Zugangsdaten, das Root-Passwort und das MariaDB Root-Passwort. 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, von denen aus sie 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 läuft nicht lokal. 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 ggf. und PHP-Version. Laravel Apps benötigen immer ein Repository; für Brauch Apps können Sie das Repository leer lassen, um die Site nur über SFTP zu hosten – siehe custom apps. Seitdem v5.0, Laravel Apps können genutzt werden klassisches 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 druckt Cipi eine Zusammenfassung der Anmeldeinformationen – Speichern Sie es, es wird nur einmal angezeigt – einschließlich die öffentliche IP-Adresse des Servers (für 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 einen GitHub- oder GitLab-Token konfiguriert haben cipi git, dieser Schritt ist automatisch — Cipi fügt den Bereitstellungsschlüssel hinzu und erstellt den 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 läuft automatisch ab 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 neuesreleases/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 ab nginx.org(1.29.8+) mit max_headers 1000 für HTTP/2 Härtung – nicht Ubuntu Archivpaket
PHP-FPM Standardmäßig PHP Laufzeit pro App (8,3–8,5; ondrej/php, packets.sury.org, oder Ubuntu Haupt pro Veröffentlichung)
Laravel Octane Optional FrankenPHP HTTP Server pro Laravel App (seit v5.0) — cipi app create --octane; FPM- und Octane-Apps koexistieren auf demselben Server
MariaDB Standardmäßige relationale Datenbank (Drop-in-Ersatz für 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
unattended-upgrades Automatische Sicherheitspatches
Composer PHP Abhängigkeitsmanager
cipi CLI Serververwaltung und Orchestrierung

Was jede App bekommt

Jede App wird in einer vollständig isolierten Umgebung ausgeführt. Laravel ist die Standardeinstellung – keine Ausfallzeit stellt eine eigene Datenbank, Worker, einen Scheduler und webhook bereit – optional bereitgestellt von Octane (FrankenPHP) statt PHP-FPM. --custom ist für einfache Websites (WordPress, statisch + PHP): ein klassischer Einsatz in htdocs, ein konfigurierbares Docroot, nein Datenbank, Nr .env, kein cron, keine Arbeiter.

Bereich Was Cipi Ihnen gibt
Webserver Nginx mit einem virtuellen Host pro App – PHP-FPM oder Octane über proxy_pass, abgestimmt auf Laravel
PHP & Composer Per App wählbar, Hot-Swap-fähig; Einstellungen verwaltet mit cipi ini über FPM und CLI
Datenbank MariaDB standardmäßig, optional PostgreSQL – eine dedizierte Datenbank und ein Benutzer pro Laravel App
Warteschlangenarbeiter Supervisor Pools pro App — queue:work oder Horizon; optional Reverb für WebSockets
Bereitstellungen Deployer – atomarer Symlink, 5 Releases, Rollback, optionaler Node-Build; klassischer Klon hinein htdocs für benutzerdefinierte Apps
SSL Let's Encrypt über Certbot – HTTP-01 standardmäßig, optional DNS-01 (Cloudflare) mit Platzhalter
Sicherheit Fail2ban + UFW, ein dedizierter Linux-Benutzer, ein eigener FPM/Octane-Prozess und SSH-Schlüssel pro App
Gesundheitschecks HTTP Sonden alle 5 Minuten, plus a Überprüfung nach der Bereitstellung mit optional Automatisches Rollback einer defekten Version
Backups Sicherungsprofile — was, wie oft, wo, wie lange – S3 / S3-kompatibel / lokal, mit clientseitiger Verschlüsselung
Configuration Optional pro Projekt cipi.yml für Aliase, Datenbanken, Worker, Gesundheitscheck und Backups

App Structure

When you run 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; entfällt 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.