cipi.yml · configuration en tant que code

Gérez Laravel applications avec cipi.yml

Par · Dernière mise à jour : · lecture gratuite, pas de paywall

L'état qu'une application attend sur le serveur (alias, PHP, Workers, santé, sauvegardes) se trouve généralement dans un panneau ou dans la tête de quelqu'un. Depuis Cipi 5.1, il peut vivre dans un cipi.yml à la racine du dépôt, revu dans la même pull request que le code qui en dépend. Ce guide est la boucle pratique : générer, planifier, appliquer, puis s'inscrire pour que chaque déploiement soit réconcilié.

Dans ce guide
  1. Pourquoi le fichier appartient à côté du code
  2. Démarrer à partir du serveur live
  3. Les commandes que vous utiliserez
  4. Ce que vous pouvez déclarer
  5. Un dossier complet
  6. Planifiez, puis postulez
  7. Une semaine de vrais changements
  8. Inscrivez-vous après chaque déploiement
  9. Ce que le fichier ne touchera pas
  10. Acceptation sûre via Git
  11. FAQ

Pourquoi le fichier appartient à côté du code

Une version qui ajoute une tâche en file d'attente sans travailleur est à moitié expédiée. Un rollback qui laisse celui de la semaine dernière upload_max_filesizeest à moitié annulé. L'état du serveur réside généralement ailleurs : un panneau, une page wiki ou la mémoire de celui qui a configuré la boîte.

A cipi.yml validé à côté de l'application Laravel fait que cet état fait partie de la même pull request que le code qui en dépend. Le fichier est déclaratif: il décrit l'état final, pas les étapes. Cipi lit ce que possède le serveur, le compare avec le fichier et vous montre la différence avant de toucher à quoi que ce soit.

La page produit cipi.yml — configuration fournie avec le code est l'aperçu. Le schéma complet réside dans Docs → Déployer → cipi.yml. Ce guide est la boucle quotidienne d'une application.

Démarrer à partir du serveur live

Vous n'êtes pas obligé d'écrire le fichier à la main. Sur une boîte Cipi 5.1+, imprimez la configuration actuelle de l'application (alias, version PHP et paramètres par application, bases de données supplémentaires, files d'attente relues à partir de Supervisor, Horizon, Reverb, le planificateur et les profils de sauvegarde que possède l'application) — sous forme de fichier prêt à être validé :

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

Validez ce fichier à la racine du référentiel. Cipi le recherche dans current/cipi.yml, alors current/cipi.yaml, alors shared/cipi.yml — remplacer par --file=<path> si vous le gardez ailleurs.

Vous préférez un modèle vierge et entièrement commenté ? cipi yml example myapp en imprime un avec des bases de données et des profils réservés déjà dans l'espace de noms de cette application, de sorte que le modèle soit validé tel quel.

Les commandes que vous utiliserez

Commande Ce que ça fait
cipi yml generate Imprime la configuration de l'application telle qu'elle se présente sur le serveur, prête à être validée
cipi yml example Un modèle commenté vierge, avec un espace de noms pour l'application afin qu'il soit validé tel quel
cipi yml validate Analyse le fichier et vérifie chaque valeur par rapport au schéma. Cela ne change rien
cipi yml plan La différence : chaque alias, travailleur, base de données, paramètre et profil qui serait ajouté, modifié ou supprimé
cipi yml apply Applique le plan. Ajouter --yes pour les scripts et CI
cipi yml auto on / off / status — réconcilier après chaque déploiement réussi
$ 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

Ce que vous pouvez déclarer

Sept domaines. Vous n’êtes pas obligé de tous les déclarer : seules les sections que vous rédigez sont rapprochées.

Un dossier complet

C’est ce qu’une application de production propose généralement. Vous pouvez en générer la majeure partie ; les commentaires sont pour la 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

Planifiez, puis postulez

Rien ne change jusqu'à ce que vous regardiez la différence. cipi yml plan myapp répertorie tous les alias, travailleurs, bases de données, paramètres et profils qui seraient ajoutés, modifiés ou supprimés. Lisez-le comme vous lisez une pull request.

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

Un dossier dont la validation échoue est rejeté dans son ensemble et jamais partiellement appliqué. Il s'agit du même chemin fermé en cas d'échec qu'un déploiement utilise lorsque yml auto est activé : email yml_fail, pas de demi-état sur la boite.

Une semaine de vrais changements

Traitez le fichier comme du code d'application. Chacun d'entre eux est un commit d'une ligne (ou d'un bloc), révisé, puis appliqué - ou appliqué automatiquement après la publication si yml auto est déjà allumé.

PHP 8.5 doit déjà être installé (cipi php install 8.5) avant d'épingler app.php à cela. Le fichier n'installera pas un runtime qui n'est pas sur la boîte.

Inscrivez-vous après chaque déploiement

Les déploiements ignorent le fichier jusqu'à ce que vous disiez le contraire. C'est délibéré : un premier engagement decipi.ymlne devrait pas surprendre la production.

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

Avec l'opt-in donné, chaque réussi déployer des rapprochements - des deux cipi deploy et le Git webhook. Une version qui ne porte aucun cipi.yml est une opération silencieuse. Un fichier dont la validation échoue est signalé par email (yml_fail) et jamais appliqué à mi-chemin. Un rapprochement réussi des incendies yml_apply.

Ce que le fichier ne touchera pas

Acceptation sûre via Git

Le fichier provient d'un référentiel, donc toute personne pouvant valider contrôle son contenu. Le schéma est fermé en cas d'échec :

Une fois yml auto est activé, toute personne pouvant accéder à ce référentiel peut modifier les alias, les paramètres PHP, les travailleurs, le contrôle de santé et les profils de sauvegarde de l'application. C'est le but de la configuration en tant que code : traitez l'accès en écriture au dépôt en conséquence.

Expédiez le fichier avec la prochaine version

Générez ce que le serveur possède déjà, validez-le, lisez le plan, puis activez yml auto activé lorsque vous faites confiance à la boucle. L'aperçu et le schéma complet sont accessibles en un seul clic.

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

Questions fréquemment posées

Dois-je écrire cipi.yml à la main ?

Non. cipi yml generate <app> imprime la configuration actuelle du serveur de l'application sous forme de fichier prêt à être validé, et cipi yml example imprime un modèle commenté vierge si vous préférez repartir de zéro.

Un déploiement applique-t-il automatiquement le fichier ?

Seulement après vous être inscrit avec cipi yml auto <app> on. Jusque-là, les déploiements ignorent le fichier et vous réconciliez manuellement avec plan et apply.

Qu’arrive-t-il aux choses que le dossier ne mentionne pas ?

Ils sont laissés seuls. Seules les sections que vous déclarez sont réconciliées — à une exception délibérée près : la liste des alias fait autorité, donc supprimer un alias du fichier le supprime du serveur.

Un commit peut-il casser mon serveur ?

Le schéma ne contient aucune commande shell ni aucun chemin d'inclusion, une application ne peut toucher que ses propres bases de données et profils de sauvegarde, et un fichier qui échoue à la validation est rejeté dans son ensemble plutôt qu'appliqué à mi-chemin. Les déploiements ignorent complètement le fichier jusqu'à ce que vous activiez yml auto sur.

Est-ce que ça marche avec Git webhook ?

Oui. Avec cipi yml auto sur, les deux cipi deploy et une réconciliation de déploiement déclenchée par webhook après une version réussie.

Continuez à lire