Multi-service no mesmo repo

Cenário: 3 services no mesmo docker-compose.yml, registrados como 3 apps separadas. App 1 deploya OK. App 2 falha assim:

Sintoma:

[FAIL] meu-app-2  bundle decrypt failed: invalid mac

Causa

runner add --repo agency/meet --instance frontend e runner add --repo agency/meet --instance backend criam duas ckeys distintas. As duas apps compartilham o mesmo .runner/secrets.enc no repo — só a primeira a fazer push consegue decriptar. A segunda tenta decriptar com a própria ckey e falha.


Workflow correto — setup inicial (v2.30.6+)

# 1. Registra app primária
runner add --repo agency/meet --instance frontend

# 2. Registra as outras apps do mesmo repo
runner add --repo agency/meet --instance backend
runner add --repo agency/meet --instance livekit

# 3. Unifica ckey — frontend é o source-of-truth
runner ckeys copy --from frontend --to backend
runner ckeys copy --from frontend --to livekit

# 4. Verifica que os valores plaintext batem
runner secrets diff frontend backend
runner secrets diff frontend livekit

# 5. Deploya
runner deploy frontend
runner deploy backend
runner deploy livekit

Se já está em produção e quebrado

Operator descobre 3 apps com 3 ckeys diferentes.

# 1. Backup ANTES de mexer
runner ckeys export backend > backend.ckey.bak
runner ckeys export livekit > livekit.ckey.bak

# 2. Unifica ckeys para a do frontend
runner ckeys copy --from frontend --to backend
runner ckeys copy --from frontend --to livekit

# 3. Re-encripta bundle com a nova ckey (frontend)
runner secrets reset-bundle frontend --yes

# 4. Deploya todos para puxar o novo bundle
runner deploy frontend
runner deploy backend
runner deploy livekit

Se runner secrets diff mostrou valores conflitantes no passo de diagnóstico, resolva o conflito antes do reset-bundle:

runner env set backend KEY=valor-correto
runner secrets diff frontend backend   # deve estar limpo antes de continuar

Per-service bundle paths (v2.30.7+)

Em compose multi-service, o runner salva bundles separados por service:

  • pull/frontend/.runner/secrets.enc
  • pull/backend/.runner/secrets.enc
  • pull/livekit/.runner/secrets.enc

Isso reduz colisão de bundle, mas as ckeys ainda precisam estar alinhadas para secrets reset-bundle funcionar sem sobrescrever o bundle do outro service.


Como prevenir

No primeiro runner add de cada service adicional, copie a ckey imediatamente:

runner add --repo agency/meet --instance backend
runner ckeys copy --from frontend --to backend

Use runner secrets diff antes de unificar a ckey — ele mostra valores conflitantes entre as apps antes que a unificação os esconda.


Ver também

By Borlot.com.br on 27/05/2026