cipi.yml · config als Code

Verwalten Sie Laravel Apps mit cipi.yml

Von · Letzte Aktualisierung: · Kostenlose Lektüre, keine Paywall

Der Status, den eine App auf dem Server erwartet – Aliase, PHP, Worker, Gesundheit, Backups – liegt normalerweise in einem Panel oder im Kopf einer Person. Seit Cipi 5.1 kann es in einem leben cipi.yml im Stammverzeichnis des Repositorys, überprüft im selben Pull-Request wie der davon abhängige Code. Dieser Leitfaden stellt den praktischen Ablauf dar: Generieren, planen, anwenden und dann zustimmen, damit jede Bereitstellung in Einklang gebracht wird.

In diesem Ratgeber
  1. Warum die Datei neben den Code gehört
  2. Starten Sie vom Live-Server
  3. Die Befehle, die Sie verwenden werden
  4. Was Sie deklarieren können
  5. Eine vollständige Datei
  6. Planen, dann bewerben
  7. Eine Woche voller echter Veränderungen
  8. Melden Sie sich nach jeder Bereitstellung an
  9. Was die Datei nicht berührt
  10. Sicher über Git zu akzeptieren
  11. FAQ

Warum die Datei neben den Code gehört

Eine Version, die einen Job in der Warteschlange ohne Worker hinzufügt, ist zur Hälfte ausgeliefert. Ein Rollback, das die letzte Woche verlässt upload_max_filesizewird zur Hälfte zurückgerollt. Der Serverstatus befindet sich normalerweise woanders: in einem Panel, einer Wiki-Seite oder in der Erinnerung desjenigen, der die Box eingerichtet hat.

A cipi.yml Wird neben der Laravel-Anwendung festgeschrieben, wird dieser Zustand zum Teil desselben Pull-Requests wie der davon abhängige Code. Die Datei ist deklarativ: Es beschreibt den Endzustand, nicht die Schritte. Cipi liest, was der Server hat, vergleicht es mit der Datei und zeigt Ihnen den Unterschied, bevor Sie etwas anfassen.

Die Produktseite cipi.yml – Konfiguration, die mit dem Code geliefert wird ist die Übersicht. Das vollständige Schema lebt darin Dokumente → Bereitstellen → cipi.yml. Dieser Leitfaden ist die tägliche Schleife für eine App.

Starten Sie vom Live-Server

Sie müssen die Datei nicht von Hand schreiben. Drucken Sie auf einer Cipi 5.1+-Box die aktuelle Konfiguration der App – Aliase, PHP-Version und Pro-App-Einstellungen, zusätzliche Datenbanken, aus Supervisor, Horizon, Reverb zurückgelesene Warteschlangenarbeiter, den Scheduler und die Sicherungsprofile, die die App besitzt – als bereit zum Übertragen Datei:

$ cipi yml generate myapp > cipi.yml
$ cipi yml plan myapp                  # reports nothing to do

Übertragen Sie diese Datei im Repository-Stammverzeichnis. Cipi sucht nach current/cipi.yml, dann current/cipi.yaml, dann shared/cipi.yml – überschreiben mit --file=<path> wenn Sie es woanders aufbewahren.

Bevorzugen Sie eine leere, vollständig kommentierte Vorlage? cipi yml example myapp druckt eine mit Platzhalterdatenbanken und Profilen, die sich bereits im Namespace dieser App befinden, sodass die Vorlage unverändert validiert wird.

Die Befehle, die Sie verwenden werden

Befehl Was es bewirkt
cipi yml generate Druckt die Konfiguration der App so, wie sie auf dem Server verfügbar ist, bereit zum Festschreiben
cipi yml example Eine leere kommentierte Vorlage, deren Namensraum der App zugeordnet ist, sodass sie unverändert validiert wird
cipi yml validate Analysiert die Datei und prüft jeden Wert anhand des Schemas. Ändert nichts
cipi yml plan Der Unterschied: jeder Alias, jeder Worker, jede Datenbank, jede Einstellung und jedes Profil, die hinzugefügt, geändert oder entfernt würden
cipi yml apply Wendet den Plan an. Hinzufügen --yes für Skripte und CI
cipi yml auto on / off / status – Nach jeder erfolgreichen Bereitstellung abgleichen
$ cipi yml generate myapp
$ cipi yml example myapp
$ cipi yml validate myapp
$ cipi yml plan myapp
$ cipi yml apply myapp [--yes]
$ cipi yml auto myapp on|off|status

Was Sie deklarieren können

Sieben Bereiche. Sie müssen nicht alle deklarieren – nur die Abschnitte, die Sie schreiben, werden abgeglichen.

Eine vollständige Datei

Das ist es, was eine Produktions-App normalerweise ausliefert. Sie können das meiste davon generieren; Die Kommentare beziehen sich auf den Pull-Request.

version: 1

app:
  php: "8.5"
  aliases:
    - "www.myapp.com"
    - "*.myapp.com"
  ini:
    upload_max_filesize: 50M
    post_max_size: 60M
    memory_limit: 512M

databases:
  - name: myapp_reporting
  - name: myapp_analytics
    engine: pgsql

workers:
  horizon: false
  reverb: false
  queues:
    - queue: default
      processes: 2
    - queue: emails
      processes: 1
      tries: 5
      timeout: 300

