cipi.yml · config como código

Gerencie Laravel aplicativos com cipi.yml

Por · Última atualização: · grátis para ler, sem acesso pago

O estado que um aplicativo espera no servidor – aliases, PHP, trabalhadores, saúde, backups – geralmente fica em um painel ou na cabeça de alguém. Desde Cipi 5.1 ele pode viver em um cipi.yml na raiz do repositório, revisado na mesma solicitação pull do código que dele depende. Este guia é o ciclo prático: gerar, planejar, aplicar e, em seguida, ativar para que cada implantação seja reconciliada.

Neste guia
  1. Por que o arquivo pertence ao lado do código
  2. Comece no servidor ativo
  3. Os comandos que você usará
  4. O que você pode declarar
  5. Um arquivo completo
  6. Planeje e depois aplique
  7. Uma semana de mudanças reais
  8. Ative após cada implantação
  9. O que o arquivo não tocará
  10. É seguro aceitar em vez do Git
  11. Perguntas frequentes

Por que o arquivo pertence ao lado do código

Uma versão que adiciona um trabalho na fila sem um trabalhador é enviada pela metade. Uma reversão que sai da semana passada upload_max_filesizeestá meio revertido. O estado do servidor geralmente reside em outro lugar: um painel, uma página wiki ou a memória de quem configurou a caixa.

A cipi.yml confirmado próximo ao aplicativo Laravel torna esse estado parte da mesma solicitação pull que o código que depende dele. O arquivo é declarativo: descreve o estado final, não as etapas. Cipi lê o que o servidor tem, compara com o arquivo e mostra a diferença antes de mexer em qualquer coisa.

A página do produto cipi.yml — configuração que acompanha o código é a visão geral. O esquema completo reside em Documentos → Implantar → cipi.yml. Este guia é o ciclo diário de um aplicativo.

Comece no servidor ativo

Você não precisa escrever o arquivo manualmente. Em uma caixa Cipi 5.1+, imprima a configuração atual do aplicativo — aliases, versão PHP e configurações por aplicativo, bancos de dados extras, trabalhadores da fila lidos de Supervisor, Horizon, Reverb, o agendador e os perfis de backup que o aplicativo possui — como um arquivo pronto para commit:

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

Confirme esse arquivo na raiz do repositório. Cipi procura em current/cipi.yml, então current/cipi.yaml, então shared/cipi.yml - substituir por --file=<path> se você mantê-lo em outro lugar.

Prefere um modelo em branco e totalmente comentado? cipi yml example myapp imprime um com bancos de dados de espaço reservado e perfis já dentro do namespace desse aplicativo, para que o modelo seja validado como está.

Os comandos que você usará

Comando O que isso faz
cipi yml generate Imprime a configuração do aplicativo tal como está no servidor, pronto para confirmar
cipi yml example Um modelo comentado em branco, com namespace para o aplicativo para que ele seja validado como está
cipi yml validate Analisa o arquivo e verifica cada valor no esquema. Não muda nada
cipi yml plan A diferença: cada alias, trabalhador, banco de dados, configuração e perfil que seria adicionado, alterado ou removido
cipi yml apply Aplica o plano. Adicionar --yes para scripts e CI
cipi yml auto on / off / status — reconciliar após cada implantação bem-sucedida
$ 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

O que você pode declarar

Sete áreas. Você não precisa declarar todos eles – apenas as seções que você escreve são reconciliadas.

Um arquivo completo

Isso é o que um aplicativo de produção normalmente fornece. Você pode gerar a maior parte; os comentários são para a solicitação pull.

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

Planeje e depois aplique

Nada muda até você olhar para a diferença. cipi yml plan myapp lista cada alias, trabalhador, banco de dados, configuração e perfil que seriam adicionados, alterados ou removidos. Leia da mesma forma que você lê uma solicitação pull.

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

Um arquivo que falha na validação é rejeitado como um todo e nunca aplicado parcialmente. Esse é o mesmo caminho de falha fechada que uma implantação usa quando yml auto está ativado: e-mail yml_fail, sem meio estado na caixa.

Uma semana de mudanças reais

Trate o arquivo como código de aplicativo. Cada um deles é um commit de uma linha (ou um bloco), revisado e então aplicado — ou aplicado automaticamente após o lançamento, se yml auto já está ligado.

PHP 8.5 já deve estar instalado (cipi php install 8.5) antes de fixar app.php para isso. O arquivo não instalará um tempo de execução que não esteja na caixa.

Ative após cada implantação

As implantações ignoram o arquivo até que você diga o contrário. Isso é deliberado: um primeiro commit decipi.ymlnão deve surpreender a produção.

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

Com o opt-in fornecido, cada bem sucedido implantar reconciliações - de ambos cipi deploy e o Git webhook. Um lançamento que não traz cipi.yml é um ambiente silencioso e autônomo. Um arquivo que falha na validação é relatado por email (yml_fail) e nunca aplicado pela metade. Uma reconciliação bem-sucedida dispara yml_apply.

O que o arquivo não tocará

É seguro aceitar em vez do Git

O arquivo chega de um repositório, então qualquer pessoa que possa fazer commit controla seu conteúdo. O esquema é fechado com falha em:

Uma vez yml auto estiver ativado, qualquer pessoa que puder enviar para esse repositório poderá alterar os aliases, configurações PHP, trabalhadores, verificação de integridade e perfis de backup do aplicativo. Esse é o ponto da configuração como código – trate o acesso de gravação ao repositório de acordo.

Envie o arquivo com a próxima versão

Gere o que o servidor já possui, faça commit, leia o plano e depois ligue yml auto ativado quando você confia no loop. A visão geral e o esquema completo estão a um clique de distância.

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

Perguntas frequentes

Tenho que escrever cipi.yml à mão?

Não. cipi yml generate <app> imprime a configuração atual do servidor do aplicativo como um arquivo pronto para confirmação e cipi yml example imprime um modelo comentado em branco se você preferir começar do zero.

Uma implantação aplica o arquivo automaticamente?

Somente depois de você aceitar cipi yml auto <app> on. Até então o deploy ignora o arquivo e você reconcilia manualmente com plan e apply.

O que acontece com as coisas que o arquivo não menciona?

Eles são deixados sozinhos. Somente as seções que você declara são reconciliadas — com uma exceção deliberada: a lista de alias é oficial, portanto, remover um alias do arquivo o remove do servidor.

Um commit pode quebrar meu servidor?

O esquema não carrega comandos shell nem caminhos de inclusão, um aplicativo só pode tocar em seus próprios bancos de dados e perfis de backup, e um arquivo que falha na validação é rejeitado como um todo, em vez de ser aplicado no meio do caminho. As implantações ignoram o arquivo completamente até você virar yml auto sobre.

Funciona com o Git webhook?

Sim. Com cipi yml auto em, ambos cipi deploy e uma reconciliação de implantação acionada por webhook após um lançamento bem-sucedido.

Continue lendo