schedule: true

health:
  url: "https://myapp.com/up"
  expect: 200

backup:
  profiles:
    - name: myapp-db
      scope: db
      databases: ["myapp", "myapp_*"]
      exclude_tables: ["*.jobs", "*.telescope_*"]
      every: 30m
      keep: 48
      destinations: [local]
    - name: myapp-nightly
      scope: all
      cron: "0 2 * * *"
      keep_days: 14
      destinations: [s3]
      encrypt: true

Planen, dann bewerben

Es ändert sich nichts, bis man sich das Diff anschaut. cipi yml plan myapp listet alle Aliasnamen, Worker, Datenbanken, Einstellungen und Profile auf, die hinzugefügt, geändert oder entfernt werden. Lesen Sie es so, wie Sie eine Pull-Anfrage lesen.

$ cipi yml validate myapp
$ cipi yml plan myapp
$ cipi yml apply myapp                 # asks for confirmation
$ cipi yml apply myapp --yes           # scripts and CI

Eine Datei, die die Validierung nicht besteht, wird als Ganzes abgelehnt nie teilweise angewendet. Dies ist derselbe Fail-Closed-Pfad, den eine Bereitstellung verwendet, wenn yml auto ist an: E-Mail yml_fail, kein Halbzustand auf der Box.

Eine Woche voller echter Veränderungen

Behandeln Sie die Datei wie Anwendungscode. Bei jedem davon handelt es sich um ein einzeiliges (oder einblockiges) Commit, das überprüft und dann angewendet wird – oder automatisch nach der Veröffentlichung angewendet wird, wenn yml auto ist schon dran.

PHP 8.5 muss bereits installiert sein (cipi php install 8.5), bevor Sie pinnen app.php dazu. Die Datei installiert keine Laufzeitumgebung, die nicht auf der Verpackung enthalten ist.

Melden Sie sich nach jeder Bereitstellung an

Bereitstellungen ignorieren die Datei, bis Sie etwas anderes sagen. Das ist Absicht: ein erstes Commit voncipi.ymlsollte die Produktion nicht überraschen.

$ cipi yml auto myapp on       # reconcile after every successful deploy
$ cipi yml auto myapp status
$ cipi yml auto myapp off      # back to manual apply

Mit dem gegebenen Opt-in, jeder erfolgreich Die Bereitstellung stimmt ab – von beiden cipi deploy und das Git webhook. Eine Veröffentlichung, die keine trägt cipi.yml ist ein stilles No-Op. Eine Datei, die die Validierung nicht besteht, wird per E-Mail gemeldet (yml_fail) und nie zur Hälfte angewendet. Eine erfolgreiche Abstimmung wird ausgelöst yml_apply.

Was die Datei nicht berührt

Sicher über Git zu akzeptieren

Die Datei kommt aus einem Repository, sodass jeder, der einen Commit durchführen kann, ihren Inhalt kontrolliert. Das Schema ist durchgehend ausfallsicher:

Einmal yml auto aktiviert ist, kann jeder, der in dieses Repository pushen kann, die Aliase, PHP-Einstellungen, Worker, Integritätsprüfungen und Sicherungsprofile der App ändern. Das ist der Sinn der Konfiguration als Code – behandeln Sie den Schreibzugriff auf das Repo entsprechend.

Versenden Sie die Datei mit der nächsten Version

Generieren Sie, was der Server bereits hat, schreiben Sie es fest, lesen Sie den Plan und drehen Sie es dann um yml auto an, wenn Sie der Schleife vertrauen. Die Übersicht und das vollständige Schema sind nur einen Klick entfernt.

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

Häufig gestellte Fragen

Muss ich cipi.yml von Hand schreiben?

Nein. cipi yml generate <app> druckt die aktuelle Serverkonfiguration der App als festschreibbereite Datei und cipi yml example druckt eine leere kommentierte Vorlage, wenn Sie lieber ganz von vorne beginnen möchten.

Wendet eine Bereitstellung die Datei automatisch an?

Erst nachdem Sie sich angemeldet haben cipi yml auto <app> on. Bis dahin ignorieren die Bereitstellungen die Datei und führen einen manuellen Abgleich durch plan und apply.

Was passiert mit Dingen, die in der Datei nicht erwähnt werden?

Sie werden allein gelassen. Nur die von Ihnen deklarierten Abschnitte werden abgeglichen – mit einer bewussten Ausnahme: Die Alias-Liste ist maßgeblich, sodass das Entfernen eines Alias ​​aus der Datei diese vom Server entfernt.

Kann ein Commit meinen Server kaputt machen?

Das Schema enthält keine Shell-Befehle und keine Include-Pfade, eine App kann nur auf ihre eigenen Datenbanken und Sicherungsprofile zugreifen, und eine Datei, die die Validierung nicht besteht, wird als Ganzes abgelehnt und nicht zur Hälfte angewendet. Bereitstellungen ignorieren die Datei vollständig, bis Sie sie umdrehen yml auto An.

Funktioniert es mit dem Git webhook?

Ja. Mit cipi yml auto an, beides cipi deploy und ein durch webhook ausgelöster Bereitstellungsabgleich nach einer erfolgreichen Veröffentlichung.

Lesen Sie weiter